在 API 端使用 Ionic 和 laravel 进行实时聊天

Posted

技术标签:

【中文标题】在 API 端使用 Ionic 和 laravel 进行实时聊天【英文标题】:Real time chat using Ionic and laravel at API end 【发布时间】:2016-12-11 19:58:24 【问题描述】:

我正在开发一些将 laravel 用于 api 的离子应用程序。有一些实时聊天功能的需求。

我一直在尝试使用类似 socket.io 的东西。

所以问题是不改变堆栈,我怎样才能实现它。我当前的堆栈是 cordova , ionic 然后 laravel mysql 用于服务器端。

这可以通过当前堆栈实现吗?

提前感谢您的帮助。

干杯!

【问题讨论】:

Simple websocket implementation in laravel 5的可能重复 【参考方案1】:

是的,可以使用此堆栈完成 - 我自己完成了,我写了 a blog post 来说明如何做到这一点。 Laravel 文档也goes into some detail 关于这一点。我们的应用没有使用 Ionic,但其他情况基本相同。

大意如下:

消息照常通过 POST 请求提交到 REST API 提交消息后,控制器会触发NewMessage 事件 此事件设置为可广播,并使用 Redis 驱动程序(您可能更喜欢使用 Pusher,但我使用的是 Redis 和 Socket.io) 一个单独的 Node.js 脚本监听 NewMessage 事件,当它触发时,将消息发送给所有附加的客户端(或者如果聊天是私密的,则只发送适当的客户端) 在使用socket.io-client 接收消息时,会采取适当的操作,例如将消息插入到 DOM 中

您需要在堆栈中添加的唯一内容是 Node.js 和 Redis。我遇到的最大问题是配置 nginx,但这部分是因为我使用的是 SSL。

希望这是有道理的。如果您需要有关如何完成此操作的更多信息,请告诉我。

【讨论】:

有道理。但是当我在客户端使用 redis 时,我将不得不设置节点脚本来监听来自 redis 的广播事件。我将在哪里设置此节点服务器?通信就像 android(cordova) 到 server(laravel) 。我们需要双向通信 b/w 他们,这个节点脚本将驻留在哪里,节点服务器将被设置?希望你能得到我的好奇心带来的困惑。大声笑。 Node.js 脚本可以在同一台服务器上非常愉快地运行,它只需要监听不同的端口,Nginx 可以将 Node.js 脚本的代理请求反向到该端口。我的经验是,最好让 Laravel 处理通过 HTTP 接收消息,并在收到消息时广播它们——通过 Websockets 发送和接收消息而不将整个事情切换到 Node.js 是非常不切实际的,而这是一个完全可以接受的妥协。 基本流程是Laravel将事件推送到Redis,Node.js脚本拾取事件并通过Socket.io广播,应用通过Socket.io客户端拾取 这种方法确实意味着您通过与用于接收它们的方法不同的方法发送消息,这并不理想,但我发现它是最好的方法,同时仍然使用 Laravel。 是的,这是有道理的,无需改变流程,因此节点可以驻留在 laravel 所在的同一台服务器上,当我们为套接字指定节点服务器地址时,我们将编写类似 . domain.com:3000(或其他一些节点端口取决于)。

以上是关于在 API 端使用 Ionic 和 laravel 进行实时聊天的主要内容,如果未能解决你的问题,请参考以下文章

Ionic 2 / Angular 问题与 http post 到 laravel api

我可以在同一个数据库中使用 Laravel 和 Ionic 吗?

Laravel 未检测到标头和 JWT 包中发送的身份验证令牌

Laravel 5 CORS 问题与 Ionic Angular

ionic 和cordova的区别是啥

laravel 5.4 中的 API 验证