【问题标题】:How to send different-encoded data through same stream?如何通过同一流发送不同编码的数据?
【发布时间】:2016-11-30 21:05:37
【问题描述】:

我想将图像和文本从 android 客户端发送到 Node.js TCP 服务器。 你知道 Node.js 中 'data' 回调中 data 的大小是不可预测的。

我的问题是服务器如何分离图像和文本? 我认为这是不可能的,所以我将分流(制作另一台服务器)或 使用 base64 编码图像...但是,

如果您有任何意见,欢迎!

【问题讨论】:

    标签: javascript android node.js tcp stream


    【解决方案1】:

    无论如何,您都必须加入某种协议。如果您想按原样使用二进制文件而不对其进行编码,则必须选择(或创建)一个支持它的协议。

    您可以使用 WebSockets 之类的东西,但这只能解决框架问题。您仍然需要定义自己的消息格式(因为 IIRC WebSockets 未在其协议中提供字段供最终用户使用)。所以考虑到这一点,你也可以自己动手做。

    一个简单的解决方案可能是创建 TLV(类型-长度-值)协议。这种协议是一个类型字段,后跟一个长度字段,然后是一个 [长度字段值] 字节长的数据字段。使类型和长度字段的固定大小足够大以支持您的用例。例如,您可能将 type 字段设置为单个字节(允许 256 种消息类型),并将 length 字段设置为 4 个字节(允许单个消息包含多达 4GB 的数据)。解析这些消息很简单:读取 5 个字节,获取类型和长度,然后将 5 个字节中的后 4 个解析为无符号 32 位整数,然后读取那么多字节。无论您需要什么,您都可以缓冲或流式传输数据。

    【讨论】:

    • TLV.. 这是非常有用的提示!谢谢:)
    • 但我想尽量减少服务器处理,因为服务器必须尽可能像代理一样工作。我只是想知道...无论如何,谢谢!
    • 我认为 TLV 风格的协议是尽可能少的。它只是读取 5 个字节,然后是 n 个字节,然后重复。
    猜你喜欢
    • 2016-09-16
    • 1970-01-01
    • 1970-01-01
    • 2020-03-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多