2012-05-29 15 views
14

SignalR'yi kullanarak, Hub'larımın en iyi yolunun aşağıdaki senaryo altında olup olmadığını merak ediyorum: Bir web casino uygulamasına sahip olduğumu (sadece eğlence için) ve üç oyunu var, Poker , Blackjack ve Yuvaları. Poker ve Blackjack'in her ikisi de çok oyunculu, dolayısıyla sohbet özelliği var ve Yuvalar yok. Tamam, bunu desteklemek için Hub'larımı aşağıdaki şekilde kurmayı düşünüyordum.SignalR'de Çoklu Merkezler (Tasarım)

BaseHub

PokerHub (Poker, Blackjack ve Yuvaları yaygındır bağlantı şeyler kolları): BaseHub (Blackjack oyun kolları)

: BaseHub

BlackjackHub (Poker oyun kolları) SlotsHub: BaseHub

ChatHub (kolları sohbet özellikleri)

ben inci oldu (Yuvaları oyun kolları) Bu web uygulamasının Poker sayfasının PokerHub'a bağlanması ve ChatHub ile Blackjack sayfasının birbirine benzemesi, benzer bir şey yapacaktır. Yuvalar sayfası açıkça sadece SlotsHub'a bağlanırdı.

Şimdilik, emin olmadığım şeyler şunlardır: Poker/Blackjack sayfaları hem PokerHub/BlackjackHub'a hem de ChatHub'a bağlanırsa ya da bir şekilde PokerHub/BlackjackHub'a bağlanabilmem ve sohbet yetkisi verebilmenin bir yolu var mı? Sohbet merkezi özellikleri Bu durumda bir arayüz IHasChat veya bunun gibi bir şey gibi oluşturabilirim. Her iki durumda da ChatHub BaseHub'u da uzatmalı mı? Şu anda BaseHub IConnected, IDisconnect'i uygular ve temel Grup işlevlerini (JoinGroup, LeaveGroup) de işler. Ayrıca, BaseHub paylaşılan bir örnek (singleton) olmalıdır?

Son olarak, eğer tamamen gideceğimi düşünüyorsanız, lütfen bana bildirin. Bu benim ilk SignalR projem ve bunun bir uzman olmadığımı biliyorum. Ayrıca, aslında burada birkaç soru olduğunu biliyorum. Herhangi birine veya hepsine cevap verebilirseniz, her iki şekilde de gerçekten takdir ediyorum.

burada hiçbir şey gider ... Bu artık cevap gerek olmayabilir bu yüzden, bir süre için burada olmuştur ama, Tom

+0

ben farklı yapılarda birden fazla hub olması gerekir çok benzer bir durumun içine çalıştırdığınız . – kzfabi

cevap

0

teşekkür ederim.

SignalR'a yeni geldim, bu yüzden tasarımınızın performansını nasıl etkileyeceğinden biraz emin değilim.

abstract BaseHub : Hub; 
abstract MultiplayerHub : BaseHub; // (Handles chat and other MP necessities) 
BlackJackHub : MultiplayerHub; 
PokerHub : MultiplayerHub; 
SlotsHub : BaseHub; 
Ben bu tasarım tekrar SignalR ile herhangi bir soruna neden ama neden herhangi nedenden düşünemiyorum

, ben gerekmez: bu bir sorun değilse, böyle bir nesne modelini düşünebilirsiniz devam etmek için çok fazla deneyim.

+0

Bu şekilde, yalnızca sohbet mantığını paylaşarak her bir merkezin bir sohbete sahip olmasını sağlayabilirsiniz, ancak @Tom'un Sohbet'i tüm hub'larla paylaşmak istediğini düşünüyorum ve bu yüzden bir ChatHub hakkında konuşuyor. – kzfabi

5

SignalR sunucusuna yalnızca bir bağlantı olduğu için istediğiniz kadar hub kullanabilirsiniz. Hublar bir RPC uygulamasıdır ve hepsi aynı bağlantıyı paylaşır. göbek js istemci içinde bir ad alanıdır

$.connection.hub.start() 

: The Wiki page on hubs for the js client bir bağlantı şöyle gösterir.

0

Pratik olarak, sunucuda birden fazla hub sınıfına sahip olmanız gerekmez. Birden fazla internet bağlantısına ihtiyacınız var gibi. Sörf Oyunları, Sosyal Medya için Başka ve farklı bir şey için üçüncü.

Sunucu tarafında tek bir Hub Sınıfı oluşturun.

Yapmanız gereken, JS kullanan farklı İstemciler var.

Örneğin web sitemde iki şeyim vardı. Canlı sohbet ve çevrimdışı bildirimler. Chat.aspx için Hub olarak hareket eden "chat" adlı bir değişkenim vardı. Diğer tüm sayfalar için NotificationHub adında bir değişkenim vardı.

Bu arada

var pocker = $.connection.hub; 
var blackJack = $.connection.hub; 
var other = $.connection.hub; 

Aşağıdaki sunucu yöntemini kimin aradığını belirlemek istiyorsanız Ayrıca, sorgu dizesi parametresi ekleyebilirsiniz ilgili yöntemler çağırmak gibi bir şey yapabilirsiniz. güncel sürümü ile mümkün görünmemektedir: (farklı Bağlantı Zaman Aşımı örneğin) ama benim özel bir durumdur (v1.1.0)

pocker.connection.qs = "type=pocker"; 
+1

Ancak, tek bir Hub sınıfında düzinelerce yönteme sahip olacaksınız, bu Tanrı nesnesi gibi görünüyor, anti –