实际上' socket'对象在socket.io中?如何确保其使用是最佳的?

时间:2016-06-26 10:25:29

标签: node.js websocket socket.io

我目前有一个项目,我必须使用nodejssocket.io开发基于网络的棋盘游戏。问题是,我已经从Android开发直接跳到Web开发,因此我面临一些理解概念的问题。

我已经实现了一些代码,其中客户端连接到服务器(app.js),发送消息,接收消息等。我还添加了一个小聊天窗口供玩家聊天。它的工作。我对发送消息和加入房间内容的想法很粗略。

问题是,我不确定如何充分利用服务器在用户连接时收到的socket对象。我应该保存那个socket对象以备将来使用吗?或者我只是将用户添加到房间,因此可以向单个用户发送消息,而不关心将套接字保存到变量?在此项目的未来开发中,为了做某些事情,我需要再次使用socket对象的机会是什么?我确实在控制台中输出了套接字对象,看看它包含了哪些信息,但这对我来说太难理解了。

1 个答案:

答案 0 :(得分:3)

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

但是,您不一定需要自己保存套接字对象,因为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时找到套接字对象,或者可以迭代所有连接的套接字。

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