我的應用程序支持來自同一主機(IP地址)的多個socket.io客戶端。對於診斷,我需要能夠關聯客戶端和服務器日誌以確定服務器正在與哪個客戶端通話。 socket.io是否提供了唯一標識連接的方法?Socket.io:如何唯一標識客戶端和服務器上的連接?
0
A
回答
1
我要做的是,/routes/socket.js內,我有這些添加到我的要求:
var thisApp = require('../app');
var cookieSig = require('express/node_modules/cookie-signature');
var cookie = require('cookie');
var connect = require('express/node_modules/connect')
, parseSignedCookie = connect.utils.parseSignedCookie;
這個答案假設你有某種可以通過thisApp訪問的會話存儲。 thisStore。就我而言,在主app.js中,我使用kcbanner的connect-mongo(通過npm和github.com提供)使用MongoLab上的MongoDB後端爲我開設一個會話存儲。在會話存儲中,對於每個會話,您可以擁有一個唯一的用戶名,或與該會話一起使用的其他標識符。真的,你可以添加你想要的任何數據。這就是你如何區分他們的方式。
我使用的代碼如下所示:
module.exports = function (socket) {
socket.on('taste:cookie', function (data, callback) {
console.log("taste:cookie function running");
//get the session ID
var sid = data.sid;
sid = parseSignedCookie(sid['connect.sid'], "mySecret");
console.log("sid: ",sid);
//get the handshake cookie
var hssid = cookie.parse(socket.handshake.headers.cookie);
hssid = parseSignedCookie(hssid['connect.sid'], "mySecret");
console.log("hssid: %s",hssid);
if(sid) {
if(sid['connect.sid']) {
sid = sid['connect.sid'].slice(2);
console.log("sliced the sid: %s",sid);
sid = cookieSig.unsign(sid, "mySecret");
hssid = sid;
}
if(hssid != sid) {
console.log("browser cookie not set right; rectifying...");
data.sid = hssid;
sid = hssid;
}
else console.log("browser cookie was set right");
}
thisApp.thisStore.get(sid, function(err, gotsession) {
if(err || !gotsession) {
//handle error
return;
} else {
if(gotsession.username) {
callback(0, {username:gotsession.username});
}
else callback(1, {username:""});
}
});
});
也許有一個更優雅的方式來做到這一點,但這樣做的工作。
1
您可以使用session + cookies:以下是您可以使用或學習的圖書館:session-socket.io。 你會在他們的README頁面找到大量的例子。
相關問題
- 1. Socket.io客戶端未連接服務器
- 2. Socket.IO服務器+ Socket.IO客戶端
- 3. node.js中socket.io客戶端和服務器
- 4. 身份服務器客戶機上的唯一標識符
- 5. cassandra服務器如何識別客戶端連接崩潰?
- 6. 差「上」和「emmit」在服務器端和客戶端socket.io
- 7. Node.js客戶端重新連接的唯一標識符
- 8. 客戶端連接或服務器端?
- 9. 將Lua客戶端連接到Socket.io NodeJS服務器?
- 10. Socket.io-客戶端連接到多個服務器
- 11. 不能socket.io客戶端連接到服務器摩卡測試
- 12. 使用Socket.io連接客戶端到服務器
- 13. socket.io客戶端不連接
- 14. 服務器/客戶端連接(Python)的
- 15. php客戶端的唯一標識符
- 16. 如何在服務器端捕獲客戶端的連接和斷開連接?
- 17. MCA用戶標識如何使用MQ服務器連接通道授權客戶端用戶標識
- 18. 如何通過客戶端的node.js/socket.io連接到tcp服務器?
- 19. 如何通過客戶端的node.js/socket.io連接到tcp服務器
- 20. 簡單的Java客戶端 - 服務器:客戶端doent連接到服務器
- 21. 如何在apache服務器上運行socket.io(僅客戶端)
- 22. (Restify,ReactJS,Node.js)Socket.io客戶端狀態斷開連接,服務器記錄連接
- 23. 客戶端 - 服務器UDP連接
- 24. 連接到服務器http客戶端
- 25. Oracle客戶端服務器連接
- 26. 連接客戶端服務器RMI
- 27. MySQL連接服務器客戶端
- 28. 客戶端 - 服務器連接
- 29. 強制客戶端從socket.io和nodejs斷開與服務器的連接
- 30. socket.io客戶端和龍捲風python服務器之間的Websocket連接
我不確定這是否改變,但檢查此帖:[如何獲取客戶端中的socket.io客戶端的會話ID](http://stackoverflow.com/questions/6979992/how-to-get-get-會話ID-的插座-IO-客戶端在客戶端) – dc5