【发布时间】:2011-04-10 13:53:38
【问题描述】:
我想知道为成千上万的用户编写聊天应用程序的正确方法是什么。
我只是很困惑我如何能够每秒或更少地使用 AJAX ping 服务器,并检查 MySQL 中是否有新记录等,并且服务器负载量可接受。
我目前正在考虑使用 jQuery、PHP 和 MySQL 进行编码。
请指教。非常感谢您的帮助。
【问题讨论】:
标签: php javascript jquery node.js comet
我想知道为成千上万的用户编写聊天应用程序的正确方法是什么。
我只是很困惑我如何能够每秒或更少地使用 AJAX ping 服务器,并检查 MySQL 中是否有新记录等,并且服务器负载量可接受。
我目前正在考虑使用 jQuery、PHP 和 MySQL 进行编码。
请指教。非常感谢您的帮助。
【问题讨论】:
标签: php javascript jquery node.js comet
如果你是java开发者,可以使用jwebsocket实现服务端。在他们的网站上有各种示例,因为我也正在浏览其中的一些示例。
从他们的网站简要介绍
jWebSocket 提供给您在网络上创建基于 HTML5 的创新流和通信应用程序。 HTML5 WebSockets 将通过一种新的灵活和超高速双向 TCP 套接字通信技术取代现有的 XHR 方法以及 Comet 服务。 jWebSocket 是 HTML5 WebSocket 协议的开源 Java 和 JavaScript 实现,具有大量扩展。
【讨论】:
对于任何需要轮询服务器的程序,我推荐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 更适合这个。
【讨论】:
您也可以尝试IcePush - 它是一个 ajax 框架,用于将消息从服务器推送到 javascript 客户端。这将是聊天客户端的完美搭配!
【讨论】:
在服务器端,您需要一个脚本,该脚本可以根据时间戳(例如:最后一个请求)判断是否有新内容(例如:消息)。在客户端,您有两种选择:
这基本上意味着让您的客户端定期轮询服务器以检查是否有新数据。你想要的是让你的请求和响应尽可能轻松。如果在单独的进程中运行处理这些请求的脚本也会有所帮助。
您可以将间隔调整为服务器和用户都可以接受的间隔。您还可以使用Heartbeat 来判断用户是否仍处于活动状态,因此如果用户保持窗口打开但不在计算机上,您可以停止轮询服务器。
使用它需要更多设置;但这基本上是从客户端到服务器的长期连接,并且服务器可以在必要时将内容“推送”到客户端。
【讨论】:
这是一个简单的 websockets 示例:http://www.dashdashverbose.com/2010/02/nodejs-websockets-stoopid-easy-comet.html 我假设您的最大用户数量主要取决于您的连接和服务器软件。
【讨论】: