ฉันต้องการส่งข้อมูลไปยังรหัสซ็อกเก็ตเฉพาะหนึ่งรหัส
เราเคยทำได้ในเวอร์ชันเก่า:
io.sockets.socket(socketid).emit('message', 'for your eyes only');
ฉันจะทำสิ่งที่คล้ายกันใน Socket.IO 1.0 ได้อย่างไร
ฉันต้องการส่งข้อมูลไปยังรหัสซ็อกเก็ตเฉพาะหนึ่งรหัส
เราเคยทำได้ในเวอร์ชันเก่า:
io.sockets.socket(socketid).emit('message', 'for your eyes only');
ฉันจะทำสิ่งที่คล้ายกันใน Socket.IO 1.0 ได้อย่างไร
คำตอบ:
ใน socket.io 1.0 มีวิธีที่ดีกว่าสำหรับสิ่งนี้ แต่ละซ็อกเก็ตจะรวมห้องเริ่มต้นโดยอัตโนมัติด้วยรหัสตนเอง ตรวจสอบเอกสาร: http://socket.io/docs/rooms-and-namespaces/#default-room
ดังนั้นคุณสามารถส่งไปยังซ็อกเก็ตโดยใช้รหัสต่อไปนี้:
io.to(socketid).emit('message', 'for your eyes only');
ใน socket.io 1.0 คุณสามารถทำได้ด้วยรหัสต่อไปนี้:
if (io.sockets.connected[socketid]) {
io.sockets.connected[socketid].emit('message', 'for your eyes only');
}
อัปเดต:
คำตอบของ @ MustafaDokumacıมีทางออกที่ดีกว่า
@Mustafa Dokumacıและ @Curious ให้ข้อมูลเพียงพอแล้วฉันกำลังเพิ่มวิธีรับรหัสซ็อกเก็ต
ในการรับรหัสซ็อกเก็ตให้ใช้socket.id :
var chat = io.of("/socket").on('connection',onSocketConnected);
function onSocketConnected(socket){
console.log("connected :"+socket.id);
}
หากคุณใช้เนมสเปซฉันพบว่าสิ่งต่อไปนี้ใช้งานได้:
//Defining the namespace <br>
var nsp = io.of('/my-namespace');
//targeting the message to socket id <br>
nsp.to(socket id of the intended recipient).emit('private message', 'hello');
เพิ่มเติมเกี่ยวกับเนมสเปซ: http://socket.io/docs/rooms-and-namespaces/
ฉันเชื่อว่าทั้ง @Curious และ @ MustafaDokumacıให้โซลูชันที่ใช้งานได้ดี ความแตกต่างคือด้วยโซลูชันของ@MustafaDokumacıข้อความจะถูกส่งไปยังห้องหนึ่งไม่ใช่เฉพาะกับลูกค้ารายใดรายหนึ่งเท่านั้น
ความแตกต่างจะเห็นได้ชัดเมื่อมีการร้องขอการตอบรับ
io.sockets.connected[socketid].emit('message', 'for your eyes only', function(data) {...});
ทำงานตามที่คาดไว้ในขณะที่
io.to(socketid).emit('message', 'for your eyes only', function(data) {...});
ล้มเหลวด้วย
Error: Callbacks are not supported when broadcasting
ใน Node.js -> socket.io -> มีตัวอย่างการแชทเพื่อดาวน์โหลด Paste this in line (io on connection) part .. ฉันใช้รหัสนี้ที่ใช้งานได้ 100%
io.on('connection', function(socket){
socket.on('chat message', function(msg){
console.log(socket.id);
io.to(socket.id).emit('chat message', msg+' you ID is:'+socket.id);
});
});