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