2013-09-05 6 views
0

기존 서버에 websocket 서버를 구현했습니다. 핸드 셰이크가 좋으면 첫 번째 메시지를 보내고 클라이언트 브라우저가이를 수신 할 수도 있습니다. 그러나 이후의 모든 메시지는 websocket 연결을 끊습니다. 크롬에 나는 다음과 같은 오류가 발생합니다.Websocket - 마스크 비트 세트에 대해 불평하는 크롬

failed: A server must not mask any frames that it sends to the client. 

내 프레임이 < < 130466011511011295105110102,111,32,97,118,95,112,111,116,61,34 같다 송신 될이

Len = erlang:size(Msg), 
if 
     Len < 126 -> 
      Message = [<<1:1, 0:3,2:4,0:1,Len:7>>,Msg]; 
     Len < 65536 -> 
      Message = [<<1:1, 0:3,2:4,0:1,126:7,Len:16>>,Msg]; 
     true -> 
      Message = [<<1:1, 0:3,2:4,0:1,127:7,Len:64>>,Msg] 
end, 

이제 하나의 샘플 데이터처럼 만들어 , 49,49,34,32,1049711010011595112101114951041111171146134484650,48,34,32,47,62 >>

위 코드에서 알 수 있듯이 마스크 비트는 항상 0으로 설정되어 있지만 동일한 메시지가 t에 대해 작동하는 이유는 아닙니다. 그는 처음으로 같은 메시지를 다시 보내면 마스크 비트 세트에 대해 불평합니다.

아무도 알아 듣지 못했습니까? 감사합니다.

답변

0

붙여 넣은 프레임 샘플 데이터가 정상입니다.

82 = fin:true 
    rsv1:false 
    rsv2:false 
    rsv3:false 
    opcode:2 
2E = masked:false 
    payloadLength:46 (decimal) 
Payload = UTF8 valid: 
    <snp_info av_pot="11" hands_per_hour="0.20" /> 

당신은 심지어 페이로드 길이 선언에 불일치 어떤 샘플 버퍼에 남아있는이 없습니다 :

48 bytes 
ErlangSampleBytes[48] = 82 2E 3C 73 6E 70 5F 69 6E 66 6F 20 61 76 5F 70 
         6F 74 3D 22 31 31 22 20 68 61 6E 64 73 5F 70 65 
         72 5F 68 6F 75 72 3D 22 30 2E 32 30 22 20 2F 3E 

그것은/구문 분석이에 변환합니다.

크롬 검사 도구를 사용하여 생각한 프레임을 확인하는 것이 현명합니다. 그 다음 단계는 WireShark와 같은 도구를 사용하여 네트워크 트래픽을 캡처하여 진행 상황을 확인하는 것입니다.

유선에서 보내는 바이트 수와 payloadLength에서 선언하는 바이트 수가 서로 다른 것으로 의심됩니다. (내가 보았던 공통적 인 것은 여러분이 선언 한 것보다 많은 바이트를 보내는 것입니다)

1024 바이트의 버퍼를 할당하고 처음 48 개를 적절하게 채운 다음 전체 1024 바이트를 보내는 것과 같이. 그러면 다음 프레임을 파싱합니다.

+0

마스킹 또는 특수 비트 설정과 관련하여 Chrome에서 불만을 제기하는 경우 해당 데이터는 일반적으로 네트워크 관리자로 전송되지 않습니다. WireShark (Charles만으로도 충분하고 사용하기가 다소 복잡하다는 것을 알았습니다.)와 같은 것으로 바로 뛰어 들기를 원할 것입니다. –

+0

안녕하세요. 빠른 답변을 보내 주셔서 감사 드리며 늦게 답변드립니다. 나는 지금 wireshark에 관한 교통량을 점검했다 (크롬은 많이 사용하지 않는다). 이제 첫 번째 메시지는 941 바이트이고 두 번째는 251 바이트입니다. 첫 번째 메시지의 경우 wireshark에서 1 개의 websocket 섹션을 볼 수 있지만 두 번째 메시지에서는 3 개의 websocket 메시지 (스크린 샷 첨부)가 표시됩니다. 첫 번째는 페이로드 길이 2, 두 번째 121 및 세 번째 99입니다. 정보에는 계속 메시지가 표시됩니다. – rameez82

+0

여기 imaget를 업로드했습니다 - http://i44.tinypic.com/16hw1nd.png – rameez82