Bahasa: C ++
Pertanyaan saya adalah sebagai berikut: Saya ingin tahu apa yang akan menjadi yang terbaik atau setidaknya cara yang baik untuk mengemas dan mengirim data dari klien ke server dan sebaliknya. Akan ada beberapa data yang menyusun satu paket. Sebuah paket akan memiliki "id", yang mendefinisikan untuk apa itu, kemudian data dalam urutan yang telah ditentukan untuk "tindakan" yang sesuai dengan paket tersebut.
Untuk sistem yang kurang bergantung pada kinerja, saya hanya akan mengirim string, yang akan dipisahkan oleh spasi, menjadi mereka data "aksi" dan "kata" pertama pengidentifikasi paket dan hanya rantai jika pernyataan memeriksa ketika ada kecocokan .
Sekarang untuk sistem yang lebih kritis, apa yang saya pikir sejauh ini adalah sesuatu seperti ini:
Buat string dengan id paket dan data, dan kirimkan. Kemudian, untuk membongkar, saya bisa mengekstrak integer pertama dalam string, dan dengan memiliki array penangan paket, dengan indeks yang sesuai dengan paket id yang mereka tangani, dan hanya melakukan sesuatu seperti packetHandlers [packetID] .Process (packageData).
Apa pendapat Anda tentang itu, ada saran? sangat dihargai!
sumber
Mengapa menggunakan dua skema pengkodean yang berbeda? Cukup gunakan yang kedua untuk setiap sistem. Sederhana saja.
Pertimbangkan untuk menggunakan kompresi delta. Yaitu mengirim satu nilai penuh dan setelah itu hanya hal-hal yang berubah. Setelah beberapa iterasi permainan mengirim nilai penuh lagi.
Encodig lain yang dapat Anda pertimbangkan adalah Base 128 Varint. Google Protobuf menggunakannya. Lihatlah halaman "Pengkodean" dari panduan pengembang mereka: Pengodean Protokol Buffer dapat menghemat beberapa byte.
sumber
Apa yang mungkin menjadi contoh dari data yang Anda kirim? Saya tidak melihat alasan untuk melakukan sesuatu yang terlalu mewah. Setelah data dimuat penuh ke buffer penerima, periksa dulu
int
berdasarkan nilainya, Anda kemudian tahu bagaimana memproses sisa data.Jadi paket yang memiliki empat bagian Data
id
,val1
,val2
, danval2
mungkin terlihat seperti ini:Saat Anda membaca byte pertama (yang Anda tahu akan selalu ada di sana) Anda memutuskan bagaimana memproses set data berikutnya. Jika kata pertama (id) adalah
00000001
Anda tahu ada tiga kata lagi yang mengikuti, dan itu adalah akhir dari paket. Untuk melanjutkan contoh, Anda mungkin memiliki id =00000010
dan spesifikasi Anda memberitahu Anda bahwa untuk nilai id 2, Anda prosesfloat
,float
,float
agar, yang mungkin menentukan posisi pemain di ruang dunia.Anggap itu sebagai menulis sistem file biner Anda sendiri, Anda memiliki nilai header, yang menggambarkan sisa data, di mana ia berada (posisi apa) dan apa jenis data untuk memperlakukannya.
sumber