reactjs - socket.io 不将消息发送回套接字

我正在开发一个通过 socket.io 与服务器通信的应用程序,我的应用程序中的用户具有我想在我的服务器上使用的唯一 ID,所以我创建了一个包含具有这些唯一 ID 和套接字的字段的小类

import {Socket} from 'socket.io'

export interface VKClient{
    vkid: string,
    socket: Socket
}

export class VKClients{
    clients: VKClient[] = []

    addClient(client: VKClient){
        this.clients.push(client)
    }

    sendToClient(id: string, message: string, data?: any){
        this.clients.find(x => x.vkid === id)?.socket.emit(message)
    }
}

所以在 index.ts 我有结构

const io = new Server(5000, {
    cors: {
        origin: '*'
    }
})

const clients = new VKClients()

io.on('connection', (client) => onConnect(client, clients))

和 onConnect 处理程序看起来像

const onConnect = (client: Socket, clients: VKClients) => {
    client.on('handshake', (data: {uid: string, salt: string}) => {
        const newClient: VKClient = {vkid: data.uid, socket: client}
        clients.addClient(newClient)
        clients.sendToClient(data.uid, 'handshake')
    })
    client.on('getThemes', async (callback) => callback(await getThemes()))
}

问题是当客户端的用户发送握手消息时没有任何反应,服务器收到此消息,数据正常,它有 id 和哈希,套接字已添加到我的类中,我可以通过自定义 id 找到他,但是我无法使用 sendToClient 方法发送消息,从 socket.io 广播和 foreach 工作正常,如果我在 sendToClient 方法中使用 console.log 结构,它将记录 true

p.s。在类和 onConnect 处理程序中由 socket.io 操作的 id 是相同的

回答1

我存储客户端的逻辑似乎存在问题,因为当我将 this...find(x => x.vkid === id)... 替换为 forEach(x => {if(x.vkid === id)...} 时,它按预期工作

相似文章

随机推荐

最新文章