2011-11-19 21 views
7

C# ile bir WebSocket sunucusu geliştiriyorum ve tarayıcıdan gelen tüm iletilerin (bu durumda Chrome), send() yöntemini kullanarak 126 karakter uzunluğunda olduğunu farkettim. Her zaman, 126 karakterden daha büyük mesaj göndermek istediğimde, protokolün daha sonra 126 karakterden daha büyük bir mesajı kesmesi ve sadece ilk 126 karakterin aktarılması gibi görünüyor. Protokol tanımını kontrol etmeye çalıştım ancak herhangi bir cevap bulamadı.WebSocket üzerinden daha büyük mesajları nasıl gönderebilirim?

Yani, sorum şu, WebSockets üzerinden daha büyük mesajlar gönderebilir miyim?

GÜNCELLEME: Bu benim C# WebSocket sunucusunda istemci (Krom) gelen mesajları ayrıştırma yoludur:

private void ReceiveCallback(IAsyncResult _result) 
    { 
     lock (lckRead) 
     { 
      string message = string.Empty; 
      int startIndex = 2; 
      Int64 dataLength = (byte)(buffer[1] & 0x7F); // when the message is larger then 126 chars it cuts here and all i get is the first 126 chars 
      if (dataLength > 0) 
      { 
       if (dataLength == 126) 
       { 
        BitConverter.ToInt16(buffer, startIndex); 
        startIndex = 4; 
       } 
       else if (dataLength == 127) 
       { 
        BitConverter.ToInt64(buffer, startIndex); 
        startIndex = 10; 
       } 

       bool masked = Convert.ToBoolean((buffer[1] & 0x80) >> 7); 
       int maskKey = 0; 
       if (masked) 
       { 
        maskKey = BitConverter.ToInt32(buffer, startIndex); 
        startIndex = startIndex + 4; 
       } 

       byte[] payload = new byte[dataLength]; 
       Array.Copy(buffer, (int)startIndex, payload, 0, (int)dataLength); 
       if (masked) 
       { 
        payload = MaskBytes(payload, maskKey); 
        message = Encoding.UTF8.GetString(payload); 
        OnDataReceived(new DataReceivedEventArgs(message.Length, message)); 
       } 

       HandleMessage(message); //'message' - the message that received 

       Listen(); 
      } 
      else 
      { 
       if (ClientDisconnected != null) 
        ClientDisconnected(this, EventArgs.Empty); 
      } 
     } 
    } 

Ben hala büyük mesaj almak nasıl anlamadı, Opcode ile belki bir şey, ama işe yaraması için ne değiştireceğimi bilmiyorum?

cevap

6

WebSocket mesajları herhangi bir boyutta olabilir. Bununla birlikte, büyük mesajlar genellikle satır başı engellemekten kaçınmak için çoklu parçalarda (fragmanlar) iletilir. Detaylar için WebSockets I-D'a bakın.

+0

Sorularımın orada olduğunu ve herhangi bir cevap almadığını yazdım, daha spesifik olabilir misiniz lütfen? – udidu

+0

[Bölüm 5.4] (http://tools.ietf.org/html/draft-ietf-hybi-thewebsocketprotocol-17#section-5.4) – dtb

+0

Bu konuda bana yardımcı olabilir misiniz? "Bu yüzden, hem şu anda 2 GB Web Soket mesaja kadar desteklemek bizim docs belirtmek isteriz: me müteşekkir olacak büyük boy mesajları almak yardımcı olacak herhangi bir sahte kod .. – udidu

0

DTB dediğiniz doğru değil. Gönderme kesinlikle 126 karakterden fazla desteklemelidir. Çıktınızı doğru biçimlendirmek meselesidir. 126 karakterle sınırlı olsaydık, WebRTC için sinyalleme sunucusu olmazdı. Bu mesaj gönderim işlevini kodlayacağım ve işim bittiğinde buraya göndereceğim.

2

126 karakterden büyük iletiler gönderebildiğiniz bir gerçeği biliyorum,
Kendilerine 126 karakter içeren dizeleri içeren protobuf üzerinden veri gönderebiliyorum. http://www.websocket.org/echo.html
Bu web sitesine bakarsanız, mesajlarınızı test edebilirsiniz. (Bu parçanın kullanılmadığını unutmayın)

+0

Evet ben 524k bayt göndererek çalıştı ve sadece karşılığında 131k var: http://i.stack.imgur.com/aDh9O.png – Pacerier

İlgili konular