使用 websockets 将文件从 android 客户端上传到 nodejs

Upload file from android client to nodejs using websockets

我需要有多个(5~100)android个客户端拍照并同时通过本地网络将它们发送到nodejs服务器,每张图片的大小大约为2~10mb。因为我有很多客户端同时上传文件,我需要这些操作尽可能快,所以 websockets 似乎是一个好主意,因为它们的开销比纯 HTTP 小。

我有点不知道如何从 android 客户端发送块上传以及如何在 nodejs 服务器中重建这些块(我正在使用 socket.io)。我找到了一些示例,但它们似乎在单个块中接收整个文件,这对于像我期望的大文件来说没有意义。即使是一些抽象的解释或伪代码,我也会很感激。

根据RFC 6455, one WebSocket binary message can consist of either (1) one binary frame or (2) one binary frame and subsequent continuation frames (see 5.4. Fragmentation了解详情)。所以,当你从Android发送大的二进制数据时,将数据分成一个二进制帧和多个连续帧,一个一个地发送到服务器。服务器会自动收集分割后的帧并构造一个二进制消息。

为此,您必须使用 WebSocket 客户端库,该库提供手动发送连续帧的方法。 nv-websocket-client(我的作品)就是这样一个库。

以下来自 nv-websocket-client 的 README 的代码是发送文本消息 ("How are you?") 的示例,该文本消息由一个文本框架和两个续帧组成。您可以对二进制消息执行相同的操作。

ws.sendText("How ", false)
  .sendContinuation("are ")
  .sendContinuation("you?", true);