我想实现与多个房间的PHP聊天,但我不希望每个浏览器轮询服务器,而是我更喜欢服务器将更新发送给每个房间的所有用户。理想情况下,我只为每个房间运行一个PHP实例(当然还有用户发送的用于更新数据库的AJAX请求,我知道服务器端事件不受广泛支持):
所以基本上如果有N个用户和K个房间我想减少开销
N database/php poll requests every while
到
K database/php poll requests every while
答案 0 :(得分:2)
您可以更好地使用Web套接字来实现此目的。如果你想使用php,那么有很少的库:
1)Ratchet
2)ReactPHP
3)d-Node
和其他人。我使用了Ratchet和React。他们工作得很好,就像我一样
答案 1 :(得分:1)
是的,但它需要编写自己的Web服务器:即PHP中的套接字服务器,用于接收来自客户端的http请求。然后,您只需为每个聊天室保留一个套接字阵列,当您收到要向所有侦听器广播的消息时,您可以创建并向每个客户端发送SSE消息,例如:
data: {room:12,msg:"Hello World"}\n\n
(我认为通过将套接字注册到多个数组中,您甚至可以使用单个SSE连接来侦听来自多个聊天室的消息。因此,您甚至可以使用单个PHP进程运行所有聊天室。)
但是,如果使用Apache + PHP,那么你想要的就是不可能。每个SSE连接都将获得专用的PHP进程。 (如果这是您唯一的选择和轮询数据库非常昂贵,您可以让一个进程轮询数据库,然后将消息推送到内存中的本地主机数据库,并让每个PHP进程轮询内存数据库。)