2016-08-05 93 views
3

我正在使用laravel用于api的一些离子应用程序。有一些实时聊天功能的需求。在API端使用Ionic和laravel进行实时聊天

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

SO问题没有改变堆栈,我怎么能实现它。我目前的堆栈是cordova,离子型,然后是服务器端的laravel mysql

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

感谢您的帮助提前。

干杯!

+0

[在laravel 5中实现简单websocket的可能的重复](http://stackoverflow.com/questions/33471695/simple-websocket-implementation-in-laravel-5) –

回答

4

是的,它可以用这个堆栈完成 - 我自己完成了,我写了a blog post关于如何这样做。关于这个Laravel文档也是goes into some detail。我们的应用程序没有使用Ionic,但情况基本相同。

它的要点如下:

  • 消息通过POST请求照常
  • 当被提交的消息提交到REST API,控制器触发一个NewMessage事件
  • 这事件设置为可广播,并使用Redis驱动程序(您可能更喜欢使用Pusher,但我使用了Redis和Socket.io)
  • 单独的Node.js脚本侦听NewMessage事件,当它触发时,发出给所有附属客户的消息TS(或者聊天,就是要专用,只有适当的客户端)
  • 在接收使用socket.io-client的消息时,采取适当的行动,例如,该消息被插入到DOM

唯一增加你需要让你的堆栈是Node.js和Redis。我遇到的最大问题是配置Nginx,但部分原因是我使用SSL。

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

+0

这很有道理。但是在客户端,如果我将使用redis,我将不得不设置节点脚本,它可以侦听来自redis的广播事件。我将在哪里设置此节点服务器?通信就像android(cordova)到服务器(laravel)。并且我们需要双向通信,在此节点脚本将驻留并且节点服务器将被设置?希望你得到我的好奇心来混乱。大声笑 。 –

+1

Node.js脚本可以在相同的服务器上运行,相当愉快,它只需要侦听不同的端口,Nginx可以将对Node.js脚本的代理请求反转为该端口。我的经验是,最好让Laravel处理通过HTTP接收消息,并在收到时广播它们 - 通过Websockets发送和接收消息而不将整个事件切换到Node.js是非常实用的,而这是完全可以接受的妥协。 –

+1

基本上流程是Laravel将事件推送到Redis,Node.js脚本拾取事件并通过Socket.io广播它,并且该应用程序通过套接字接收它。io客户端 –