[英]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.