2011-11-19 6 views
7

C#でWebSocketサーバーを開発していて、send()メソッドを使用してブラウザ(その場合はChrome)から送信されるすべてのメッセージが最大126文字の長さであることに気付きました。 プロトコルが126文字を超えるメッセージをカットし、最初の126文字だけを転送するように見えるのは、常に126文字を超えるメッセージを送信したいときです。 プロトコルの定義をチェックしようとしましたが、何の答えも見つかりませんでした。WebSocketで大きなメッセージを送信するにはどうすればよいですか?

私の質問は、WebSocketで大きなメッセージを送信できますか?

UPDATE: これは私が私のC#用WebSocketサーバにクライアント(クローム)からのメッセージを解析しています方法です:

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); 
      } 
     } 
    } 

私はまだ私は大きなメッセージを得ることができる方法を理解していませんでした、オペコードを持つものかもしれませんが、動作させるために何を変えるべきか分かりません。

答えて

6

WebSocketメッセージのサイズは任意です。しかし、大量のメッセージは通常、行頭ブロックを避けるために複数の部分(フラグメント)で送信されます。詳細については、WebSockets I-Dを参照してください。

+0

私は私がそこにいて、何の答えも見つけられなかったと私の質問で書いています。 – udidu

+0

[セクション5.4](http://tools.ietf.org/html/draft-ietf-hybi-thewebsocketprotocol-17#section-5.4) – dtb

+0

それを手伝ってもらえますか? – udidu

0

あなたが言ったDTBは正しくありません。送信は間違いなく126文字以上をサポートするはずです。出力を適切にフォーマットすることです。 126文字に制限されていれば、WebRTC用のシグナリングサーバはありません。私はこの送信メッセージ機能をコード化し、終了時にここに投稿します。

2

私は、126文字を超えるメッセージを送信できることを知っています。
それ自身が126文字を含む文字列を含むprotobufでデータを送信できます。 http://www.websocket.org/echo.html
このウェブサイトを参照すると、メッセージをテストすることができます。 (これはフラグメントを使用していないことに注意してください)

+0

はい私は524kバイトを送信しようとしましたが、その代わりに131kを得ました:http://i.stack.imgur.com/aDh9O.png – Pacerier