gpt4 book ai didi

node.js - 网络服务器之上的http服务器

转载 作者:可可西里 更新时间:2023-11-01 02:50:35 25 4
gpt4 key购买 nike

我用 express 实现了 2 个网络服务器。一个是主服务,一个是微服务。

它们通过 HTTP REST API 进行通信,过去我们在微服务上启动了一个 socket.io 服务器,以观察主服务器的启动/关闭状态。

              ----HTTP-----
[main server] [microservice]
--socket.io--

然后我意识到 socket.io 不是正确的工具。所以我决定将 socket.io 换成原始 TCP 套接字。

所以问题是:是否可以在原始 TCP 服务器(在同一端口上)的“顶部”启动 http 服务器?(允许通过 TCP 客户端连接并发送 HTTP请求?)

到目前为止我有这个:

  const app = express();
const server = http.createServer(app);
// const io = sio(server);
server.listen(config.port, config.ip, callback);

我正在尝试与 this 集成

我正在尝试实现并通过 socket.io 成功实现的是在微服务上启动一个套接字服务器,在主服务器上连接到它,使其保持事件状态,并监视事件以保持全局变量 bool 值“连接”与它同步。我正在使用此变量来了解我的微服务前端状态,还可以预先检查我是否应该在请求时尝试请求微服务,以及用于登录目的。我想避免手动轮询,首先是为了可维护性,也是为了实时目的。

最佳答案

Is that possible to start the http server "ON TOP" of a raw TCP server (on the same port) ?

有点,不是真的。 HTTP 在 TCP 之上运行。因此,您可以在技术上打开一个原始 TCP 服务器,然后编写您自己的代码来解析传入的 HTTP 请求并发送合法的 HTTP 响应。但是,现在您刚刚编写了自己的 HTTP 服务器,因此它不再是原始 TCP。

尝试让单个服务器同时接受 HTTP 和其他一些协议(protocol)的挑战在于,您的服务器必须能够确定对于任何给定的传入数据包,它应该如何处理它。它是 HTTP 请求吗?或者是您的其他类型的自定义请求。写这样一个东西在技术上是可行的。

或者,您可以使用 webSocket 技术,该技术以 HTTP 请求开始,但使用 upgrade header 请求升级到其他协议(protocol)。在 http 规范中完全定义了如何执行此操作。

但是,除非你有一些网络限制,你只能有一台服务器或一个开放端口,我会问为什么?这是一种复杂的做事方式。为不同类型的通信使用不同的端口和不同的监听服务器实际上并不需要任何成本。而且,当每台服务器只监听一种类型的流量时,事情就简单多了。您可以为 HTTP 请求使用标准 HTTP 服务器,也可以为自定义 TCP 请求使用您自己的自定义 TCP 服务器。


我无法从您的问题中真正看出您要解决的真正问题是什么。如果您只是想测试您的 HTTP 服务器是否启动/关闭,那么使用一些外部进程,每隔一段时间只查询您的一个 HTTP REST API 调用,然后辨别服务器是否按预期响应。许多现有的代码体也可以配置为执行此操作(检查 Web 服务器的运行状况是一项常见任务)。

您链接到的代码显示了一个示例服务器,它只发回它收到的任何消息(称为回显服务器)。这只是一个经典的测试服务器,供客户端连接作为测试。第二个代码块是一段客户端代码示例,用于连接到服务器、发送一条短消息然后断开连接。


来自您的评论:

The underlying TCP server wouldn't even be used for messaging, it just would be used to watch connect/disconnect events

http 服务器已经从 TCP 服务器继承,因此它具有服务器本身的所有相同事件。您可以在 http server doc 中查看所有这些事件.我不知道你到底想要什么,但有一些服务器生命周期事件,例如:

listening   (server now listening)
close (server now closed)

还有服务器事件事件,例如:

connect     (new client connected)
request (new client issues a request)

并且,从请求事件中,您可以获得 httpClientRequesthttpServerResponse 对象,它们允许您监视单个连接的生命周期,包括事件获取实际传入连接的套接字对象。

这是一个 code example对于 http 服务器文档中的 connect 事件。

关于node.js - 网络服务器之上的http服务器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44717051/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com