【问题标题】:Socket can only communicate with one socket.io processSocket 只能与一个 socket.io 进程通信
【发布时间】:2015-09-19 13:36:52
【问题描述】:

您好,我正在尝试使用 nodejs 和 socket.io 制作多人游戏。 我正在使用带有集群和 socket.io-redis 的多进程 socket.io。如果你想广播消息、发射等,它工作得很好。

但如果我想在我的代码中添加一些复杂性,问题就会开始出现。我希望我的游戏有匹配功能。

假设这种情况: 服务器找到 2 个想要玩的用户并开始游戏。 用户在同一台​​机器上的不同进程上。 问题是客户端只能与第一个进入的进程进行通信。 所以我认为有 3 种可能的解决方案:

  1. 与同一进程中的用户进行匹配 --- 不好。
  2. 在进程之间创建一个 ipc 方法,以便具有目标客户端的那个可以将客户端的答案广播到正确的进程 --- 太复杂,不确定是否能解决所有问题。
  3. 将客户端的 socket.io 进程更改为新进程,而用户不会注意到它 --- 不确定这是否可能。

我在这里缺少什么吗?还有其他我想不到的解决方案吗?

任何帮助表示赞赏!

【问题讨论】:

    标签: node.js socket.io socket.io-redis


    【解决方案1】:

    使用 socket.io-redis 的用户即使在不同的服务器/进程中也可以进行通信,这就是它存在的原因。

    【讨论】:

    • 你明白我的问题了吗?
    • 显然不是,但您的问题似乎说错了。使用 socket.io 的用户可以在相同或不同的进程中进行通信。
    • 我想从进程 B 监听一个来自进程 A 上的用户的事件。
    • SocketIO 客户端A(网页)发送一条消息io.emit('playing', {to: 'user2'}, func...,服务器将获得该消息socket.on('playing'...,然后将消息(感谢socket.io-redis)发送给其他用户。你想要的是当他们玩游戏时,你想让他们加入那个游戏的房间,这样你就会向房间发出消息。那怎么办?
    • 我不想在用户之间进行交流。我希望进程 A 中的用户 A 发送一条最终到达进程 B 的消息,然后服务器决定如何处理该消息。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-01-19
    • 2016-08-06
    • 2020-07-06
    • 2019-06-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多