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);
}
}
}
私はまだ私は大きなメッセージを得ることができる方法を理解していませんでした、オペコードを持つものかもしれませんが、動作させるために何を変えるべきか分かりません。
私は私がそこにいて、何の答えも見つけられなかったと私の質問で書いています。 – udidu
[セクション5.4](http://tools.ietf.org/html/draft-ietf-hybi-thewebsocketprotocol-17#section-5.4) – dtb
それを手伝ってもらえますか? – udidu