2015-10-06 73 views
0

我正在使用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> 

要添加,不使用事件处理程序;但是当我使用事件处理功能并使用&转储$event时,它成功转储。

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

回答

0

我发现我的问题。

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

应该

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

相关问题