广播事件-工作良好的服务器端,但不是在客户端

Broadcasting Event - Works Good on Server-Side, but Not on Client-Side

本文关键字:客户端 服务器端 事件 工作 广播      更新时间:2023-09-26

我使用的是Laravel 5.1。我试图在相关函数上调用useradddedfriend事件,并被Socket捕获。

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

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

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


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

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

在类 useradddedfriend :

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);
最后,Client:
 <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.');
  }

我找到我的问题了。

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

应该

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