今天我构建了一个基于 UDP 的聊天软件,它使用 UDP 侦听器和服务器来形成聊天应用程序。
当我把它交给我的朋友进行测试时,他必须进行端口转发,以便我的消息可以通过路由器到达他,我也是。
我很好奇,像 msn messenger 和 skype 这样的 IM 客户端是如何工作的。比如他们如何接收消息而无需转发?
谢谢, 维杜
MSN 等客户端连接到第三方远程服务器,该服务器在技术上也具有端口转发/路由功能,但它通过静态 IP 地址向公众公开。你下载一个像 MSN 这样的客户端应用程序,它连接到远程服务器,但客户端本身并不充当服务器,因此不需要端口转发。它很可能会消耗消息并阻塞,直到有更多消息进来,因此服务器不需要通过 IP 地址访问它来向它发送消息。
在您的情况下,由于您在专用网络上托管远程服务器,因此您需要将流量路由到该 IP 地址到连接到它的适当内部设备,就像您在您的一个服务器上托管其他任何东西(如网站)一样电脑。
由于您的朋友还必须进行端口转发以使应用程序正常工作,因此他们的客户端似乎也充当服务器并且不与您的服务器保持连接/套接字。如果客户端要与服务器保持一个套接字,则只有您需要进行端口转发,而您的朋友则不需要,因为他们的客户端只会侦听请求并阻塞,直到它们进来,然后将请求发送到您的服务器。
您可能想研究像 RabbitMQ 这样的真实消息总线,您可以托管此消息总线,然后构建您的客户端以订阅它并发送/接收消息。另一种选择是 Redis,您可以使用 POP 功能删除客户端从队列中检索到的“已读”消息。