【问题标题】:SocketIO can't send new message until first will be deliveredSocketIO 无法发送新消息,直到第一个被传递
【发布时间】:2013-12-31 07:32:41
【问题描述】:

情况
用户已发送图像,图像后,他将发送消息。当第二个用户没有收到图片时,不会发送消息。

如何正常发送消息,就像在正常聊天中一样? 我发现,node.js 有“异步”模块,但是如何将它与 Socket IO 一起使用?

【问题讨论】:

    标签: node.js socket.io


    【解决方案1】:

    您可以简单地传递队列中的每条消息。因此,每条消息都必须等待第一个发送完后才能传递给下一个。

    虽然,在你的情况下。我认为等待发送图片是不明智的 - 这会使您的聊天无响应。

    而是使用简单的文本image 消息。一旦你收到这个,在聊天中放置一个占位符,当你收到它时你将加载图像(同时显示一个加载器)。这将允许您继续聊天,而不会被漫长的 IO 进程阻塞以完成。

    【讨论】:

    • 我没听懂你的意思。如果我发送image 文本,那么我也需要发送图像,但是我该怎么做,当我发送图像时它会冻结 IO。你能解释更多吗?
    • 我的意思是发送一个事件,告诉一个图像将被下载。 (或在接收图像时,在图像开始上传时立即向最终用户发送事件)
    【解决方案2】:

    Socket.IO 使用单个 WebSocket 连接,一次只允许发送一个项目。您应该考虑在单独的 WebSocket 上或通过其他方法带外发送该图像。

    我有类似的情况,我必须流式传输连续的二进制数据和信令消息。为此,我使用BinaryJS 设置在两端镜像的逻辑流。一个流用于二进制流,另一个用于 RPC。不幸的是,Socket.IO 不能使用任意流。唯一似乎可以工作的 RPC 库是rpc-stream。 RPC 功能不如 Socket.IO 强大(尤其是在处理回调时),但它确实运行良好。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-06-20
      • 2020-01-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-06-14
      相关资源
      最近更新 更多