Пиша протокол за прехвърляне на гигабайти данни през мрежа с помощта на TCP, за да се опитам да се науча малко за програмирането на протоколи. Не съм сигурен как да проектирам този протокол за прехвърляне, за да прехвърлям данните по най-бързия и най-ефективен начин.
Използвам Qt на Windows.
В момента моят дизайн на моя протокол за приложение (частта за прехвърляне на данни) е както следва:
- Първо снимайте данните за вход.
- Запишете първия пакет данни (в гнездото) от 4 килобайта и след това изчакайте сървърът да потвърди, че е получил пакета.
- Когато сървърът потвърди получаването на пакета данни (като напише int "1"), запишете следващите 4 килобайта.
- Когато всички данни бъдат прехвърлени, изпратете md5sum на прехвърлените данни към сървъра.
- Ако сървърът потвърди отново с int 8, прехвърлянето на данни завършва.
В момента не мога да постигна скорости, по-високи от 166KB/сек на същия компютър при прехвърляне през 127.0.0.1. Опитвах се да прочета други дизайни на протоколи, но едва ли има документация за протоколи за пренос на данни, която човек може да напише за тяхното приложение.
Дизайнът на протокола, който публикувах, грешен ли е или страда от сериозни проблеми? Трябва ли протоколът да чака всеки пакет да бъде потвърден от сървъра или трябва да го пиша непрекъснато?