【问题标题】:Broadcasting Event - Works Good on Server-Side, but Not on Client-Side广播事件 - 在服务器端工作得很好,但在客户端却不行
【发布时间】:2015-10-06 19:09:16
【问题描述】:

我正在使用 Laravel 5.1。我正在尝试触发在相关函数上调用的 UserAddedFriend 事件并被 Socket.io 和 Redis 捕获。

所以我在服务器端运行node socket.js。对我来说一切似乎都很好,当我打开 2 个浏览器并使用 2 个不同的用户(X 和 Y)登录时,两者都会连接。

当我调用函数 'addFriend' 函数时,会触发事件。在服务器上,node socket.js 也打印 Received 文本;但是,控制台中的任何浏览器都不会返回任何内容。

我错过了什么或做错了什么?


所以在 'addFriend()' 函数上,我触发了这个事件:

 \Event::fire(new UserAddedFriend($username));

关于UserAddedFriend类:

class UserAddedFriend extends Event implements ShouldBroadcast

public $username;

public function __construct($username)
{
    $this->username = $username;

}

public function broadcastOn()
{
    return ['test-channel'];
}

服务器:

var server = require('http').Server();
var io = require('socket.io')(server);

var Redis = require('ioredis');
var redis = new Redis();

redis.subscribe('test-channel', function(err, count) {
    //
});

redis.on('message', function(channel, message) {
    console.log("Received");       // gets printed

    message = JSON.parse(message);
    io.emit(channel + ':' + message.event, message.data);
});

server.listen(3000);

最后,客户

 <script>
    var socket = io('http://192.168.10.10:3000');

    socket.on('test-channel:UserAddedFriend', function(data) {
       console.log('a');     // nothing logged
       console.log(data);    // nothing logged
   });

</script>

要添加,不使用事件处理程序;但是当我使用事件句柄函数并使用 die&dump $event 时,它会成功转储。

 public function handle(UserAddedFriend $event)
  {
    dd($event->username . ' added you.');
  }

【问题讨论】:

    标签: javascript node.js sockets laravel socket.io


    【解决方案1】:

    我发现了我的问题。

    socket.on('test-channel:UserAddedFriend', function(data)

    应该是

    socket.on('test-channel:App\\Events\\UserAddedFriend', function(data)

    【讨论】:

      猜你喜欢
      • 2021-04-16
      • 1970-01-01
      • 2016-11-27
      • 2010-11-12
      • 2012-07-18
      • 1970-01-01
      • 2016-05-24
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多