【问题标题】:Understanding connection between: PHP + Redis + Node.js + Sockets了解之间的连接:PHP + Redis + Node.js + Sockets
【发布时间】:2019-04-04 05:12:27
【问题描述】:

我只想澄清(在您的帮助下):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

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

https://shorturl.at/ntyLV

图表 1:

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

图表 2:

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

https://socket.io/docs/

Redis 中的key feature 是什么让大家为这类项目推荐它。

图 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 示例项目上没有使用那个插件?

【问题讨论】:

    标签: php node.js laravel sockets redis


    【解决方案1】:

    问题 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 函数是非阻塞的(命令并发甚至并行执行,并且使用回调来表示完成或失败)。


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

    【讨论】:

    • 关于question 2:在GitHub 示例项目中,消息存储在MySQLRedis 上。为什么要同时保存它们而不是只保存在一个地方?
    • 另外,你能看看我在原帖中添加的Question 4 吗?谢谢!
    猜你喜欢
    • 2014-03-25
    • 1970-01-01
    • 2012-10-23
    • 2018-10-26
    • 2020-08-23
    • 2020-08-07
    • 1970-01-01
    • 2012-06-26
    • 1970-01-01
    相关资源
    最近更新 更多