SocketIO 服务器不向触发事件的用户发回事件

SocketIO server not emitting event back to user who triggered event

我在前端 (React) 中使用 socket.io-client,在后端 (Express) 应用程序中使用 socket.io。在我的服务器上,我创建了一个事件,当触发时应该向房间中的所有用户发送一条消息,它看起来像这样。

socket.on('connection', () => {
    // OTHER SOCKET EVENT LISTENERS (join, etc.)
    socket.on('my_event', async (roomId) => {
        // DO SOME DATABASE STUFF
        const response = ...;
        socket.in(roomId).emit('my_event_response', response);
    }
});

在我的客户端上看起来像这样。

// socket.ts
export const socket = io(process.env.REACT_APP_SERVER_URL || '', { withCredentials: true });
export const SocketContext = React.createContext({} as Socket);

// parent.ts
export const ParentNode: FC = () => {
    const roomId = ...;
    return (
        <SocketContext.Provider value={socket}>
            <ChildNode roomId={roomId} />
        </SocketContext.Provider>
    );
}

// child.ts
export const ChildNode: FC = ({ roomId }) => {
    const socket = useContext(SocketContext);

    useEffect(() => {
        socket.on('my_event_response', () => {
            console.log("USER TRIGGERED EVENT")
        })
        return () => {
            socket.off('my_event_response')
        }
    }, [socket]);

    const handleClick = useCallback(() => {
        socket.emit('my_event', roomId)
    }, [socket, roomId]);

    return (
        <div>
            <button onClick={handleClick} />
        </div>
    );
}

当用户单击按钮触发事件时,服务器会正​​确捕获它并向所有用户发出响应,但发出原始事件的用户除外 (my_event)。我检查以确保我没有重新渲染我的组件并以某种方式错过了事件。有没有办法解决这个问题,让发出原始事件的用户也能得到响应?

使用 io.in(...).emit(...),因为 socket.to(...).emit(...) 会向房间内除发送者以外的所有人发送,而 io.in(...).emit(...) 会向包括发送者在内的所有人发送。