首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用Laravel Echo、laravel-echo服务器和socket.io进行广播是行不通的

使用Laravel Echo、laravel-echo服务器和socket.io进行广播是行不通的
EN

Stack Overflow用户
提问于 2016-10-14 18:03:17
回答 1查看 8.4K关注 0票数 4

我用自己的实现成功地用Laravel安装了websockets。现在我想转到拉拉维尔回声和拉拉-回波服务器。但是,在尝试和阅读了我能找到的每一篇文档之后,我确实需要更多的帮助。

当我触发一个事件时会发生什么:队列工作人员将按需要处理该事件:"Processed:照明\广播\BroadcastEvent“。但是在laravel-echo服务器控制台和客户端没有发生任何事情。

一些资料:

  • Laravel正在8001端口上运行
  • Redis正在运行6379
  • 队列工作者正在运行(php artisan queue:work)
  • Laravel、Redis和laravel-echo-server运行在同一台机器上(192.168.134.214)
  • 在尝试私有通道时,BroadcastServiceProvider中的身份验证似乎有效(如果服务器失败,则将错误写入控制台)
  • 客户端使用laravel-echo-server的socket.io脚本:<script src="//192.168.134.214:6001/socket.io/socket.io.js"></script>

我的.env节选:

代码语言:javascript
复制
BROADCAST_DRIVER=redis
CACHE_DRIVER=redis
SESSION_DRIVER=redis
QUEUE_DRIVER=redis

REDIS_HOST=127.0.0.1
REDIS_PASSWORD=null
REDIS_PORT=6379

laravel-echo-server.json:

代码语言:javascript
复制
{
    "appKey": "<myAppKey>",
    "authEndpoint": "/broadcasting/auth",
    "authHost": "http://localhost:8001",
    "database": "redis",
    "databaseConfig": {
        "redis": {
            "port": "6379",
            "host": "http://localhost"
        }
    },
    "devMode": true,
    "host": "192.168.134.214",
    "port": "6001",
    "sslCertPath": "",
    "sslKeyPath": ""
}

app.js

代码语言:javascript
复制
import Echo from "laravel-echo"

window.Echo = new Echo({
    broadcaster: 'socket.io',
    host: 'http://192.168.134.214:6001',
});

app.blade.php

代码语言:javascript
复制
<script>
    Echo.channel('mychan')
        .listen('myevent', (e) => {
            console.log('Hello World!', e);
        });
</script>

活动“NewsPublished”的部分内容:

代码语言:javascript
复制
class NewsPublished implements ShouldBroadcast {
    use InteractsWithSockets, SerializesModels;

    public function broadcastOn() {
        return new Channel('mychan');
    }

    public function broadcastAs() {
        return 'myevent';
    }
}

..and我要用event(new App\Events\NewsPublished());启动这个事件

我希望在将"devMode“转换为true时,从laravel服务器获得一些信息。但这似乎改变不了什么!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-10-18 13:48:28

在您的redis配置中,您已经将http://作为与主机的协议包括在中。您需要删除协议,只需使用localhost或127.0.0.1

代码语言:javascript
复制
{
...
"databaseConfig": {
    "redis": {
        "port": "6379",
        "host": "localhost"
    }
...
}

*旁白:如果您有使用套接字的能力,请考虑使用"path":"/path/ to /sockfile“代替"host";这是关于性能的大部分内容,但我确信这种更正应该会使其工作。

作为参考,这里是我正在使用的laravel-echo-server.json配置的编辑版本。

代码语言:javascript
复制
{
  "appKey": [omitted],
  "authEndpoint": "/broadcasting/auth",
  "authHost": "http://localhost",
  "database": "redis",
  "databaseConfig": {
    "redis": {
      "db": 2, /*this is an intentional change; the default is zero(0)*/
      "path": "/tmp/redis.sock",
      "password": [omitted]
    }
  },
  "devMode": false,
  "host": "",
  "port": "6001",
  "referrers": [
    {
      "host": "*", /*matches any referrer*/
      "apiKey": [omitted]
    }
  ],
  "sslCertPath": "",
  "sslKeyPath": "",
  "verifyAuthPath": true,
  "verifyAuthServer": false
}
票数 9
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40049438

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档