首页 > 解决方案 > 了解之间的连接:PHP + Redis + Node.js + Sockets

问题描述

我只是想澄清(在您的帮助下)以下之间的联系:PHP + Redis + Node.js + Sockets.

为此,我以以下项目为基础示例:

https://github.com/biswassampad/Realtime-Chat-With-Laravel5.6-and-Socket.io

这个例子是一个非常基本的聊天应用程序。

这里有一个演示视频:https ://www.youtube.com/watch?v=AMgYpjFXnWo

我把它下载到本地并且运行良好。

我注意到它使用了:PHP+ Redis+ Node.js+ Sockets

我想分析我创建并粘贴在下面的不同图表,您可以在以下 url 上找到这些图表(如果您愿意,可以编辑它们并通过以下方式导出工作表链接:https://shorturl.at然后将新图像和/或链接粘贴到此线程上)。

https://shorturl.at/ntyLV

图一:

在此处输入图像描述

问题 1:请让我知道上面的图表是否正确,或者我是否混淆/遗漏了相关内容?该图基于GitHub本文开头引用的项目。

图2:

在此处输入图像描述

问题2:如果我们摆脱了Redis怎么办?Node.js可以创建套接字、广播消息等,您可以在以下文档中看到:

https://socket.io/docs/

key feature是什么Redis让每个人都推荐它用于此类项目。

图3:

在此处输入图像描述

问题3:PHP/Apache为什么不能在服务器端做所有事情?不能以PHP与打开套接字相同的方式打开套接字Node.js吗?Node.js有什么魔力PHP没有?

[编辑 1]

问题4:

在以下教程中:

https://medium.com/@adnanxteam/how-to-use-laravel-with-socket-io-e7c7565cc19d

这也是关于PHP + Redis + Node.js + Sockets,他们使用:laravel-echo-server

为什么在GitHub上面的示例项目中没有使用那个插件?

标签: phpnode.jslaravelsocketsredis

解决方案


问题 1

我相信你的图表是对的,但我不知道一些小细节是不是错了。虽然对我来说,这就是全部的想法。

问题2

Redis 是用于存储消息的数据库。

我认为最好使用它,因为它速度快(因为数据在内存(RAM)中存储/查询)。虽然我认为您也可以使用其他数据库(MySQL 等)。

如果你删除Redis,你会在哪里存储数据(例如,要广播的消息)?

问题 3

在当前上下文中,Node.js相当于Apache;不是PHP

现在,Apache 运行您的 PHP 代码(Laravel 项目),而 Node.js 运行您的 JavaScript 代码(Socket.IO)。

我认为您也可以实现 Socket.IO 的 PHP 变体;它将在单独的实例中运行。它可能并不流行,或者像其他所有问题一样,有更好的工具可以提供更好的解决方案。

正如谷歌搜索的那样,PHP 对于广播消息来说是一个糟糕的解决方案,因为它是阻塞的,这意味着它会先完成当前请求,然后再进行下一个请求。另一方面,Node.js 是非阻塞的。

来自维基百科:https ://en.wikipedia.org/wiki/Node.js

Node.js 和 PHP 最大的区别在于 PHP 中的大多数函数都是阻塞直到完成(命令只有在前面的命令完成后才执行),而 Node.js 的函数是非阻塞的(命令并发甚至并行执行,并使用回调来执行信号完成或失败)。


免责声明:我不是这个领域的专家。我的回答是基于一些谷歌搜索的经验。


推荐阅读