파이썬을 통해 websocket 서버를 만드는 작업을하고 있습니다. (나는 파이썬에 좀 익숙합니다.) 상당한 진전을 이루었지만 데이터를 웹 브라우저로 보냅니다. 연결을 설정하고 브라우저에서 데이터를받을 수는 있지만 데이터를 다시 보낼 수는 없습니다. 브라우저는 그냥 무시합니다. 브라우저가 사양을 따르지 않는 패키지를 받으면 연결을 종료하지만 연결은 계속 활성화된다고 가정합니다.Websocket : 브라우저 dosn't는 파이썬 서버에서 데이터를 수신하는 것 같습니다
def encode_message(data):
frame = "\x81"
size = len(data)
if size * 8 <= 125:
frame += chr(size)
else:
raise Exception("Uh, oh. Strings larger than 125 bits are not supported")
return frame + data
I가 sock.sendall(framed_data)
를 사용하여 데이터를 전송하고있다 : 여기
10000001 00000010 01111001 01101111
(읽기 쉽도록 공백이 추가됨)이됩니다. 브라우저가 다음과 같은 메시지를 받아들이지 않는 이유는 무엇입니까?
the specification에 요약 된 지침을 따르지 않습니까? 나는 버전 13이라고 생각되는 최신 websocket 버전을 지원하려고 노력 중이다. 파이썬 버전 2.7.3을 사용하고있다.
파이썬 websocket 라이브러리의 소스 코드를 살펴 보려고했지만, 모두 취약점이있는 것으로 표시된 웹 소켓 프로토콜의 비추천 버전을 구현하는 것 같습니다. 나는 또한 서버와 소켓 사이에 전송 패키지를 도청 와이어 샤크 다운로드
def send(data):
frame = encode_message(data)
print "Sending all..."
sock.sendall(frame) #Socket that handles all communications with client
print "Frame sent :)"
return
: 여기
위의 함수를 호출하는 코드이다. 내 서버에서 보낸 패키지는 브라우저에서 허용 한 서버에서 보낸 패키지와 동일합니다. 나는 어떤 차이도 전혀 볼 수 없었다. (나는 16 진수 소스를 직접 보았습니다.)
아무도이 문제를 해결하는 방법을 알고 있지 않습니까? – CoderOfHonor
브라우저에서 어떤 콜백이 실행됩니까? 'onopen'은 핸드 쉐이크가 끝날 때 작동합니까? 'onerror' 또는'onclose'가 나중에 실행됩니까? 악수를 완료 한 후 연결을 유지하는 것을 기억합니까? 이 질문들 중 어느 것도 답을 찾는데 도움이되지 않는다면, 전체 서버 소스와 문제를 보여주는 간단한 클라이언트 코드를 게시 할 수 있습니까? – simonc
'onopen'은 핸드 쉐이크가 끝날 때 실행됩니다. onclose는 웹 소켓이 서버에 의해 연결 해제 될 때까지 실행되지 않습니다. 오류가 발생하지 않기 때문에'onerror'는 호출되지 않습니다. 핸드 셰이크가 수행 된 후 서버는 클라이언트에서 메시지를 수신 할 수 있지만 그 반대는 작동하지 않습니다. – CoderOfHonor