gpt4 book ai didi

node.js - Nodejs如何维持多个并发连接?

转载 作者:太空宇宙 更新时间:2023-11-04 03:11:26 24 4
gpt4 key购买 nike

我阅读了很多有关 Nodejs 的内容,但仍然不清楚以下内容:

  • 使用 TCP 协议(protocol),客户端和服务器在一个端口上达成一致,然后就可以保持连接。服务器知道客户端的 IP 地址,因此可以发回消息。如果我们使用nodejs,那么多个客户端可以在同一端口上连接到同一nodejs服务器。这怎么可能?同一服务器如何在同一端口上建立多个连接。
  • 如果客户端位于 NAT 之后,那么它的 IP 可以是动态的,那么 Nodejs 服务器如何向客户端发送数据。
  • 维护服务器和客户端上的持久连接时的资源利用率如何?
  • nodejs 服务器崩溃时发生了什么?客户端如何重新发起连接?
  • 如果客户端出现网络问题,并且每 5 分钟后终止并启动连接..那么有没有办法处理这种情况?

最佳答案

With TCP protocol client and server agree on one port and then can maintain a connection.Server knows IP address of client and hence can send back messages.If we use nodejs then multiple clients can connect to same nodejs server on same port. How this can be possible? How multiple connections can be established on same port by same server.

单个端口上可以维护的连接数量没有限制(尽管实际上可能存在操作系统或硬件限制)。当然,只有单个进程可以监听端口,但这与连接无关。这不是特定于 Node 的,所有 TCP 服务器都这样工作。

If client is behind NAT then its IP can be dynamic , so how can nodejs server can send data to client.

您实质上是在问 NAT 是如何工作的。同样,在这种情况下没有任何特定于 Node 的内容。 NAT 服务器只需根据需要更改数据包 header ,并维护路由转换表,就像任何连接一样。

What will be resource utilization in maintaining persistent connections on server and client

对于连接本身来说,开销确实很小。一点点内存,但在大局中几乎微不足道。如果您要存储与每个连接相关的附加数据,则情况可能会有所不同。 Node.js 可以很好地处理大量并发连接,但如果您担心,您可以随时搜索基准测试,或编写自己的测试。

What happend when nodejs server crashes?How can client initiate connection again?

套接字发出 closeerror事件。只需监听它们,然后尝试重新连接,可能会有一个退避延迟。

If there is network problem on client side and it terminates and initiate connection after every 5 mins ..then is there a way this scenario can be handled?

不完全确定您在这里问什么。客户端只需按照上一个问题/答案中所述重新连接即可。如果您将某些数据与客户端套接字关联,并且希望有一个宽限期,让客户端有机会在释放该数据之前重新连接,那么您需要设置一个超时,以便在一段时间后释放这些资源。然后,在连接监听器中,或者可能在身份验证事件中,您需要分析新连接以查看它是否与最近断开连接的客户端匹配。

我绝对建议查看 socket.io ,特别是如果您的用例是基于 Web 的,尽管它不仅仅可用于浏览器/服务器连接。它会或多或少地自动完成许多您似乎关心的事情(重新连接、资源关联、断开宽限期等)。

关于node.js - Nodejs如何维持多个并发连接?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16915543/

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