8

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

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

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

4

2 回答 2

8

我要指出的一件事是多路复用不是要支持多种消息格式,因为 webSocket 没有指定正文格式,所以它类似于 HTTP,您可以发送 JSON、图片、二进制...任何您想要的。

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

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

于 2016-11-08T07:38:14.923 回答
1

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

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

我更喜欢 Ruby,我可能会使用Plezi 框架编写我的应用程序(或者,至少是 websocket 后端)......但我不确定如果你决定伪多路复用,你提到的命名空间问题是否仍然会困扰你将文件分成块。

编辑

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

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

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

于 2015-07-21T04:00:46.410 回答