How to set up Node, Socket.io, and Redis?

February 1, 2016 1.3k views
Node.js Redis Ubuntu

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 my droplet. First some code:


var server = require('http').Server();
var io = require('socket.io')(server);
var Redis = require('ioredis');
var redis = new Redis();


redis.on('message', function(channel, message) {
    message = JSON.parse(message);

    io.emit(channel + ':' + message.event, message.data);



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


Route::get('/fire', function() {
    $i = 0;
    while ($i < 10) {
        event(new EventWasCompleted($i)); 
    return 'Done';

Now what happens is when I am working locally, is that I can visit the main view and hit the localhost/fire route and my event is broadcasting correctly and the results are pushed to the main view.

However, when I tried to push to my droplet, 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 send the events from droplet_IP/fire my view can't catch the events.

What do I need to change to get this to work?

1 Answer
tam February 1, 2016
Accepted Answer

Finally fixed it. I had to set the client to var socket = io('http://droplet_IP:3000'); and I had to set the server to server.listen(3000, 'droplet_IP');

Have another answer? Share your knowledge.