【问题标题】:How to scale my chat application?如何扩展我的聊天应用程序?
【发布时间】:2012-04-19 21:48:51
【问题描述】:

我有一个用 php/mysql 实现的网站,并托管在 hostmonster(共享主机)。

我计划在我的网站中加入聊天功能,使用户能够相互聊天。大约有。我的网站上有 1000 个用户。 目前,我已经实现了一个 ajax 策略,它会定期(比如每 4 秒)向服务器发送请求,以获取有关在线用户和消息的 json 响应。

这是发送请求的示例代码:

var timer, delay = 4000;

timer = setInterval(function(){
    $.ajax({
      type: 'POST',
      url: 'update.php?user_id=2',
      success: function(html){
        $('.chat_messages').append(html);
      }
    });
}, delay);

但正如我所见,用户数量越多,每 4 秒发出的请求越多,Apache 服务器和数据库在传递响应方面的负担也越大。

所以我正在计划一个替代解决方案,它在服务器上没有开销。 我听说很少有服务器像 APE、Nginx、Node.js、StreamHub 使用 COMET/reverse ajax 技术来处理请求,并且对我的目的很有效。

但问题是,我没有权限在我的 hostmonster cpanel 上安装第三方服务器。 有没有其他方法,比如 HTML5 web sockets?

编辑:顺便说一句,如果有可行的解决方案,我也有兴趣在 Java 上重建我的应用程序。

【问题讨论】:

  • 你能在你的主机上运行 PHP 守护进程吗?
  • 是的,我希望 PHP 守护进程可以在我的主机上创建和运行。
  • 那是哪条路呢?您可以或不能:) 我问的原因是因为这可能是您可用的解决方案(编写 PHP websocket 服务器)
  • 是的,我可以在我的主机上创建和运行 php 守护进程
  • 这里有一些类似的问题以及非常好的提示/指南:Scaling a chat app - Writing a chat application - Ajax Polling -

标签: php chat scalability


【解决方案1】:

正如您所发现的那样,每 4 秒为每个用户请求新内容将无法扩展。而且它甚至不适用于聊天应用程序,因为消息之间的延迟太长,导致您的聊天无法使用。

如果我是您,我会首先研究不需要您进行任何(或很少)编程的插入式聊天解决方案。您通常只需在页面中插入一些 JavaScript 代码,提供聊天的第三方会完成所有其余的工作(提供文件、运行聊天服务器等...)。我没有使用任何可用的解决方案,所以我不能推荐任何解决方案,但是快速的谷歌搜索得到了这个:https://www.meebo.com/websites/ 这应该让你大致了解我在说什么。

如果上述内容不适合您,那么您将面临一个相当大的项目。你需要做的是编写一个 websocket 服务器(然后是你的聊天应用程序)。如果我想向你解释如何做到这一点,我可以写一本关于它的书,所以我只会这样说:谷歌是你的朋友。你不是第一个需要这个的人。所以在 stackoverflow 中搜索提示,那里也有开源 PHP websocket 服务器 (this being one)。

祝你好运。

【讨论】:

  • 我会考虑您指出的第二种选择。但它与 php 守护进程有什么关系?
  • 一个 websocket 服务器作为 PHP 守护进程运行。
  • 一个小更新:我的主机允许创建守护进程/守护进程。但默认超时为 10 分钟。这似乎给我造成了障碍,因为请求必须处理更多时间。
  • 您仍然可以编写一个可以解决该问题的守护程序,但我建议您更换您的托管公司。
  • 更新:最后我决定使用 node.js 和 socket.io 来实现我的应用程序。我打算将它们安装在具有公共 IP 地址的专用 linux 系统上。然后我可以使用这个系统来放置我的聊天应用程序并在我的项目中的 iframe 中运行它。
猜你喜欢
  • 2019-05-02
  • 2019-09-22
  • 1970-01-01
  • 2021-06-30
  • 1970-01-01
  • 2011-07-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多