반응형
어떻게 접속이 끊어졌을 때 자동으로 재접속할 수 있나요?
issue 414를 보세요.
재접속을 위한 공통 패턴
pgrandinetti님 질문
몇 개의 제 프로젝트에서 접속 오류나 재접속 시도가 발생할 수 있는 시나리오를 다루기 위해 다음처럼 진행합니다.
async def listen_forever(self):
while True:
# 접속을 실패할 때마다 밖의 루프는 재실행됨
try:
async with websockets.connect(self.url) as ws:
while True:
# listener loop
try:
reply = await asyncio.wait_for(ws.recv(), timeout=***)
except (asyncio.TimeoutError, websockets.exceptions.ConnectionClosed):
try:
pong = await ws.ping()
await asyncio.wait_for(pong, timeout=self.ping_timeout)
logger.debug('Ping OK, keeping connection alive...')
continue
except:
await asyncio.sleep(self.sleep_time)
break # 안쪽 loop
# dreply 객체로 작업을 진행합니다.
except socket.gaierror:
# 뭔가 로그를 남깁니다.
continue
except ConnectionRefusedError:
# 뭔가 다른 것을 로그로 남깁니다.
continue
저는 (1)이것이 괜찮은지 궁금하고요. (2) websockets
에 이미 반복적인 행위같은 것을 처리하기 위해 제공되는 지름길 같은 방법이 있는지도 궁금합니다. (맞다고 가정합니다!)
aaugustin님 답변
이를 구현한 웹소켓에서 지름길 같은 방법은 없습니다.
이 사용 사례에 관해 이전에 들었고 저는 유효하다고 갱각합니다.
저는 좋은 API를 제공할 수 있을 지 확실하지는 않습니다. -- 저는 사용자 코드가 접속할 때 혹은 접속이 끊어졌을 때 이 작업(재접속)을 해야될 것으로 예상되지만 어떻게 이를 처리해야할지는 확실하지 않습니다.
heckad님 질문
이 특징을 추가하기 위해 필요한 것은 무멋이 있을까요?
aaugustin님 추가 제안
이 특징을 위해 저는 다음을 제안합니다.
- 첫째, 이 특징이 정확히 반응하는지 묘사하는 문서가 필요합니다.
- 우리가 그것에 동의하면 테스트와 함께 구현하겠습니다.
pgrandinetti 님 답변
@heckad 저는 최소한의 재생산 가능한 예시를 여기에 작성하였습니다.
https://gist.github.com/pgrandinetti/964747a9f2464e576b8c6725da12c1eb
반응형
'Python' 카테고리의 다른 글
Python에서 표준에러로 출력하는 방법? (0) | 2020.01.15 |
---|---|
2개의 QuickFix initiator 세션을 구분하기 (0) | 2019.12.19 |
request.GET에서 URL 파라미터를 얻기 (0) | 2019.12.07 |
Python 튜플 리스트 그룹핑 (0) | 2019.09.19 |
이미 import된 python 모듈을 unimport 하는 방법? (0) | 2019.08.05 |