B3N*_*3NW 6 java websocket multiplexing socket.io
我正在开发一个需要实时通信和文件上传的应用程序。我最好是通过多路复用通道的单个连接来完成。我看到websocket协议有一个扩展,以允许多路复用,但是我认为还没有浏览器支持(如果有)。我不知道如何使用它。
我想用Java开发服务器。用于socketio的节点服务器在名称空间上出现了一个奇怪的错误,而Java服务器在名称空间上无法正常工作。
我想要一个简单的多路复用系统,以便可以同时发送一些json和二进制文件。为此是否存在某些东西,或者我需要自己创建一些东西,如果有的话..我应该从哪里开始?
我想指出的一件事是,多路复用并不是要支持多种消息格式,因为webSocket并未指定主体格式,所以它类似于HTTP,您可以发送JSON,图片,二进制文件……任何您想要的东西。
多路复用是关于如何重用一个连接通道来支持多种通信(电信中的类似概念),这通常用于多个模块需要websocket通信但只允许一个连接的情况下(例如SocketJS),然后我们可以运用Multiplexing技术来拯救世界。
更多信息请参阅:https : //github.com/sockjs/websocket-multiplex https://www.rabbitmq.com/blog/2012/02/23/how-to-compose-apps-using-websockets/
客户端有预制的 Javascript 库,其中包括: WebSocketFileTransfer。
至于服务器端解决方案,我了解较少。我可能会选择两个 websocket 连接或使用 HTML5 javascript 将文件分成更小的 websocket 消息 - 这将允许伪复用,因为可以在文件块之间发送不同的 websocket 消息。
我更喜欢 Ruby,我可能会使用Plezi 框架编写我的应用程序(或者至少是 websocket 后端)...但我不确定如果您决定通过伪多路复用,您提到的命名空间问题是否仍然会困扰您将文件分成块。
编辑
我只是有一个想法,除非您将发送的文件分成稍后重新组装的较小块,否则很难提供有关上传过程的反馈......
在文件传输完成之前,您的 websocket 服务器(除非您自己编写)不会让您知道传入的数据,因此您无法向客户端更新收到的数据量。此外,如果连接断开,分割文件可能会让您重新启动上传。
考虑到这一点,我会选择单个连接并将每个文件划分为多个块(可能每 100Kb 左右一个块,具体取决于您的服务器和预期用途)。