编写聊天应用程序

时间:2010-09-10 04:06:41

标签: php javascript jquery node.js comet

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

我很困惑,我怎么能每秒使用AJAX ping服务器,或者更少,并检查MySQL中是否有新的记录等服务器负载可接受的数量。< /强>

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

请指教。非常感谢您的帮助。

5 个答案:

答案 0 :(得分:9)

客户端

对于需要轮询服务器的任何程序,我建议WebSockets

我写了extremely basic WebSocket tutorial。我还使用了web-socket-js代码来实现一个FlashSocket,它可以在Firefox,IE 8+和Chrome以及支持WebSockets的任何浏览器上运行。

我不认为民意调查对于聊天应用程序来说是个不错的选择。虽然它可以工作,但是请求开销会比使用WebSocket高得多。权衡(好处)是更多的浏览器支持它。

此外,点击MySQL数据库以查看是否有消息将导致大量的数据库开销。我建议使用MySQL数据库进行聊天记录,并且只保留有限数量的“后退”消息,以便进行新的连接。然后只需向所有连接的客户端广播新消息。然后,前端应用程序将接收消息并将其附加到聊天窗口。

服务器端

Node.js是一个公平的服务器端JavaScript框架。虽然它还很年轻,但已经编写了几个非常有趣的应用程序。 Node.js人员设置了chat program(不是WebSockets)的源has been made available。如果不想从头开始编写,这将是一个非常好的起点。

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

答案 1 :(得分:2)

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

Polling aka Periodic Refresh

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

您可以将间隔调整为服务器和用户都可接受的间隔。您还可以使用Heartbeat来判断用户是否仍处于活动状态,因此如果用户将窗口保持打开但计算机已关闭,则可以停止轮询服务器。

HTTP Streaming aka "Comet"

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

答案 2 :(得分:0)

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

答案 3 :(得分:0)

你也可以尝试IcePush - 它是一个ajax框架,用于将消息从服​​务器推送到javascript客户端。这对于聊天客户来说是完美的匹配!

答案 4 :(得分:0)

如果您是Java开发人员,可以使用jwebsocket来实现服务器。在他们的网站上有各种各样的例子,因为我也经历了其中一些例子。

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