我想把图片和文本从android客户端发送到Node.js TCP服务器。您知道Node.js中'data'
回调中data
的大小是不可预测的。
我的问题是服务器如何分离图像和文本?我认为这是不可能的,所以我会划分流(制作另一个服务器)或使用base64编码图像…但是,
如果你有任何意见,欢迎!
不管怎样,您都必须包含某种协议。如果你想在不编码的情况下按原样使用二进制,你必须选择(或创建)一个支持它的协议。
您可以使用类似WebSockets的东西,但这只能解决框架问题。您仍然需要定义自己的消息格式(因为IIRC WebSockets在其协议中不提供字段供最终用户使用)。因此,考虑到这一点,你还不如自己动手做。
一个简单的解决方案可能是创建一个TLV(类型长度值)协议。这种协议有一个类型字段,后面是一个长度字段,然后是一个[长度字段值]字节长的数据字段。使类型和长度字段的固定大小足够大,以支持您的用例。例如,类型字段可能是一个单字节(允许256种消息类型),长度字段为4个字节(允许单个消息包含最多4GB的数据)。解析这些消息很简单:读取5个字节,获得类型和长度,然后将5个字节中的后4个字节解析为无符号32位整数,然后读取那么多字节。您可以对数据进行缓冲或流式传输,无论您需要什么。