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