2015-07-05 41 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"); 
});