2016-05-11 58 views
0

獲取socketid我有以下app.js發送給啓動請求socket.io的特定客戶端。在路由器

var express = require('express'); 
var app = express(); 
// var responseHandlerRouter = require('./routes/responseHandlerRouter.js'); 

routes = require('./routes'); 

var server = app.listen(3000, function() { 
    console.log('Example app listening on port 3000!'); 
}); 

io = require('/usr/local/lib/node_modules/socket.io').listen(server); 

app.use('/', routes(io)); 

routes.js

var express = require('express'); 
var router = express.Router(); 

module.exports = function (io) { 

    // all of this router's configurations 

    router.get('/login', function (req, res, next) { 
     io.emit('notification', 'news'); 
     res.end('well finally I am here'); 
    }); 

    return router; 

} 

的index.html

<!doctype html> 
<html> 
    <head> 
     <script src="http://127.0.0.1:3000/socket.io/socket.io.js"></script> 
     <script> 

     var socket = io.connect('http://localhost:3000/login'); 

     socket.on('notification', function (data) { 
      console.log(data); 
     }); 
     </script> 
    </head> 
    <body> 
     <ul id='messages'></ul> 
    </body> 
</html> 

當我做了得到的網址,它發出的嚴格g'新聞'給瀏覽器,但它發送給所有的客戶端。如果我打開多個瀏覽器,它將發送給所有的瀏覽器。我如何發送給特定的客戶?或者如何在路由器中獲取socketid。可以使用io對象嗎?

回答

0

您可能需要在此重新考慮您的設計。通常,你會從connect事件

io.on('connection', function(socket) { 
    socket.emit('Hello World'); 
} 

你的情況,你傳遞到整個IO對象的引用,讓你參考特定的客戶端。您可能需要設置一種方法來處理連接事件,並在套接字句柄和客戶端ID之間創建映射(JS中的數組)。然後,您可以通過來自路由器內req參數的某種標識符來引用地圖上的套接字句柄。

就我個人而言,我從來沒有使用socket.io路由器,並會建議使用名稱空間或房間。

相關問題