我想用长连接的HTTP请求(Comet)、ajax和Websockets(根据使用的浏览器)编写一个HTTP WebChat。用户数据库在mysql中。聊天程序用PHP编写,除了聊天流本身可能还可以用JavaScript(node.js)编写:
我不想为每个用户启动一个PHP进程,因为没有很好的方法在这些PHP子进程之间发送聊天信息。 因此,我考虑在PHP或node.js中编写自己的socket服务器,应该能够处理超过1000个连接(聊天用户)。作为纯Web开发人员(PHP),我对sockets不是很熟悉,因为我通常让Web服务器处理连接。聊天消息将不会保存在磁盘或mysql中,而是保存在RAM中的数组或对象中,以获得最佳速度。
据我所知,在单个php进程(socket服务器)中无法同时处理多个连接,但是您可以接受大量的socket连接,并在循环中逐个地处理它们(读和写;接收到的消息->写入所有socket连接)。问题是与约1000名用户有一个延迟,而mysql操作可能会减缓整个事情,从而影响所有用户。
我的问题是:Node.js是否能够处理更好性能的socket服务器?Node.js是基于事件的,但我不确定它是否能够同时处理多个事件(这不需要多线程吗?)或者是否只有一个事件队列。如果有一个事件队列,那就跟PHP一样:逐个地处理用户。
我也可以为每个聊天室生成一个PHP进程(用户较少),但据我所知,存在单线程IRC服务器,它们也能够处理成千上万的用户(用C++或其他语言编写),因此可能在PHP中也是可能的。
我更喜欢PHP而不是Node.js,因为这样项目就仅限于PHP而不是混合编程语言。但是,如果Node可以同时处理连接,我可能会选择它。