Node.js 实际上';插座';对象是否在socket.io中?如何确保它的使用是最佳的?

Node.js 实际上';插座';对象是否在socket.io中?如何确保它的使用是最佳的?,node.js,websocket,socket.io,Node.js,Websocket,Socket.io,我目前有一个项目,我必须使用nodejs和socket.io开发一个基于web的棋盘游戏。问题是,我直接从Android开发跳到了Web开发,因此我在理解概念方面面临一些问题 我已经实现了一些代码,其中客户端连接到服务器(app.js),发送消息,接收消息等。我还添加了一个供玩家聊天的小聊天窗口。它起作用了。我对发送信息和加入房间里的东西有了大致的了解 问题是,我不知道如何充分利用用户连接时服务器接收的socket对象。我是否应该将套接字对象保存到某个地方以备将来使用?或者我只是将用户添加到文件

我目前有一个项目,我必须使用
nodejs
socket.io
开发一个基于web的棋盘游戏。问题是,我直接从Android开发跳到了Web开发,因此我在理解概念方面面临一些问题

我已经实现了一些代码,其中客户端连接到服务器(
app.js
),发送消息,接收消息等。我还添加了一个供玩家聊天的小聊天窗口。它起作用了。我对发送信息和加入房间里的东西有了大致的了解


问题是,我不知道如何充分利用用户连接时服务器接收的
socket
对象。我是否应该
套接字
对象保存到某个地方以备将来使用?或者我只是将用户添加到文件室中,这样就可以向单个用户发送消息,而不必关心将套接字保存到变量中?在这个项目的未来开发中,我需要再次使用
socket
对象来做某些事情的可能性有多大?我确实在控制台中输出了socket对象,以查看它包含哪些信息,但这对我来说太难理解了

在socket.io中,socket对象是socket.io用来跟踪给定套接字状态的Javascript对象。它有一些方法和属性,这些方法和属性对于您用于某些目的非常有用,为了使用这些方法和属性,您必须获得对所需套接字对象的引用

但是,您不一定需要自己保存套接字对象,因为socket.io服务器基础结构会保存所有套接字对象,并将它们保存在一个有组织的结构中,如果您愿意或需要,您可以在将来的任何时候找到它们

在闭包中保留套接字引用也是很常见的,它允许您接收消息并响应发送该消息的套接字,就像在这种类型的方案中一样:

io.on('connection', function(socket){
    socket.on('getDataX', function(requestArgs) {
        // process the getDataX request

        // send response to that same socket
        socket.emit('replyDataX', ....);
    });
});
或者,您可以通过以下方式向所有套接字广播:

io.emit('update', ...);
您可以通过多种方式访问socket.io存储的已连接套接字列表。例如:

io.sockets.connected
是一个对象,其中属性是套接字id和套接字对象的值,因此在给定id时可以找到套接字对象,或者可以迭代所有连接的套接字


您还可以向套接字对象添加自己的属性。一些聊天系统会将用户名添加到套接字对象中,以便您也可以通过用户名识别或查找给定的用途。

这实际上与(较低级别)套接字的方式无关。在
socket.io
中,“socket”对象只是可能使用Websocket协议、AJAX、XHR长轮询或其他通信技术的客户端通道抽象的一个名称(令人困惑)。请取下标签。至于您的问题:如果需要,您可以随时更新代码以在稍后阶段存储并清除此值。服务器是否会从其集合中删除特定套接字?就像客户端关闭窗口一样?@SrujanBarai-当客户端断开连接时,socket.io将从其数据中删除套接字。因此,是否可以让客户端刷新页面而不丢失其在服务器上的标识?在浏览器中刷新页面将释放与该页面相关的所有资源,包括任何连接的WebSocket。通常,新加载的页面只会建立一个新的连接并从那里继续。如果您希望服务器能够识别新刷新的页面是刚才连接的同一用户,通常通过某种用户识别cookie来完成。由于webSocket/socket.io连接以http请求开始,因此所有cookie也都存在,socket.io允许您访问随初始连接发送的cookie。因此,您可以使用用户标识cookie或会话(必须首先放在那里)即使用户在浏览网站或刷新页面时关闭套接字,然后重新打开新套接字,也要维护用户的身份。