【问题标题】:Multiplexing channels in a websocketwebsocket中的多路复用通道
【发布时间】:2015-10-09 14:46:35
【问题描述】:

我正在开发一个需要实时通信和文件上传的应用程序。我最好希望通过具有多路复用通道的单个连接来完成。我看到 websocket 协议有一个扩展以允许多路复用,但我认为还没有浏览器支持,如果有的话。我不知道如何使用它。

我想用java开发服务器。 socketio 的节点服务器在命名空间方面有一个奇怪的错误,并且它的 java 服务器不能与命名空间一起正常工作。

我想要一个简单的多路复用系统,以便我可以同时发送一些 json 和二进制文件。是否存在为此而存在的东西,或者我是否需要自己创建一些东西,如果是的话......我从哪里开始?

【问题讨论】:

  • 查看extensions registry,目前没有任何注册的连接通道扩展。
  • 哦,看起来像是@Myst 的草稿

标签: java websocket socket.io multiplexing


【解决方案1】:

我要指出的一点是Multiplexing并不是支持多种消息格式,因为webSocket没有指定body格式,所以它类似于HTTP,可以发送JSON,图片,二进制...任何你想要的。

多路复用是关于如何重用一个连接通道来支持多个通信(电信中类似的概念),这通常用于多个模块需要websocket通信但只有一个连接的场景是允许的(如 SocketJS),那么我们可以使用多路复用技术来拯救世界。

更多信息请看: https://github.com/sockjs/websocket-multiplex https://www.rabbitmq.com/blog/2012/02/23/how-to-compose-apps-using-websockets/

【讨论】:

    【解决方案2】:

    客户端有预制的 Javascript 库,包括这个:WebSocketFileTransfer

    至于服务器端解决方案,我不太了解。我可能会选择两个 websocket 连接或使用 HTML5 javascript 将文件分成更小的 websocket 消息 - 这将允许伪多路复用,因为可以在文件块之间发送不同的 websocket 消息。

    我更喜欢 Ruby,我可能会使用 Plezi framework...通过将文件分成块来进行伪多路复用。

    编辑

    我只是有一个想法,除非您将发送的文件分成较小的块,然后再重新组合,否则很难就上传过程提供反馈...

    在文件传输完成之前,您的 websocket 服务器(除非您自己编写)不会让您知道传入的数据,因此您无法更新客户端收到的数据量。此外,如果连接断开,分割文件可能会让您重新开始上传。

    考虑到这一点,我会选择单个连接并将每个文件划分为多个块(可能每 100Kb 左右一个块,具体取决于您的服务器和预期用途)。

    【讨论】:

    • 我很想只使用多个 websocket 连接,一个不断连接的 json 消息用于控制,控制连接可以发送一个端口号来动态连接和上传文件。明智地扩展应该不是问题,我不打算在单个实例上建立大量连接。
    • @B3NW 在考虑将文件作为一个 websocket 消息发送时可能涉及的限制后,我编辑了我的答案。
    • 谢谢@Myst。是的,我意识到我需要这样做。信号是延迟敏感的,因为它将用于控制 webrtc 流,所以除非有一些很好的方法可以在不增加 很多 延迟的情况下多路复用通道,否则我将使用单独的连接。尽管如此,还是感谢您的帮助!
    猜你喜欢
    • 2013-10-12
    • 2014-07-27
    • 1970-01-01
    • 2019-01-12
    • 1970-01-01
    • 2017-06-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多