我正在使用前端的HTML5和Javascript以及后端的Node.js构建简单的Web应用程序。我也使用Socket.IO在客户端和服务器之间来回传递数据。假设我有一个聊天页面,每个人都可以登录并加入聊天室。我跟踪后端聊天室里的所有人。我想要做的是如果一个人离开那个房间就把他从房间里移走。例如,如果某人关闭了他们的浏览器,则不应再将其显示为活动用户。
Socket.IO有一个断开事件,这似乎是完成此任务的完美工具。例如,当我运行此代码时:
socket.on("disconnect", function (){
console.log("DISCONNECTED");
});
当有人关闭浏览器时,将打印答案 0 :(得分:4)
socket.on("disconnect", function (){
console.log(this.id); // this.id is the 'id' of the socket that got disconnected
});
答案 1 :(得分:1)
你的问题毫无意义。每个套接字都是与单个客户端的连接。
以下是如何将名称与套接字关联,然后在同一套接字断开连接时打印相同的名称:
io.sockets.on('connection', function(socket) {
var name = "";
socket.on('set-name', function(_name) {
name = _name;
});
socket.on("disconnect", function (){
console.log("DISCONNECTED "+name);
});
});
您已经知道哪个连接丢失,因为您持有连接对象socket
答案 2 :(得分:1)
基本上,一旦你监听'connect'事件,只要客户端连接到服务器,你就会得到一个套接字对象。 您可以将客户端信息存储到该套接字对象。 您可以参考这篇文章,并注意服务器端代码,其中编码器在服务器端使用pluarl形式'套接字'(因此服务器端将创建许多客户端套接字!)。 http://psitsmike.com/2011/10/node-js-and-socket-io-multiroom-chat-tutorial/
希望以下示例能为您提供帮助。
//server side
var io = require('socket.io').listen(80)
// sockets here, not socket
io.sockets.on('connection', function(socket){
// every connection will create a socket
socket.on('newUser', function(name){
socket.id = name; // socket stores the username
});
socket.on('disconnect', function(){
console.log(socket.id); // retrieve it from socket object
});
// more functionality goes...
});
和客户端
var socket = io.connect('http://localhost:80');
socket.on('connect', function(){
//emit newUser event so that client info is stored
socket.emit('newUser', prompt('Please enter your name!'));
//.... more functionality goes
});
希望这会帮助你理解!