dimanche 31 janvier 2016

Using Node, Socket.io, and Redis on a production server?

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