php - 了解之间的连接: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
然后将新图像和/或链接粘贴到此线程上)。
图一:
问题 1:请让我知道上面的图表是否正确,或者我是否混淆/遗漏了相关内容?该图基于GitHub
本文开头引用的项目。
图2:
问题2:如果我们摆脱了Redis
怎么办?Node.js
可以创建套接字、广播消息等,您可以在以下文档中看到:
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
上面的示例项目中没有使用那个插件?
解决方案
问题 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 的函数是非阻塞的(命令并发甚至并行执行,并使用回调来执行信号完成或失败)。
免责声明:我不是这个领域的专家。我的回答是基于一些谷歌搜索的经验。
推荐阅读
- python - 如何扩大限制以包括 48 小时内的最长工作时间?
- python - 为什么我不能在函数内创建类对象?
- powershell - 将文件共享路径作为参数读取时出错
- javascript - 无法读取未定义的属性,并且此指向不在正确的位置
- python-3.x - 具有色阶和一种颜色的不需要值的颜色图
- python - 在 python 中实现 REP-tree 和 M5P-tree 算法
- ruby - Can't install gems using asdf
- python - Response payload is not completed using asyncio/aiohttp
- c - Why is it sometimes valid to write an include statement in a codeblock?
- ruby-on-rails - Rails Association Has_One Having Pluralisation Model Name Instead of Singular and not working