當我命名空間我的應用程序時,遇到了一個問題,我想將數據發送到特定套接字,以下是我正在使用的代碼的縮寫版本:當發送到特定套接字時,socket.io中的名稱間隔
var io = require('socket.io').listen(config.web.port);
var chat = io.of('space').on('connection', function (socket) {
// This works:
// Input: xhr-polling received data packet 5::/space:{"name":"test"}
// Output: xhr-polling writing 5::/space:{"name":"test","args":[{"msg":"test"}]}
socket.on('test', function(){
socket.emit('test',{msg: "test"});
});
// This fails:
// Input: xhr-polling received data packet 5::/space:{"name":"test2"}
// Output: xhr-polling writing 5:::{"name":"test2","args":[{"msg":"test2"}]}
socket.on('test2',function(){
io.sockets.socket(socket.id).emit('test2',{msg: "test2"});
});
}
如您所見,第二個缺少輸出中的命名空間部分。在真正的應用程序中,我從客戶端管理器中選擇套接字ID,所以我在這段代碼中使用了socket.id而不是client.getSocketId(),但這個想法與我只是迴應起源客戶在這裏。
如何在輸出到客戶端時使第二種方法使用正確的名稱空間?
謝謝,解決了這個問題!你是否會如此善良,並編輯你的答案,以包括你從SocketNamespace的源頭中找出的方式?通讀它我無法弄清楚。我想了解細節。 :) – Fuu
很高興工作! –
嗯,我得到了SocketNamespace.prototype.socket部分的功能,但是你如何從那個推斷出'io.sockets.socket()'中的套接字需要替換('命名空間')? – Fuu