socket.io是否会释放大量处理能力?

时间:2016-06-07 03:06:27

标签: websocket socket.io

我有一个socket.io客户端,如果特定用户登录/退出我的socket.io服务器,则需要监听 我所做的是创建一个函数,它接受一个userID数组,以及一个回调用户信息,如果他登录/退出。这是代码:

        this.onUserConnected = function(arrayOfUserID,cb){

            if(typeof arrayOfUserID != 'object'){
                return console.error('1st parameter is not an array');
            }
            socket.on('onUserConnected', function(user) {
              if(arrayOfUserID.indexOf(user.user_id) > -1){
                    cb(user)
                }
            })
        }

        this.onUserDisconnected = function(arrayOfUserID,cb){
            if(typeof arrayOfUserID != 'object'){
                return console.error('onUserDisconnected 1st parameter is not an array');
            }
            socket.on('onUserDisconnected', function(user) {
                if(arrayOfUserID.indexOf(user.user_id) > -1){
                    cb(user)
                }
            })
        }

这是socket.io服务器代码:

 //Some authentication here which check and get the user if he exists
 socket.emit('onUserConnected', user)

我将用户发送到所有连接的套接字是否合适?在客户端,我获取登录/退出的所有用户并检查user_id是否合适,如果它等于arrayOfUserID中的值之一然后返回它?

注意:我知道Socket.io Rooms,但在我的应用程序中我处理了多个标签,并且我有一个动态命名空间

1 个答案:

答案 0 :(得分:0)

  

socket.io是否会释放大量处理能力?

目前尚不清楚你的意思。 socket.io本身只使用TCP发送webSocket消息。它不会使用大量的处理能力,但是如果你向很多客户端发送大量的消息,可以使用一些CPU。

  

我将用户发送到所有已连接的套接字是否合适?

通常,您应该只向客户发送他们实际需要的信息。向所有客户端发送有关所有客户端的所有信息将限制您的可扩展性,因为可能会有大量的更新发送给所有客户端。客户端接收的每次传输也会消耗一些电量(与电池供电设备相关),因此限制传输对客户也有好处。

最有效的方案通常是让客户端准确告诉服务器它想要的信息,并让服务器仅将该信息发送给客户端,并仅在其发生变化时发送。这比让服务器将所有信息发送到客户端并让客户端对其进行排序更有效。

  

在客户端,我获取所有用户是好的   登录/注销并检查user_id是否等于其中一个   arrayOfUserID中的值然后返回吗?

与上述答案相同。如果您可以让服务器仅在感兴趣的事情发生时提醒客户端,那通常会更好。

  

注意:我知道Socket.io Rooms,但在我的应用程序中,我处理多个   标签,我有一个动态命名空间

您可以将socket.io房间用于动态创建的房间。您还没有描述您的实际应用程序,但房间是一组出色的内置方式,可供用户群进行通信或相互更新,服务器可以使用内置功能轻松管理此通信房间。