广播事件 - 在服务器端运行良好,但在客户端运行不佳
Broadcasting Event - Works Good on Server-Side, but Not on Client-Side
我正在使用 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));
在 class 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.');
}
我发现了我的问题。
socket.on('test-channel:UserAddedFriend', function(data)
应该是
socket.on('test-channel:App\Events\UserAddedFriend', function(data)
我正在使用 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));
在 class 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.');
}
我发现了我的问题。
socket.on('test-channel:UserAddedFriend', function(data)
应该是
socket.on('test-channel:App\Events\UserAddedFriend', function(data)