2017-09-08 16 views
9

저는 프로토콜에 전형적인 onX 기능을 가진 자동 응답 웹 소켓 서버를 가지고 있습니다. 내 문제는 내가 특정 메시지가 도착했을 때 내가하고 싶었던 다양한 것들을 계속하면서 onX을 나가는 길을 찾을 수 없다는 것이다. 더 구체적으로 내 onMessage 함수에서, 나는 때로는 매우 느린 API에 HTTP 요청을 수행합니다. 결과적으로 websocket 메시지를 보낸 클라이언트가 서버의 onMessage 종료에 의해 차단되고 있습니다. 서버 측에서 self.sendMessage 또는 reactor.callFromThread(<http request here>) 또는 self.transport.loseConnection() 블록을 수행하더라도 onMessage 블록에서 onMessage은 여전히 ​​HTTP 요청을 실행하고 클라이언트는 기다립니다. (내가 그들을 서버에 도착 볼 수 없습니다 심지어 클라이언트에서, 단지 websocket.send(data)을 시도아우토반, 메시지 블록을 남겨주세요.

@asyncio.coroutine 
def send(command,userPath,token): 
    websocket = yield from websockets.connect('wss://127.0.0.1:7000',ssl=ssl.SSLContext(protocol=ssl.PROTOCOL_TLSv1_2)) 
    data = json.dumps({"api_command":"session","body":command,"headers": {'X-User-Path': userPath, 'X-User-Token': token}}) 
    response = {} 
    try: 
     yield from websocket.send(data) 
    finally: 
     yield from websocket.close() 
    if 'command' in response: 
     if response['command'] == 'ACK_SESSION_COMMAND' or response['command'] == 'ACK_INITIALIZATION': 
      return ('OK',200) 
     else: 
      return('',400) 

하지만 어떤 이유로이 데이터를 전송하지 않습니다

이 내 클라이언트의 코드입니다). onMessage 블록에서 어떻게 돌아와 내 HTTP 요청을 계속 수행 할 수 있는지 이해할 수 없습니다.

내 상황을 설명하기 위해, 난 그냥 내 서버에 1 SSL을 websocket 메시지를 보내고 즉시 연결을 닫고 싶습니다. 그 일을 할 수있는 어떤 것도 나를 맞는 것입니다.

답변