Многие небольшие пакеты в порядке. На самом деле, если вы беспокоитесь о накладных расходах TCP, просто вставьтеbufferstream
до 1500 символов (или каковы бы ни были ваши MTU TCP, лучше всего запрашивать его динамически), и решите проблему в одном месте. Это сэкономит вам ~ 40 байт за каждый дополнительный пакет, который вы в противном случае создали бы.
Тем не менее, все-таки лучше отправлять меньше данных, и в этом вам помогают создание более крупных объектов. Конечно, отправлять меньше, "UID:10|1|2|3
чем отправлять UID:10;x:1UID:10;y:2UID:10;z:3
. На самом деле, на этом этапе вам также не следует изобретать велосипед, используйте библиотеку типа protobuf, которая может уменьшить такие данные до 10-байтовой строки или меньше.
Единственное, что вы не должны забывать, это вставить Flush
команды в свой поток в соответствующих местах, потому что, как только вы прекратите добавлять данные в свой поток, он может ждать бесконечно, прежде чем отправлять что-либо. Действительно проблематично, когда ваш клиент ожидает эти данные, и ваш сервер не отправит ничего нового, пока клиент не отправит следующую команду.
Потеря посылки - это то, что вы можете повлиять здесь, незначительно. Каждый отправленный вами байт может быть поврежден, и TCP автоматически запросит повторную передачу. Меньшие пакеты означают меньшую вероятность повреждения каждого отдельного пакета, но поскольку они увеличивают накладные расходы, вы отправляете еще больше байтов, еще больше увеличивая шансы потерянного пакета. Если пакет потерян, TCP будет буферизовать все последующие данные до тех пор, пока отсутствующий пакет не будет повторно отправлен и получен. Это приводит к большой задержке (пинг). Хотя общая потеря пропускной способности из-за потери пакетов может быть незначительной, более высокий пинг нежелателен для игр.
Итог: отправляйте как можно меньше данных, отправляйте большие пакеты и не пишите свои собственные низкоуровневые методы для этого, но полагайтесь на хорошо известные библиотеки и методы, такие как bufferstream
и protobuf, для обработки тяжелой работы.