gpt4 book ai didi

php - 为什么使用redis进行websocket通信?

转载 作者:太空宇宙 更新时间:2023-11-03 22:41:35 24 4
gpt4 key购买 nike

请帮我解决一些困惑。

Laravel 允许通过设置 redis 与 socket.io 进行通信:

https://laravel.com/docs/5.4/broadcasting#configuration

据我了解,Redis 只是将数据保存在内存中,类似于 memcached?这允许第三方软件(例如socket.io)获取数据。这真的是 websocket 行为吗?

我知道你也可以在 PHP 中做这样的事情:

$address = 'localhost';
$port = 5600;
$socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
socket_connect($socket, $address, $port);

为什么他们不选择上述方法而不是让您设置 Redis?对此可能有一个很好的答案,但我对 Redis 或 websockets 没有太多经验。

任何有关这方面的信息将不胜感激。

最佳答案

您需要考虑连接的持久性。 Laravel 中的请求仅在获得响应时有效。一旦响应被发送回来,应用程序就会关闭,直到新的请求到达index.php并且Laravel再次启动。

所以事实上,你无法通过这种方式建立持久连接。例如,Socket.io 将允许您连接到服务并保持连接。这是 Rest 和 Websocket 方法之间的主要区别。在 Rest 界面中,客户端不断轮询服务器...因此,如果您有 1000 个客户端,那么您就有 1000 个讨厌的小客户端每隔 30 秒询问您是否有任何新内容...充其量是烦人。但每次他们询问时,Laravel 都会经历整个启动/关闭过程......没有什么是持久的。

现在,当通过 Node 服务使用 Socket.io 时,每个客户端都将连接并与 Node 实例建立持久连接(这是单个持久线程...更适合于此)...将此连接与1000 个客户端,客户端只需监听套接字以获取新内容...

当 Laravel 请求创建 1000 个客户端感兴趣的事件时,它只是将信息推送到 Redis 队列... Node 实例从 Redis 队列中读取数据,并可以按照其维护的方式广播到 1000 个连接的客户端连接...

它很好地利用了 PHP 和 Node 技术,因为它突出了两者的优势......

希望这有帮助...

关于php - 为什么使用redis进行websocket通信?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42333325/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com