2015-10-14 80 views
2

我有一個非常簡單的代碼,試圖從外部進程發送到socket.io服務器。不能得到socket.io發射器與socket.io-redis一起工作

server.js

var io = require('socket.io')(3201); 
var redis = require('socket.io-redis'); 
io.adapter(redis({ host: 'localhost', port: 6379 })); 

io.on('connection', function (socket) { 
    console.log("test 1"); 
    socket.on('testemit', function (data) { 
     console.log("test 2"); 
     console.log(data); 
    }); 
}); 

客戶端,emit.js(如在該文檔中發現):

var io = require('socket.io-emitter')({ host: '127.0.0.1', port: 6379 }); 
setInterval(function(){ 
     io.emit('testemit', {a: 'aaa'}); 
}, 3000); 

在服務器側,如果我與

DEBUG=* node server.js 
運行它

我所得到的全部是:

socket.io:server initializing namespace/+0ms 
    socket.io:server creating http server and binding to 3201 +3ms 
    socket.io:server creating engine.io instance with opts {"path":"/socket.io"} +1ms 
    socket.io:server attaching client serving req handler +2ms 
    socket.io-parser encoding packet aaa {"type":2,"data":["testemit",{"a":"aaa"}],"nsp":"/"} +0ms 
    socket.io-parser encoded {"type":2,"data":["testemit",{"a":"aaa"}],"nsp":"/"} as 2["testemit",{"a":"aaa"}] +1ms 

但testemit回調沒有被調用。

我失蹤了什麼?

+0

emit.js在「node emit.js」 – memical

+0

上運行在同一臺服務器上,我完全誤解了這一點。所有的作品。這個emit會發送給這個socket.io服務器的所有socket.io客戶端。 – memical

回答

3

我完全誤解了這一點。所有的作品。

這個emit不會發送給這個socket.io服務器的所有socket.io客戶端。

所以在瀏覽器,它的工作原理,這樣的:

 _socket = io.connect(url); 
     _socket.on('testemit', function (message) { 
      console.log('testemit'); 
      console.log(message); 
     }); 

我正在錯誤地期待它在服務器上工作了。

+1

我有同樣的誤解,我認爲這些事件會被服務器的socket.io-redis'接收,但是不會這樣工作......它們被連接到運行socket的服務器的客戶端接收到.IO-Redis的.. – Shide