2016-07-27 1 views
0

Я хочу отправлять изображения и тексты от клиента android на Node.js TCP-сервер. Знаете, что размер data в 'data' callback в Node.js непредсказуем.Как отправлять разные кодированные данные через один поток?

Мой вопрос Как сервер может отделять изображения и тексты? Я думаю, что это невозможно, поэтому я буду делить поток (сделать другой сервер) или кодировать изображение, используя base64 ... но,

Если у вас есть мнение, добро пожаловать!

ответ

1

Независимо от того, вам придется включить какой-то протокол. Если вы хотите использовать двоичный файл as-is без его кодировки, вам придется выбрать (или создать) протокол, который поддерживает это.

Вы можете использовать что-то вроде WebSockets, но это решает проблему кадрирования. Вам по-прежнему необходимо определить свой собственный формат сообщений (поскольку IIRC WebSockets не предоставляет поля в своем протоколе для использования конечным пользователем). Таким образом, имея в виду, вы можете просто сделать DIY.

Одним из простых решений может быть создание протокола TLV (Тип-Длина-значение). Этот тип протокола - это тот, где у вас есть поле типа, за которым следует поле длины, а затем поле данных, длина которого - [длина поля]. Сделайте фиксированные размеры полей типа и длины достаточно большими, чтобы поддерживать ваш прецедент. В качестве примера у вас может быть поле типа байта (допускающего 256 типов сообщений), а поле длины должно быть 4 байта (позволяющее одному сообщению содержать до 4 ГБ данных). Разбор этих сообщений прост: прочитайте 5 байтов, которые доставят вам тип и длину, затем проанализируют последние 4 из 5 байтов как 32-битное целое без знака, а затем прочитайте, что много байтов. Вы можете буферизовать данные или передавать их, независимо от ваших потребностей.

+0

TLV ... очень полезно подсказка! Спасибо :) –

+0

Но я хотел минимизировать обработку сервера, потому что сервер должен работать как прокси как можно больше. Мне было просто интересно ... в любом случае, спасибо! –

+0

Я думаю, что протоколы в стиле TLV примерно такие же минимальные, как вы можете получить. Это просто чтение 5 байтов, затем n байтов, затем повторение. – mscdex

Смежные вопросы