如何实现 Laravel、node.js、socket.io 和 redis 以使用数据库创建实时聊天/通知

Posted

技术标签:

【中文标题】如何实现 Laravel、node.js、socket.io 和 redis 以使用数据库创建实时聊天/通知【英文标题】:How to implement Laravel, node.js, socket.io and redis for creating realtime chat/notifications with database 【发布时间】:2018-08-02 05:54:42 【问题描述】:

我已经花了 3 天的时间阅读、观看有关 WebSockets、socket.io、node.js 等的教程。 基本上,我是一名 Laravel 开发人员,对所有其他组件只有一个基本概念。 遗憾的是,在这 3 天之后,我并没有记住实现此架构的所有逻辑步骤。我将尝试解释我的理解,请纠正我。

所以: WebSockets - 是客户端和服务器之间的双向连续连接。它使用另一个端口,基本上它不是 HTTP/S 连接。 为了像我说的那样制作这种应用程序,我们需要多一台服务器,我知道为什么,但这是Node.js。在这个Node.js 服务器上,我们应该安装socket.io(服务器端包)和Redis。 然后,我们需要添加客户端socket.io(可能通过CDN)。 在Node.js 服务器上,我们正在创建一个server.js 文件,其中需要我们需要的所有模块,例如socket.ioRedis。我们为特定的未使用端口(如 6001)打开一个连接。然后我们运行这个节点服务器。 在前端,我们subscribe-ing 到这个频道,并为服务器定义emittinglistening 的方法。

示例: User1 正在连接到特定路由。用户 2 也是如此。 User1 为 User2 键入一条消息,当按下 Submit 时,来自 User1 的消息被发送到 Node.js 服务器,它在 Redis 发送(是?如果是 - 为什么?),然后 Node.js 正在监听什么在这种情况下执行此操作,并将此消息发送给特定用户,或向除发布者之外的所有用户广播。

哦,这甚至很难解释,使用了太多的步骤和技术。 请有人纠正我的逻辑吗?我真的很想了解使用这些组件的所有过程和逻辑。或者请给我一些有用的文章和视频,可能我没看到。谢谢!

【问题讨论】:

稍微宽​​泛地猜一下你的问题... 【参考方案1】:

我建议您阅读official docs,了解如何构建chat。基本上你最终将拥有 2 台服务器,1 台用于 Laravel app,另一台用于 chat (Socket.io)。这样做的关键是使用广播器并监听双方的事件,frontendbackend

事件通过“频道”广播,可以指定为公共或私人。您的应用程序的任何访问者都可以订阅公共频道而无需任何身份验证或授权;但是,要订阅私人频道,用户必须经过身份验证并获得授权才能在该频道上收听。

【讨论】:

哦,在 Laravel 5.6 中已经存在 Redis 和 socket.io 的文档。谢谢,希望以后能有更好的理解。 我读了所有的东西,一些新的理论知识,但无论如何我都不想开始开发一些东西。至少我需要一张图表,其中包含所有使用的技术以及它们如何结合使用。你知道任何很好的教程吗? 您不需要 NodeJS 服务器,您有 Laravel Echo Server (github.com/tlaverdure/laravel-echo-server) 集成支持 Laravel..对于技术,您将需要 LaravelSocket.IO、@ 987654334@ 就是这样 Laravel 5.6 文档相当混乱。我使用本教程来让它工作。许多不同的后端和前端技术需要协同工作,所以它的水平很高。 jplhomer.org/2017/01/…

以上是关于如何实现 Laravel、node.js、socket.io 和 redis 以使用数据库创建实时聊天/通知的主要内容,如果未能解决你的问题,请参考以下文章

node.js编写服务器

如何在 node.js 中同时使用多个代理(代理)

与 Node.js / Socket.io 服务器共享 Laravel 会话

相当于 Node.js 中的 laravel 风格的服务提供者(或 wp 风格的插件)

laravel项目拉取下来安装,node.js库安装

Lumen (Laravel) VS NODE.JS 解决方案