写一个聊天应用程序

我想知道为数千用户编写聊天应用程序的正确方法是什么。

我只是困惑如何能够平均每秒使用AJAX的服务器或更less,并检查是否有新的logging在MySQL等可接受的服务器负载量。

我目前正在考虑使用jQuery,PHP和MySQL进行编码。

请指教。 你的帮助将不胜感激。

客户端

对于任何需要轮询服务器的程序,我都会推荐WebSockets 。

我写了一个非常基本的WebSocket教程 。 我还使用了web-socket-js代码来实现一个FlashSocket,它可以在Firefox,IE 8+和Chrome以及任何支持WebSocket的浏览器上工作。

我不相信轮询将是一个聊天应用程序的好select。 虽然它会起作用,但是使用WebSocket的请求开销要高得多。 权衡(好处)是更多的浏览器支持它。

另外,打一个MySQL数据库来查看是否有消息会导致大量的数据库开销。 我build议使用MySQL数据库作为聊天logging,并且只保留有限数量的“返回”消息以备新的连接。 然后简单地向所有连接的客户端广播新消息。 然后,前端应用程序将接收消息并将其附加到聊天窗口。

服务器端

Node.js是一个服务器端JavaScript框架。 虽然还很年轻,但是一些非常有趣的应用程序已经被编码。 Node.js人员build立了一个聊天程序 (而不是WebSockets),这个聊天程序的源头已经可用了 。 如果不想从头开始编写这将是一个非常好的开始。

有一个PHP的WebSocket实现。 根据您的要求,它可以使用得很好。 在Node.js和PHP中编码我会说我认为Node.js更适合这个。

在服务器端,您需要一个脚本,可以根据时间戳(例如:上次请求)来判断是否有新内容(例如:消息)。 在客户端,你有两个select:

轮询又名定期刷新 :

这基本上意味着让你的客户端轮询服务器来检查是否有新的数据。 你想要的是尽可能保持你的要求和回应。 如果在单独的进程中运行处理这些请求的脚本,它也可能有所帮助。

将由您来调整时间间隔为服务器和用户都可以接受的时间间隔。 您还可以使用心跳来判断用户是否仍处于活动状态,因此,如果用户打开窗口而不在计算机上,则可以停止轮询服务器。

HTTP Streaming aka“Comet” :

使用这将需要更多的设置; 但这基本上是从客户端到服务器的长久连接,服务器可以在必要时将内容“推送”到客户端。

下面是一个简单的websockets例子: http ://www.dashdashverbose.com/2010/02/nodejs-websockets-stoopid-easy-comet.html我假设你的最大用户数量将主要取决于你的连接和服务器软件。

你也可以试用IcePush – 这是一个将消息从服​​务器推送到 javascript客户端的ajax框架。 这将是一个chatclient完美匹配!

如果你是一个Java开发者,你可以使用jwebsocket来实现服务器。 在他们的网站上有不同的例子开始,因为我也经历了其中的一些。

简单地从他们的网站
jWebSocket提供给您在网上创build创新的基于HTML5的stream媒体和通信应用程序。 HTML5 WebSockets将通过一种新的灵活的超高速双向TCP套接字通信技术取代现有的XHR方法以及Comet服务。 jWebSocket是HTML5 WebSocket协议的一个开放源代码的Java和JavaScript实现,具有大量的扩展。