Closed bunnyi116 closed 8 months ago
这个实现对 #732 建议在客户端中需要特殊支持,客户端适配器接口需要编写一个专门用于上传文件的方法,然后适配器进行重写,比如:WebSocket适配器就重写这个方法,然后与服务端建立传输文件的新连接发送。
服务端只需要对客户端文件传输通道建立进行管理就行
使用额外的 websocket 上传和使用 http 上传没有区别
现在解决方案:在 ws adapter
中开放多媒体上传的 HTTP 接口,无需单独开启 http adapter
。发布于 2.10.0
在WebSocket 文档 (多媒体内容上传)(#474)中得知websocket 的文件上传涉及到 socket 阻塞还未实现。
考虑到WebSocket阻塞当前线程的正常收发消息的问题,可以使用新的WebSocket连接进行上传文件,这样就不会阻塞当前的WebSocket。
实现
主 WebSocket 客户端在准备上传文件,那么使用当前的会话信息与 WebSocket 服务端建立起上传文件专属通道,该通道只进行文件数据的传输,参考 (创建连接)文档,可以添加一个 file 或 stream 类型,该通道用于文件数据传输,
传输格式就与Http数据格式一样就行,请求正文头部内容携带上传文件的信息Http多媒体内容上传,类型,文件名,文件总长度,然后先发送,之后文件使用文件流进行上传,然后客户端根据文件长度接收文件Stream,上传结束后正常响应信息描述是否成功,然后关闭该通道。这样就不存在阻塞主ws客户端的正常收发了