更多浏览器能否从同一个 PHP 脚本实例接收服务器事件?

Can more browsers receive server events from the same PHP script's instance?

我想实现 PHP 与多个房间的聊天,但是我不希望每个浏览器都轮询服务器,而是 我希望服务器将更新发送给每个房间中的所有用户房间。理想情况下,我会为每个房间只有一个 PHP 实例 运行(当然加上用户发送的 AJAX 更新数据库的请求,我知道服务器端事件没有得到广泛支持):

所以基本上如果有 N 个用户和 K 个房间,我想减少

的开销
N database/php poll requests every while

K database/php poll requests every while

您最好为此目的使用网络套接字。如果你想使用 php,有几个库:

1) Ratchet

2) ReactPHP

3) d-Node

和其他人。我使用了 Ratchet 和 React。他们工作得很好,对我来说

是的,但需要编写您自己的 Web 服务器:即 PHP 中的套接字服务器以接收来自客户端的 http 请求。然后,您只需为每个聊天室保留一个套接字数组,当您收到要广播给所有听众的消息时,您可以创建 SSE 消息并将其发送给每个客户端,例如:

data: {room:12,msg:"Hello World"}\n\n

(我认为 通过将套接字注册到多个数组中,您甚至可以使用单个 SSE 连接来收听来自多个聊天室的消息。因此,您甚至可以拥有一个单个 PHP 进程 运行 所有聊天室。)

但是,如果使用 Apache+PHP,那么您想要的是不可能的。每个 SSE 连接都将获得一个专用的 PHP 进程。 (如果这是你唯一的选择 并且 轮询数据库真的很昂贵,你可以让一个进程轮询数据库,然后将消息推送到内存中的本地主机数据库,并让每个 PHP 进程轮询内存数据库。)