想在Laravel中实现WebSockets

10

我想在使用Web sockets的Laravel中实现Web通知。 我已经尝试过Pusher,它很容易使用,但它是一个付费包。 我还尝试过Redis和Socket.io,但需要安装Horizon。 根据我所了解到的关于Horizon的信息,我正在运行Windows,无法在Windows上安装它。

因此,我非常困惑如何进行推送通知。 我已经尝试了至少一周,但还没有找到任何解决方案。 我的前端是Angular 5 / Android,后端是Laravel 5.6。

您能否请给我一些好的想法来实现推送通知呢?


你可以使用Node.js。 - lkdhruw
你能给我一些关于如何做这件事的参考资料或教程吗? - Pranav Mandlik
1
这是一个非常简单的聊天应用程序示例,以了解使用socket.io的node.js https://socket.io/get-started/chat/。您可以控制要发送通知的对象。 - lkdhruw
他们正在使用 Pusher。 - Pranav Mandlik
请访问onesignal.com。 - Toni Michel Caubet
4个回答

7

你已经使用了Pusher,所以我认为你知道如何使用事件。

我建议你使用laravel-echo-server。它非常易于使用,并且有内置的API。

以下是一个从头开始创建laravel-echo项目的最新示例。在设置项目之后,您将需要安装Predis(如果尚未安装)。

composer require predis/predis
redis-server /usr/local/etc/redis.conf
  1. run npm install -g laravel-echo-server
  2. run laravel-echo-server init
  3. uncomment App\Providers\BroadcastServiceProvider::class in config/app.php
  4. add <script src="https://cdn.jsdelivr.net/npm/socket.io-client@2.1.1/dist/socket.io.js"></script> in your app.blade.php
  5. you need a socketio-client ,you can run npm install --save laravel-echo .In case you are not familiar with npm or vue, you can simply include this compiled file from my github project.compiledjs
  6. add this to app.blade.php

    <script>
    window.Echo = new Echo({
    broadcaster: 'socket.io',
    
    host: '{{url('/').':6001'}}',
    });
    Echo.private(`App.User.{{Auth::id()}}`) // private channel
    .listen('NewMessage', (e) => {
        console.log(e)
    
    });
    
    
    </script>
    
  7. finally run laravel-echo-server start and open you project ,you will see

    [20:53:21] - Lv5OKDAcuSLsK1nBAAAE authenticated for: private- 
       App.User.1
    [20:53:21] - Lv5OKDAcuSLsK1nBAAAE joined channel: private-App.User.1
    
  8. you can listen any event you want or other notifications

  9. here is my github project echo-example

添加一些代码,以便您可以使用Postman向特定用户发送消息。您可以从Chrome控制台中查看消息。您可以从GitHub项目截图中获取更多详细信息。


5
请看这篇文章,它介绍了如何使用redis驱动、Laravel echo和socket.io客户端在laravel中实现websocket。
根据上述文章:
“为什么不直接使用Pusher呢?”
问题就在于此。
Laravel已启用Pusher。尽管Pusher似乎是一个快速的“即插即用”解决方案(事实上确实如此),但它有一些限制。请查看https://pusher.com/pricing 大多数教程都会在标题中宣称实现Websockets,但实际上它们只是想给你Pusher。(我最喜欢的部分是当他们说你可以轻松切换到socket.io时)

确切地说,他们只是利用socket.io的关键词来吸引人们点击。然而,这篇文章实际上是关于pusher的。我猜pusher.com在这些网站上投资,以引导人们使用他们的服务。这是一个明确的营销策略。这就是为什么我花了很多时间学习socket.io,并且我为自己成功运用它感到自豪。 - kapitan

2

我能否在Redis和Socket.io中使用您的软件包? - Pranav Mandlik
不需要使用socket.io,该包含websocket服务器。 - Jithin Jose
好的,我会尝试使用你的软件包并回复你。非常感谢@Jithin。 - Pranav Mandlik

1

最佳集成实时性到Laravel的方式既不是Node也不是Pusher

你可能觉得使用Pusher更容易,并且不想付出代价。那么毫不犹豫地尝试Laravel Websockets。它是一个非常简单的Pusher替代品。

简而言之,您可以使用Pusher客户端库来访问托管在您的php服务器上的类似Pusher的服务器。由于它是开源的,所以是免费的。 它比使用socket.io或redis更好,因为它们需要您支付额外的服务器费用。 您可以在这里检查他们的演示应用程序。

附注

如果您想要更多自定义控件,则可以使用ratchet


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接