Apa cara terbaik untuk menjaga semua klien disinkronkan dengan server dan satu sama lain?
Saat ini, kami memiliki dua pendekatan dalam pikiran:
- Ketika klien mengirim sesuatu ke server, server segera mengirimkan pesan ke semua klien, yang langsung bereaksi.
- Memperkenalkan beberapa waktu tunda, di mana server mengirimkan pesan ke semua klien, dengan arahan, "bertindak berdasarkan hal ini pada waktunya
t
.
Pendekatan kedua sepertinya akan lebih memungkinkan klien dalam sinkronisasi yang lebih baik (karena melayani beberapa tingkat kelambatan); tapi saya bertanya-tanya apakah daya tanggap akan hilang ke tingkat yang terlalu tinggi (yaitu pengguna mengklik 'lompatan' dan ada kesenjangan yang nyata antara menekan tombol dan benar-benar melompat).
Ada juga kemungkinan memiliki klien menghitung posisi mereka sendiri (dan tidak menunggu server mengatakan "Anda telah melompat"); tetapi karena jeda yang tak terhindarkan, klien akan menjadi sangat tidak sinkron.
Lalu ada seluruh pertanyaan TCP vs UDP; karena kami ingin cepat, tetapi saya juga benci server mengatakan Anda berada di lokasi yang sama sekali berbeda dari yang Anda kira.
Dengan semua tuntutan yang saling bersaing ini, semuanya menjadi sangat tidak pasti bagaimana kita harus mendekati masalah ini. Manakah dari pendekatan ini (atau yang lainnya) yang terbaik untuk menjaga agar klien dan server tetap sinkron? Yang mana yang benar-benar digunakan dalam industri?
sumber
Berikut adalah beberapa tautan bagus yang mencakup banyak sekali jaringan game.
Dan ini adalah bagian pertama dari lebih banyak seri jejaring. http://gafferongames.com/networking-for-game-programmers/udp-vs-tcp/
Untuk sejarah. 'Kami minta maaf, tetapi sebagai mekanisme pencegahan spam, pengguna baru hanya dapat memposting maksimum satu hyperlink. Hasilkan 10 reputasi untuk mengirim lebih banyak hyperlink. ' Lihat saja situs webnya.
sumber
Karena Anda menyebutkan Klien dan Server, saya akan berasumsi bahwa Anda berbicara tentang arsitektur Client / Server di mana Server adalah otoritas pada keadaan semua objek.
Catatan: Alternatifnya adalah arsitektur Peer-To-Peer di mana pemilik objek adalah otoritas untuk objek itu.
Sudah ada metode yang telah terbukti dengan baik untuk menyinkronkan objek bergerak menggunakan arsitektur Client-Server. Itu disebut Dead Reckoning. .
Cara yang baik untuk mengimplementasikan ini dalam game adalah seperti ini:
sumber