2015-07-05 73 views
0

我有套接字io redis和快速pubsub繼續,在我的本地主機它工作得很好我使用laravel事件發佈到redis然後socket io應該發出消息,其工作好嗎在本地主機上,但在我的生產服務器上,這是一個ec2虛擬機,它只能連接,我可以看到控制檯消息「已連接」,但它不會發出任何事件,即使消息正在發佈到redis,這裏是我的客戶端和服務器socket io連接但不是emikoing

//client 

<script type="text/javascript">// <![CDATA[ 
      var socket = io.connect('http://127.0.0.1:3000/'); 

      socket.on('connect', function(data){ 
       //socket.emit('subscribe', {channel:'score.update'}); 
       console.log('connected'); 
      }); 

      socket.on('notification.update', function (data) { 
       //Do something with data 
       console.log('Notification Caught: ', data); 

      }); 




// ]]></script> 




//server 
var express = require('express'), 
    http =  require('http'), 
    server = http.createServer(app); 

var app = express(); 

const redis = require('redis'); 
const io =  require('socket.io'); 
const client = redis.createClient(); 

server.listen(3000, 'localhost'); 

io.listen(server).on('connection', function(client) { 
    const redisClient = redis.createClient() 
    redisClient.subscribe('notification.update'); 

}); 
    redisClient.on("message", function(channel, message) { 
     //Channel is e.g 'score.update' 
     client.emit(channel, message); 

    }); 

    client.on('disconnect', function() { 
     redisClient.quit(); 
    }); 
}); 

回答

0

你需要改變你的服務器的監聽:

更改這些:

var express = require('express'), 
http =  require('http'), 
server = http.createServer(app); 

var app = express(); 

const redis = require('redis'); 
const io =  require('socket.io'); 
const client = redis.createClient(); 

而且

server.listen(3000, 'localhost');  

io.listen(server).on('connection', function(client){ 
    //Code 
}); 

要:

var app = require('express')(); 
var server = require('http').Server(app); 
var io = require('socket.io')(server); 

而且

io.on('connection, function(client){ 
    //Code 
}); 

server.listen(3000, function(){ 
    console.log("Listening on :3000"); 
});