【发布时间】:2011-06-02 04:07:36
【问题描述】:
我想使用长期持有的 HTTP 请求 (Comet)、ajax 和 websockets(取决于所使用的浏览器)来编写一个 HTTP WebChat。用户数据库在 mysql 中。聊天是用 PHP 编写的,除了聊天流本身也可以用 javascript (node.js) 编写:
我不想为每个用户启动一个 php 进程,因为没有好的方法可以在这些 php 子项之间发送聊天消息。 所以我考虑用 PHP 或 node.js 编写一个自己的套接字服务器,它应该能够处理超过 1000 个连接(聊天用户)。作为一个纯粹的 Web 开发人员 (php),我对套接字不太熟悉,因为我通常让 Web 服务器关心连接。聊天消息不会保存在磁盘或 mysql 中,而是作为数组或对象保存在 RAM 中以获得最佳速度。
据我所知,没有办法在单个 php 进程(套接字服务器)中同时处理多个连接,但是您可以接受大量套接字连接并在循环中连续处理它们(读取和写入;传入消息 -> 写入所有套接字连接)。问题在于,大约 1000 个用户很可能会出现延迟,并且 mysql 操作可能会减慢整个过程,进而影响所有用户。
我的问题是:node.js 可以处理性能更好的套接字服务器吗? Node.js 是基于事件的,但我不确定它是否可以同时处理多个事件(那不需要多线程吗?)或者是否只有一个事件队列。使用事件队列就像 php: process user after user。
我还可以为每个聊天室生成一个 php 进程(用户少得多),但是 afaik 有单线程 IRC 服务器也能够处理数千个用户。 (用 c++ 或其他编写)所以也许它也可以在 php 中。
我更喜欢 PHP 而不是 Node.js,因为这样该项目将是 php-only,而不是编程语言的混合。但是,如果 Node 可以同时处理连接,我可能会选择它。
【问题讨论】: