添加了 appkey 作为 sendToOne 的判断依据
This commit is contained in:
		
							parent
							
								
									e9e7b2a63e
								
							
						
					
					
						commit
						7c58dfacbb
					
				@ -45,11 +45,12 @@ module.exports = {
 | 
				
			|||||||
        console.log('WebSocket-onMessage: dataObj', dataObj)
 | 
					        console.log('WebSocket-onMessage: dataObj', dataObj)
 | 
				
			||||||
        if (['SOCKET_OWNER', 'SOCKET_OWNER_RECONNECT'].includes(dataObj.skevent)) {
 | 
					        if (['SOCKET_OWNER', 'SOCKET_OWNER_RECONNECT'].includes(dataObj.skevent)) {
 | 
				
			||||||
          // 前端断线重连时,并不会自动再次提供 _passtoken。在前端的initSocket时,应当把_passtoken送过来。
 | 
					          // 前端断线重连时,并不会自动再次提供 _passtoken。在前端的initSocket时,应当把_passtoken送过来。
 | 
				
			||||||
          dataObj._passtokenSource = webtoken.verifyToken(dataObj._passtoken)
 | 
					          const _passtokenSource = webtoken.verifyToken(dataObj._passtoken)
 | 
				
			||||||
          console.log('WebSocket-onMessge: _passtokenSource', dataObj._passtokenSource)
 | 
					          console.log('WebSocket-onMessge: _passtokenSource', _passtokenSource)
 | 
				
			||||||
          if (typeof dataObj._passtokenSource?.usid === 'string') {
 | 
					          if (typeof _passtokenSource?.usid === 'string') {
 | 
				
			||||||
            socket.usid = dataObj._passtokenSource.usid
 | 
					            socket.appkey = _passtokenSource.appkey
 | 
				
			||||||
            socket.skid = socket.skid || dataObj._passtokenSource.clid || 'skid' + crypto.randomBytes(16).toString('hex') // 注意,skid 这个名字 仅限在本文件内使用,在外部都使用 clid (client id)
 | 
					            socket.usid = _passtokenSource.usid
 | 
				
			||||||
 | 
					            socket.skid = socket.skid || _passtokenSource.clid || 'skid' + crypto.randomBytes(16).toString('hex') // 注意,skid 这个名字 仅限在本文件内使用,在外部都使用 clid (client id)
 | 
				
			||||||
            //            my.socketPool[socket.skid] = socket
 | 
					            //            my.socketPool[socket.skid] = socket
 | 
				
			||||||
            console.log(
 | 
					            console.log(
 | 
				
			||||||
              {
 | 
					              {
 | 
				
			||||||
@ -87,12 +88,11 @@ module.exports = {
 | 
				
			|||||||
      console.log('WebSocket_heartbeat: starting...')
 | 
					      console.log('WebSocket_heartbeat: starting...')
 | 
				
			||||||
      setInterval(() => {
 | 
					      setInterval(() => {
 | 
				
			||||||
        my.wsServer.clients.forEach((socket) => {
 | 
					        my.wsServer.clients.forEach((socket) => {
 | 
				
			||||||
 | 
					          console.log('WebSocket_heartbeat: ', { usid: socket.usid, skid: socket.skid, appkey: socket.appkey, readyState: socket.readyState })
 | 
				
			||||||
          if (socket.readyState !== ws.OPEN) {
 | 
					          if (socket.readyState !== ws.OPEN) {
 | 
				
			||||||
            //socket.isAlive = false
 | 
					            //socket.isAlive = false
 | 
				
			||||||
            console.log('WebSocket_heartbeat: not open', { usid: socket.usid, skid: socket.skid, readyState: socket.readyState })
 | 
					 | 
				
			||||||
          } else {
 | 
					          } else {
 | 
				
			||||||
            //socket.ping()
 | 
					            //socket.ping()
 | 
				
			||||||
            console.log('WebSocket_heartbeat: ping', { usid: socket.usid, skid: socket.skid, readyState: socket.readyState })
 | 
					 | 
				
			||||||
          }
 | 
					          }
 | 
				
			||||||
        })
 | 
					        })
 | 
				
			||||||
        console.log('WebSocket_heartbeat: clientsSize =', my.wsServer.clients.size)
 | 
					        console.log('WebSocket_heartbeat: clientsSize =', my.wsServer.clients.size)
 | 
				
			||||||
@ -152,20 +152,22 @@ module.exports = {
 | 
				
			|||||||
    })
 | 
					    })
 | 
				
			||||||
  },
 | 
					  },
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  sendToOne (dataObj) {
 | 
					  sendToOne (dataObj = {}) {
 | 
				
			||||||
    console.log('sendToOne: dataObj =', dataObj)
 | 
					    console.log('sendToOne: dataObj =', dataObj)
 | 
				
			||||||
    my.wsServer.clients.forEach((socket) => {
 | 
					    my.wsServer.clients.forEach((socket) => {
 | 
				
			||||||
      console.log('sendToOne: socket', { usid: socket.usid, skid: socket.skid })
 | 
					      console.log('sendToOne: socket', { usid: socket.usid, skid: socket.skid, appkey: socket.appkey })
 | 
				
			||||||
      if ((dataObj.clid && socket.skid === dataObj.clid) || (dataObj.usid && socket.usid === dataObj.usid)) {
 | 
					      if ((dataObj.appkey && dataObj.appkey === socket.appkey) || !dataObj.appkey) {
 | 
				
			||||||
        try {
 | 
					        if ((dataObj.clid && socket.skid === dataObj.clid) || (!dataObj.clid && dataObj.usid && socket.usid === dataObj.usid)) {
 | 
				
			||||||
          if (socket.readyState === ws.OPEN) {
 | 
					          try {
 | 
				
			||||||
            socket.send(typeof dataObj !== 'string' ? JSON.stringify(dataObj) : dataObj)
 | 
					            if (socket.readyState === ws.OPEN) {
 | 
				
			||||||
          } else {
 | 
					              socket.send(typeof dataObj !== 'string' ? JSON.stringify(dataObj) : dataObj)
 | 
				
			||||||
            console.warn({ _at: new Date().toJSON(), _from: 'Socket:sendToOne', _type: 'CWARN', msg: 'sendToOne: socket not open', dataObj }, '\n,')
 | 
					            } else {
 | 
				
			||||||
 | 
					              console.warn({ _at: new Date().toJSON(), _from: 'Socket:sendToOne', _type: 'CWARN', msg: 'sendToOne: socket not open', dataObj }, '\n,')
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					          } catch (expt) {
 | 
				
			||||||
 | 
					            console.error({ _at: new Date().toJSON(), _from: 'Socket:sendToOne', _type: 'CERROR', msg: 'sendToOne: Failed sending to socket', dataObj }, '\n,')
 | 
				
			||||||
 | 
					            //          delete my.socketPool[socket.skid]
 | 
				
			||||||
          }
 | 
					          }
 | 
				
			||||||
        } catch (expt) {
 | 
					 | 
				
			||||||
          console.error({ _at: new Date().toJSON(), _from: 'Socket:sendToOne', _type: 'CERROR', msg: 'sendToOne: Failed sending to socket', dataObj }, '\n,')
 | 
					 | 
				
			||||||
          //          delete my.socketPool[socket.skid]
 | 
					 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
      }
 | 
					      }
 | 
				
			||||||
    })
 | 
					    })
 | 
				
			||||||
 | 
				
			|||||||
		Loading…
	
		Reference in New Issue
	
	Block a user