2012-03-14 6 views
11

'u kullanarak bir WebSocket sunucusu nasıl oluşturulur? WebSocket Communication'a ihtiyaç duyan bir uygulama oluşturuyorum. Tek ihtiyacım olan şey, iş parçacığı olanaklarına sahip basit bir WebSocketServer. SuperWebSocket'ın ihtiyaçlarını karşılayabildiğini buldum. Ancak, C# ile olan yakınlığım, kodu anlamada sorun yaratıyor. Herkes bana gösterebilir Nasıl basit bir sunucu nasıl oluşturulur? Tarayıcı/WebPage'den gönderilen mesajı yankılanmalıdır. İyi bir yön gösteren kişiye çok minnettar olacağım || Kullanım örnek kodlarından anlayamadım.SuperWebSocket

DÜZENLEME: Bu, elde etmek istediğim şey. enter image description here

Herhangi biri kesin bir çözüm önerdiğinde, bunu benimseyeceğim.

EDIT: "Robar" zaten doğrudan yanıt verdi. Bu, nasıl kullanılır?

this.NewSessionConnected += new SessionEventHandler<WebSocketSession>(this.WebSocketServer_NewSessionConnected); 

this.NewDataReceived += new SessionEventHandler<WebSocketSession, byte[]>(this.WebSocketServer_NewDataReceived); 

this.NewMessageReceived += new SessionEventHandler<WebSocketSession, string>(this.WebSocketServer_NewMessageReceived); 

this.SessionClosed += new SessionEventHandler<WebSocketSession, SuperSocket.SocketBase.CloseReason>(this.WebSocketServer_SessionClosed); 
+0

Sadece bu superwebsocket'in zaten çok satırlı olduğunu belirtmek istedim. Bir oturum başka bir oturumdan bağımsızdır. – Rushino

cevap

0
class Program 
{ 
    static void Main(string[] args) 
    { 
     var listener = new TcpListener(IPAddress.Loopback, 8181); 
     listener.Start(); 
     using (var client = listener.AcceptTcpClient()) 
     using (var stream = client.GetStream()) 
     using (var reader = new StreamReader(stream)) 
     using (var writer = new StreamWriter(stream)) 
     { 
      writer.WriteLine("HTTP/1.1 101 Web Socket Protocol Handshake"); 
      writer.WriteLine("Upgrade: WebSocket"); 
      writer.WriteLine("Connection: Upgrade"); 
      writer.WriteLine("WebSocket-Origin: http://localhost:8080"); 
      writer.WriteLine("WebSocket-Location: ws://localhost:8181/websession"); 
      writer.WriteLine(""); 
     } 
     listener.Stop(); 
    } 
} 
+0

Err, daha sonra müşteri istekleri yankısı olmayan tamamlanmamış bir el sıkışma. Gönderilecek daha fazla kodunuz var mı? – simonc

+0

@tuoxie Çözümünüz iyi çalıştı. Ama, "kullanma" yı kaldırdığımda ve "yazar" ı nesne olarak ilan ettiğimde işe yaramadı. Nedenini öğrenebilir miyim? – prabhakaran

+0

@simonc Te kalan kısım sha1-base64 dizgisini hesaplayıp istemciye gönderiyor. – prabhakaran

3

SuperWebSocket size Alchemy kullanabilirsiniz diğer C# WebSocket sunucusuna açıksa Echo example

Simya

için

Öğretici. sunucu uygulaması oldukça basittir:

kendi web sitesinde belirtildiği gibi
static void Main(string[] args) { 
    var aServer = new WSServer(8100, IPAddress.Any) { 
     DefaultOnReceive = new OnEventDelegate(OnReceive), 
     DefaultOnSend = new OnEventDelegate(OnSend), 
     DefaultOnConnect = new OnEventDelegate(OnConnect), 
     DefaultOnConnected = new OnEventDelegate(OnConnected), 
     DefaultOnDisconnect = new OnEventDelegate(OnDisconnect), 
     TimeOut = new TimeSpan(0, 5, 0) 
    }; 

    aServer.Start(); 
} 

static void OnConnected(UserContext aContext) { 
    Console.WriteLine("Client Connection From : " + aContext.ClientAddress.ToString()); 
    // TODO: send data back 
} 

, bunlar basit chat example var.

+0

Alchemy gerçekten harika! Talihsiz şu anda bazı özellikler eksik. SuperWebSockets, şu an için muhtemelen daha iyi bir seçenek. – Rushino

+0

@Rushino: bu doğru. SuperWebSockets şu anda şirketimizdeki projeler için mükemmel bir çözümdür. – Robar

+1

Bunu duymak güzel! Onu kullanmaya başladım ve bunun gerçekten harika olduğunu düşünüyorum ve çok iyi çalışıyor. Yani eğer şirketinizde kullanırsanız, bu benim amacım olduğunu kanıtlar. – Rushino