Banyak paket kecil baik-baik saja. Bahkan, jika Anda khawatir tentang overhead TCP, cukup masukkan bufferstream
yang mengumpulkan hingga 1500 karakter (atau apa pun MTU TCP Anda, paling baik untuk memintanya secara dinamis), dan atasi masalah di satu tempat. Melakukan hal itu membuat Anda kekurangan ~ 40 byte untuk setiap paket tambahan yang seharusnya Anda buat.
Yang mengatakan, masih lebih baik untuk mengirim lebih sedikit data, dan membangun objek yang lebih besar membantu di sana. Tentu saja lebih kecil untuk dikirim "UID:10|1|2|3
daripada mengirim UID:10;x:1UID:10;y:2UID:10;z:3
. Bahkan, juga pada titik ini Anda tidak harus menciptakan kembali roda, gunakan perpustakaan seperti protobuf yang dapat mengurangi data seperti itu ke string 10 byte atau kurang.
Satu-satunya hal yang tidak boleh Anda lupakan adalah memasukkan Flush
perintah pada stream Anda di lokasi yang relevan, karena begitu Anda berhenti menambahkan data ke stream Anda, itu mungkin menunggu tanpa batas sebelum mengirim apa pun. Benar-benar bermasalah ketika klien Anda menunggu data itu, dan server Anda tidak akan mengirim sesuatu yang baru sampai klien mengirim perintah berikutnya.
Paket loss adalah sesuatu yang bisa Anda pengaruhi di sini, secara marginal. Setiap byte yang Anda kirim berpotensi rusak, dan TCP akan secara otomatis meminta pengiriman ulang. Paket yang lebih kecil berarti peluang yang lebih rendah untuk setiap paket yang rusak, tetapi karena mereka bertambah pada biaya overhead, Anda mengirim lebih banyak byte, meningkatkan kemungkinan paket yang hilang lebih banyak. Ketika sebuah paket hilang, TCP akan melakukan buffer semua data yang berhasil sampai paket yang hilang dikirim ulang dan diterima. Ini menghasilkan penundaan besar (ping). Sementara total kerugian dalam bandwidth karena paket loss bisa diabaikan, ping yang lebih tinggi tidak diinginkan untuk gim.
Intinya: Kirim sesedikit mungkin data, kirim paket besar, dan jangan menulis metode tingkat rendah Anda sendiri untuk melakukannya, tetapi mengandalkan perpustakaan terkenal dan metode seperti bufferstream
dan protobuf untuk menangani angkat berat.