添加了 appkey 作为 sendToOne 的判断依据

This commit is contained in:
Luk 2024-09-18 13:15:17 +08:00
parent e9e7b2a63e
commit 7c58dfacbb

View File

@ -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]
} }
} }
}) })