Oyun oynayan isteğe bağlı TCP soket ağa bağlı istemciler için oyunları yöneten genel bir oyun sunucusu üzerinde çalışıyorum. Çalışan bir koli bandı ile birlikte kesmek bir 'tasarım' var, ama hem kırılgan hem de esnek görünmüyor. Sağlam ve esnek istemci / sunucu iletişiminin nasıl yazılacağı konusunda köklü bir kalıp var mı? (Değilse, aşağıda sahip olduğum şeyi nasıl geliştirirdiniz?)
Kabaca ben var:
- Bir oyun kurarken, sunucu bir istemciden senkron istekleri ve sunucudan gelen yanıtları işleyen her oyuncu soketi için bir iş parçacığına sahiptir.
- Bununla birlikte, oyun devam ettikten sonra, bir uyku haricindeki tüm evreler ve bu evre hareketleri hakkında iletişim kurarak tüm oyuncular arasında birer birer döngü yapar (tersine çevrilmiş istek-yanıtında).
İşte şu anda sahip olduğum şema; daha büyük / okunabilir versiyon için tıklayınız veya 66kB PDF .
sorunlar:
- Oyuncuların tam olarak doğru mesajla cevap vermelerini gerektirir. (Her oyuncunun rastgele saçmalıklarla yanıt vermesine izin verebileceğimi ve sadece geçerli bir hamle yaptıktan sonra devam edebileceğini düşünüyorum.)
- Oyuncuların sırası gelmedikçe sunucuyla konuşmasına izin vermez. (Sunucunun diğer oyuncular hakkında güncelleme göndermesini sağlayabilirim, ancak eşzamansız bir isteği işleme koyamıyordum.)
Son gereksinimler:
Performans çok önemli değil. Bu çoğunlukla gerçek zamanlı olmayan oyunlar için ve çoğunlukla yapay zekaları seğirme insanlarına değil, birbirine çarpmak için kullanılır.
Oyun her zaman sıra tabanlı olacaktır (çok yüksek çözünürlükte bile olsa). Diğer tüm oyuncular bir tur atmadan önce her oyuncu bir hamle alır.
Bir fark yaratırsa, sunucunun uygulanması Ruby'de olur.