使用 TCP 协议,客户端和服务器在一个端口上达成一致,然后可以保持连接。服务器知道客户端的 IP 地址,因此可以发回消息。如果我们使用 nodejs,那么多个客户端可以在同一个端口上连接到同一个 nodejs 服务器。这怎么可能?同一服务器如何在同一端口上建立多个连接。
单个端口上可以维护的连接数量没有限制(尽管实际上可能存在操作系统或硬件限制)。当然,只有单个进程可以监听端口,但这与连接无关。这不是特定于节点的,所有 TCP 服务器都是这样工作的。
如果客户端在 NAT 之后,那么它的 IP 可以是动态的,那么 nodejs 服务器如何向客户端发送数据。
你本质上是在问 NAT 是如何工作的。同样,在这种情况下没有特定于节点的内容。NAT 服务器根据需要简单地更改数据包标头,并维护路由转换表,就像任何连接一样。
在服务器和客户端上维护持久连接的资源利用率是多少
仅连接本身的开销确实非常小。一点点记忆,但在大局中几乎微不足道。如果您为每个连接存储额外的关联数据,则可能会有所不同。Node.js 可以很好地处理大量并发连接,但是如果您担心,您可以随时搜索基准测试,或者自己编写。
nodejs服务器崩溃时发生了什么?客户端如何再次发起连接?
套接字会发出关闭和错误事件。只需收听它们,然后尝试重新连接,可能会有一个回退延迟。
如果客户端出现网络问题,并且每 5 分钟后终止并启动连接..那么有没有办法处理这种情况?
不完全确定你在这里问什么。客户端只需按照上一个问题/答案中的说明重新连接即可。如果您将某些数据与客户端套接字相关联,并且您希望在释放该数据之前客户端有机会重新连接的宽限期,那么您需要设置一个超时,该超时将在一定数量后释放这些资源的时间。然后,在连接侦听器中,或者可能在身份验证事件中,您需要分析新连接以查看它是否与最近断开连接的客户端匹配。
我肯定会推荐查看socket.io,特别是如果您的用例是基于 Web 的,尽管它不仅可以用于浏览器/服务器连接。它会或多或少地自动完成许多您似乎关心的事情(重新连接、资源关联、断开连接宽限期等)。