Я не получаю сообщений, если я пытаюсь отправить сообщение через socket.io / redis, я использую Laravel Events для этого случая.Класс socket.js создает сервер и выглядит следующим образом:
var fs = require('fs');
var options = {
key: fs.readFileSync('/etc/nginx/ssl/mydomain.com/123/server.key')
cert: fs.readFileSync('/etc/nginx/ssl/mydomain.com/123/server.crt')
};
var app = require('https').createServer(options,handler);
var io = require('socket.io')(app);
var Redis = require('ioredis');
var redis = new Redis();
function handler(req, res) {
res.writeHead(200);
res.end('');
}
io.on('connection', function(socket) {});
// Channel if user signs up
var redisUserSignedUp = new Redis();
redisUserSignedUp.subscribe('signed-up-channel');
redisUserSignedUp.on('message', function(channel, message) {
message = JSON.parse(message);
io.emit(channel + ':' + message.event, message.data);
});
// run server on port 8111
app.listen(8111, function () {
console.log('Der Server läuft!');
});
Я просто запускаю node socket.js на моем сервере Ubuntu.Я пытаюсь получить сообщение и показать уведомление, подобное этому, в моем файле event.js:
// event.js if something happen some notification should appear
var url = window.location.origin.replace(/\/$/, "")+':8111';
var socket = io(url);
// ...
// UserSignedUp Event, is fired in Auth\RegisterController if a user signs up
socket.on('signed-up-channel:App\\Events\\UserSignedUp', (data) => {
this.signedUpUsers = data.username;
this.$toasted.info("Following User has registered: ", {
theme: "primary",
position: "top-right",
icon: {
name: 'chevron-right',
after: true,
},
iconPack: 'fontawesome',
duration: 10000
});
});
Но я не получаю ответа, и это простой класс Event от laravel:
<?php
namespace App\Events;
use Illuminate\Queue\SerializesModels;
use Illuminate\Contracts\Broadcasting\ShouldBroadcast;
class UserSignedUp extends Event implements ShouldBroadcast
{
use SerializesModels;
public $username;
public function __construct(String $username)
{
$this->username = $username;
}
public function broadcastOn()
{
return ['signed-up-channel'];
}
}
Я получаю следующие выходные данные из моих журналов:
Broadcasting [App\Events\UserSignedUp] on channels [signed-up-channel] with payload:
{
"username": "King",
"socket": null
}
И на моем локальном компьютере с Windows я получаю правильное уведомление, если происходит это событие, поэтому я что-то упускаю.