2014-06-10 1 views
0

im '최근에 websockets fin bit 및 C++ 서버에 약간 문제가 있습니다. FIN = 0을 사용하려고 할 때마다 호스트가 아무런 이유없이 연결을 끊습니다.websocket fin bit in C++

string ret 
ret += (unsigned char)((fin & 1) << 7) | (opcode & 63); 

제가 FIN = 1을 사용하는 경우, 프레임 내 첫 번째 바이트가 정확하고, 사용자가 정확한 answear을 취득하는 (129)이다 : 여기 FIN을 계산하려면 코드의 일부분이다. FIN = 0 인 경우 첫 번째 바이트는 1로 좋으며 전송 연결이 끊긴 후 나타납니다. 두 플래그를 사용하여 동일한 데이터 패킷을 보내려고했지만 FIN = 0 만 실패합니다.

왜 FIN = 0을 사용하려고합니까? 글쎄, 나는 작은 three.js + websocket 게임을 만들려고 노력하고있다. 나는 서버가 모든 플레이어를위한 websocket을 통해 모든 모델을 보내길 원한다. 그래서 나는 컨트롤하고자하는 무거운 하중을 기대한다.

추가 정보를 보내 주시면 기꺼이 보내 드리겠습니다.

미리 감사드립니다.

+0

보내진 전체 메시지 없이는 아무도 당신을 도울 수 있다고 생각하지 않습니다. 대부분의 경우 프로토콜 오류가 있습니다. 그 외 : FIN = 0은로드가 많은 경우 반드시 도움이되지는 않습니다. 큰 메시지를 작은 메시지로 분류 할 수 있습니다. 어쨌든 작은 메시지 만 보내면 추가 지속 프레임 오버 헤드로 인해 더 많은로드가 생성됩니다. – Matthias247

답변

1

저는 C++에 대해 전혀 몰라요. 그러나 저는 WebSockets에 대해 조금 알고 있습니다.

다른 바이트에는 어떤 값이 있습니까? FIN = 0 프레임을 보내면 여전히 프레임 옵션을 보내야합니다. 후속 프레임은 "Continuation"옵션이어야하며 그 밖의 것은 없습니다. 늘어나는만큼 RSV 비트가 0이 아닌 연속 프레임이 있습니다.

형식 (텍스트 또는 이진)없이 FIN = 0 인 프레임을 보내면 실패 할 수 있습니다. FIN = 0을 보낸 후 "계속"과 다른 유형의 FIN = 1을 보내는 경우.

그래서 열쇠는 무엇입니까? 두 번째 바이트로 보내시겠습니까? 또한 Chrome을 사용해 콘솔을 체크인하면 연결이 종료되는 이유가 좋습니다.

+0

주님을 찬양합시다! 귀하의 answear 후 나는 사양으로 돌아 왔고 그것은 opcode 정말 엉망으로 나왔다. 웹 서버와 여러 메시지를 사용하는 사용자 : 메시지의 첫 번째 바이트는 1 (문자 메시지의 경우 opcode = 1)이고 나머지는 0 (연속)이어야하며 마지막 문자는 128 (fin = 1, opcode = 0 계속 메시지). 다시 한번 감사합니다! – user2872173