简体   繁体   English

广播事件-在服务器端效果很好,但在客户端端效果不好

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

I am using Laravel 5.1. 我正在使用Laravel 5.1。 I am trying to fire a UserAddedFriend event called on related function and get caught by Socket.io and Redis. 我试图触发一个在相关函数上调用的UserAddedFriend事件,并被Socket.io和Redis捕获。

So I run node socket.js on the serverside. 所以我在服务器端运行node socket.js Everything seems okay to me, and when I open 2 browsers and login with 2 different users (X and Y), both gets connected. 对我来说一切似乎都还好,当我打开2个浏览器并用2个不同的用户(X和Y)登录时,两者都已建立连接。

When I call the function 'addFriend' function, event gets fired. 当我调用函数'addFriend'函数时,事件被触发。 On the server, node socket.js prints Received text as well; 在服务器上, node socket.js打印“ Received文本”。 however nothing gets returned on any of the browsers in console. 但是,控制台中的任何浏览器都不会返回任何内容。

What am I missing or doing wrong? 我想念什么或做错什么?


So on 'addFriend()' function, I fire this event: 因此,在“ addFriend()”函数上,我触发了此事件:

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

On class UserAddedFriend : 在类UserAddedFriend上

class UserAddedFriend extends Event implements ShouldBroadcast

public $username;

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

}

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

Server: 服务器:

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);

And lastly, 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>

To add, event handler is not used; 要添加的是,不使用事件处理程序; but when I use event handle function and and use a die&dump $event , it dumps successfully. 但是当我使用事件句柄函数并使用die&dump $event ,它会成功转储。

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

I found my problem. 我发现了问题。

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

should be 应该

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

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM