如何通过相同的流发送不同编码的数据?

时间:2016-07-27 03:08:38

标签: javascript android node.js tcp stream

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

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

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

1 个答案:

答案 0 :(得分:1)

无论如何,你都必须采用某种协议。如果你想在不编码的情况下使用二进制文件,你必须选择(或创建)支持它的协议。

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

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