【发布时间】:2011-12-15 19:15:59
【问题描述】:
我必须开发一个多用户聊天应用程序(如 msn)。我不使用任何框架来构建它,因为我想了解这些东西是如何工作的。
我正在用 Delphi 或 C# 开发它,但这并不重要。重要的是聊天客户端将成为应用程序,而不是浏览器。
问题是:处理客户端之间消息的最佳方式是什么?
到目前为止,我知道这些技巧:
推杆
轮询
长轮询
Link 维基百科
【问题讨论】:
我必须开发一个多用户聊天应用程序(如 msn)。我不使用任何框架来构建它,因为我想了解这些东西是如何工作的。
我正在用 Delphi 或 C# 开发它,但这并不重要。重要的是聊天客户端将成为应用程序,而不是浏览器。
问题是:处理客户端之间消息的最佳方式是什么?
到目前为止,我知道这些技巧:
推杆
轮询
长轮询
Link 维基百科
【问题讨论】:
看起来所有这些都对 HTTP 特别有用,因为 HTTP 并不允许永久打开连接。如果您正在编写一个使用 Ajax(或任何 REST 调用)的基于 Web 的聊天客户端,这就是您要走的路。
如果您自己编写聊天应用程序(P2P 或客户端/服务器),您可以创建一个永久保持打开状态的连接。
所以,服务器只监听给定的端口。客户端尝试连接到服务器 IP 地址上的该端口。如果连接成功,它将保持打开状态,直到客户端用户关闭程序(如果一切顺利)。
Delphi 确实有一个使用 Indy TCP 组件的聊天应用程序演示。你可以在那里偷偷摸摸,即使你以后要自己建造它。
【讨论】:
您是否需要支持(数万个)同时连接?如果是的话,我建议看看
用于应用服务器和 Servlet 3.0 等标准,以最大限度地减少工作线程的数量并加快网络操作
有一个用于 Delphi 的 IOCP 库 - 请参阅 Is there a I/O completion port based component for Delphi?
HTTP 也可以用作内部协议,新的 Microsoft http.sys 库提供了一个很好的基础,并且包含在新版本的 Windows 中。
为了给人留下一个印象,消息服务器的效率如何:在相对适中的硬件上,开源 ActiveMQ Apollo 服务器每秒可以处理 120 万条消息。 (它是用Java编写的)
【讨论】: