I am very new to the whole idea of redis and socket.io but I followed this laracast series and I was able to get basic Laravel events to broadcast successfully.
The problem arose when I tried to push my code to a server. First some code:
socket.js
var server = require('http').Server();
var io = require('socket.io')(server);
var Redis = require('ioredis');
var redis = new Redis();
redis.subscribe('test-channel');
redis.on('message', function(channel, message) {
console.log(message);
message = JSON.parse(message);
io.emit(channel + ':' + message.event, message.data);
});
server.listen(3000);
main.blade.php
var socket = io('http://localhost:3000');
// not relevant stuff for using Vue.js
socket.on('test-channel:App\\Events\\EventWasCompleted', function(data) {
// push stuff to Vue.js
}.bind(this));
routes.php
Route::get('/fire', function() {
$i = 0;
while ($i < 10) {
event(new EventWasCompleted($i);
$i++;
}
return 'Done';
});
Now what happens is when I am working locally, is that I can visit the main
view and hit the /fire
route (ex: localhost/fire
) and my event is broadcasting correctly and the results are pushed to the main
view.
However, when I tried to push to production, I wasn't really sure what I needed to change if anything. I ran node socket.js
on the server, and I know that it is working because I can see the results of my event in the console. The issue is that my main
view does not properly receive the events. If I hit my local route localhost/fire
I do catch the events on my production server. However if I hit productionIp/fire
I can't catch the events.
What do I need to change to get this to work?
via Chebli Mohamed
Aucun commentaire:
Enregistrer un commentaire