Он еще не существовал, когда был задан вопрос. Но теперь это так: miniz - общественное достояние, один файл C, явно вдохновленный подобными stb_image.
Пока два сообщения были отправлены по одному и тому же TCP-соединению , порядок будет сохраняться. Если между одной парой процессов открыто несколько соединений, у вас могут быть проблемы.
Что касается Twisted или любой другой асинхронной системы событий: я ожидаю, что вы получите сообщения dataReceived
в том порядке, в котором получены байты. Однако, если вы начнете перекладывать работу на отложенные вызовы, вы можете, эм ... "исказить" свой поток управления до неузнаваемости.
TCP ориентирован на соединение и предлагает своим клиентам упорядоченную доставку. Конечно, это относится к уровню соединения: отдельные соединения независимы.
Следует отметить, что обычно мы ссылаемся на «потоки TCP» и «сообщения UDP».
Какую бы клиентскую библиотеку вы ни использовали (например, Twisted), лежащую в основе TCP-соединение не зависит от этого. TCP доставит «протокольные сообщения» вашему клиенту. Под «протокольным сообщением» я, конечно же, имею в виду протокол, который вы используете на уровне TCP.
Также обратите внимание, что операции ввода-вывода являются асинхронными по своей природе и очень зависят от нагрузки системы + также усугубляют задержки и потери сети, на которые вы не можете полагаться. о порядке сообщений между TCP-соединениями.
TCP «гарантирует», что получатель получит восстановленный поток байтов в том виде, в каком он был первоначально отправлен отправителем. Однако между конечными точками отправки / получения TCP (т. Е. Физической сетью) данные могут приниматься не по порядку, они могут быть фрагментированы, могут быть повреждены и даже могут быть потеряны. TCP учитывает эти проблемы, используя механизм квитирования, который вызывает повторную передачу плохих пакетов. Стек TCP на приемнике размещает эти пакеты в том порядке, в котором они были переданы, так что при чтении из сокета TCP вы получаете данные в том виде, в каком они были изначально отправлены.
Когда вы вызываете doRead в Twisted, данные считываются из сокета до размера буфера. Эти данные могут представлять одно сообщение, частичное сообщение или несколько сообщений.
TCP - это поток, UDP - это сообщение. Вы путаете термины. Для TCP это правда, что поток будет прибывать в том же порядке, в котором он был отправлен. В TCP нет сообщений distict, байты появляются по мере их поступления, интерпретация их как сообщений зависит от вас.