更多浏览器能否从同一个 PHP 脚本实例接收服务器事件?
Can more browsers receive server events from the same PHP script's instance?
我想实现 PHP 与多个房间的聊天,但是我不希望每个浏览器都轮询服务器,而是 我希望服务器将更新发送给每个房间中的所有用户房间。理想情况下,我会为每个房间只有一个 PHP 实例 运行(当然加上用户发送的 AJAX 更新数据库的请求,我知道服务器端事件没有得到广泛支持):
- 用户 POST 条消息使用 POST AJAX 请求
- 当 Room 的 PHP 脚本读取数据库并找到一条新消息时,它会将更新发送给连接到该房间的所有用户,这样它会更快地响应并且会减少数据库通信压力
所以基本上如果有 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 进程轮询内存数据库。)
我想实现 PHP 与多个房间的聊天,但是我不希望每个浏览器都轮询服务器,而是 我希望服务器将更新发送给每个房间中的所有用户房间。理想情况下,我会为每个房间只有一个 PHP 实例 运行(当然加上用户发送的 AJAX 更新数据库的请求,我知道服务器端事件没有得到广泛支持):
- 用户 POST 条消息使用 POST AJAX 请求
- 当 Room 的 PHP 脚本读取数据库并找到一条新消息时,它会将更新发送给连接到该房间的所有用户,这样它会更快地响应并且会减少数据库通信压力
所以基本上如果有 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 进程轮询内存数据库。)