【问题标题】:Writing a chat application [closed]编写聊天应用程序[关闭]
【发布时间】:2011-04-10 13:53:38
【问题描述】:

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

我只是很困惑我如何能够每秒或更少地使用 AJAX ping 服务器,并检查 MySQL 中是否有新记录等,并且服务器负载量可接受。

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

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

【问题讨论】:

    标签: php javascript jquery node.js comet


    【解决方案1】:

    如果你是java开发者,可以使用jwebsocket实现服务端。在他们的网站上有各种示例,因为我也正在浏览其中的一些示例。

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

    【讨论】:

      【解决方案2】:

      客户端

      对于任何需要轮询服务器的程序,我推荐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 更适合这个。

      【讨论】:

      • 究竟什么是 WebSockets?最后,我必须将查询发送到 MySQL……我弄错了吗?
      • @Isamtron:WebSockets 是一种双向连接,可用于发送和接收数据。它是从客户端到服务器的低级套接字连接。我不会打 MySQL。
      • 嗨乔希,我还有一个问题。你是说 Node.js 在服务器上比 socket 更轻量级?
      • @Isamtron:我不确定你的意思,它比 Apache 轻,但 WebSockets 是实际的套接字。
      • socket.io 可能是检查推送功能的不错选择。
      【解决方案3】:

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

      【讨论】:

        【解决方案4】:

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

        Polling aka Periodic Refresh:

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

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

        HTTP Streaming aka "Comet"

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

        【讨论】:

          【解决方案5】:

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

          【讨论】:

          • 为什么投反对票?有什么?该示例基于 javascript,不需要服务器端(据我所知)并且已经过 10,000 多个连接的测试?粗鲁
          • 不需要服务器端代码是什么意思?它在哪里经过 10k 用户的测试?
          • 这篇博文基于来自amix.dk/blog/post/19490#Plurk-Instant-conversations-using-comet的代码/帖子
          • 那篇文章谈到了从 java/jetty 到 Node.js 的转换,并且还没有支持多达 100,000 个连接(我之前评论过没有 10k)
          • 最后链接到socket.io,所以这可能是要调查的事情。
          猜你喜欢
          • 1970-01-01
          • 2011-04-21
          • 2021-10-30
          • 2010-11-25
          • 2016-07-04
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2015-10-23
          相关资源
          最近更新 更多