实时无服务器聊天应用程序的最佳协议\技术
Posted
技术标签:
【中文标题】实时无服务器聊天应用程序的最佳协议\\技术【英文标题】:Best protocol\technology for real-time server-less chat application实时无服务器聊天应用程序的最佳协议\技术 【发布时间】:2009-09-27 10:41:40 【问题描述】:我需要将聊天功能嵌入到 .NET 应用程序(Windows 客户端应用程序)中。
要求:
最好是无服务器/零配置架构 (p2p),但不是必需的 基于开放标准(类似 XMPP) .NET 的实现(库)(本机 C/C++ 也可以)存在你有什么推荐的?目前我正在研究 XMPP/Jabber,您有在自己的应用中使用它的经验吗?
【问题讨论】:
jabber 不是无服务器的 无服务器架构的问题在于它不通过 2 个防火墙(每个客户端都在防火墙后面),客户端无法找到彼此(没有共同的“大厅”或服务器可以见面) @reinier,参见 XEP-0174:无服务器消息传递 【参考方案1】:呃,如果你真的想为聊天应用程序做无服务器架构,你需要仔细评估你想要提供什么样的功能。 比如,你只想要一对一聊天,群聊,状态通知,用户认证怎么样? 有很多方法可以解决这个问题,但我个人总是倾向于基于服务器的解决方案。
无论如何,最基本的解决方案是使用 UDP 多播,每个客户端都是发送者和接收者。 UDP 不可靠,因此您的发送者应该缓存消息,并且您的应用程序级协议应该能够检测间隙,能够请求间隙填充数据并将传入数据按顺序排列。在那种情况下,基本上每个人都会看到每个人的消息(这可以在应用程序级协议上过滤)。
下一个最佳解决方案是每个客户端发送多播信标(通知),如果客户端有兴趣与某个发件人发起对话,它会查看信标,其中应该包含有关发件人的信息,包括 IP 地址和港口。然后,感兴趣的一方将与信标发送方建立 TCP 连接,这两方现在可以开始直接相互聊天,保证和有序的消息传递。
我现在可以继续使用更高级的消息传递架构/协议,但我认为这没有意义。
如果我有您的要求,我会得到类似 http://www.coversant.net/Product/SoapBoxServer.aspx 的东西(他们有免费的快速版本,一切都内置在 .NET 中,提供 .NET API 等)或获得任何其他 XMPP 服务器(这里有几个: http://xmpp.org/software/servers.shtml) 使用 .NET API,例如 http://code.google.com/p/jabber-net/
【讨论】:
@Tom,感谢您的反馈。我知道这些事情是如何运作的。我只是想从具有上述协议\技术经验的人那里获得反馈。我的第一目标是简单——理想情况下客户不应该做任何设置。第二个目标是可靠性,如果服务器出现故障,我希望我的客户继续交谈。 XMPP 似乎是最好的选择。我现在正在评估现有的 XMPP 实现。【参考方案2】:我不确定无服务器,因为我托管了 OpenFire jabber 服务器,但这个 Jabber.NET 库对我来说效果很好。
【讨论】:
以上是关于实时无服务器聊天应用程序的最佳协议\技术的主要内容,如果未能解决你的问题,请参考以下文章