2010-11-18 4 views
4

누구나이 경험이 있습니까? 나는 꼬인 앱이있다. 클라이언트가 서버에 연결합니다. 클라이언트가 서버에 연결했지만 실행중인 IP 주소의 클라이언트가 이미있는 경우 새 클라이언트의 연결을 끊는 기능을 추가했습니다.트위스트 클라이언트 연결 해제 감지하지 않음

가끔씩 파이썬 프로그램을 수동으로 끄지 않고 클라이언트 컴퓨터 (또는 VM)를 종료했습니다. 이 작업을 수행 할 때 잠시 동안이지만 꽤 자주 서버가 연결을 감지하지 못합니다. 컴퓨터가 다시 부팅되어 다시 연결을 시도하면 서버는 해당 IP로부터의 연결이 이미 있다고 주장합니다. 지금까지 찾은 유일한 해결책은 서버를 다시 시작하는 것입니다.

연결이 끊어지지 않는 이상한 네트워킹 일 수 있습니까? 꼬인 버그?

나는 연결 해제를 처리하는 코드에 버그가 없다는 것을 99 % 확신합니다. 내 코드는 컴퓨터가 셧다운되는 대부분의 경우를 포함하여 연결이 끊어 질 때마다 connectionLost이 호출되도록 설정되며, 이상한 일이 발생하면 연결이 끊어 지거나 예외가 발생하는 문자열을 기록합니다. 이 중 어느 것도 로그에 나타나지 않았습니다.

+0

트위스트 된 프레임 워크에는 모든 개념 수준 (전송/연결, 프로토콜 등)에서 정의 된 이벤트 및 eventHandler가있어 연결 해제를 처리합니다. 코드를 검사하면 도움이 될 것입니다. 해당 동작을 나타내는 단순화 된 버전의 코드를 게시 할 수 있습니다. – pyfunc

+0

@pyfunc : 코드를 파헤칩니다. 네트워크 문제가 의심됩니다. 클라이언트의 연결을 다시 시도하게 만들었고 어떤 경우에는 결국 연결할 수있었습니다 (다른 경우는 있지만 그렇지 않은 경우). – Claudiu

답변

5

이 그것이 정말 특히 트위스트와 아무 상관이없는 경우에도 불구하고 Twisted FAQ입니다.

2

ㅎ 나는 내가 네트워크 클래스에서 배운 모든 것을 잊고 믿을 수 없어 ...

(2:09:44 PM) coworker: this is the expected behaviour 
(2:10:15 PM) coworker: the server has no way to know if someone dies, or is just quiet 
(2:10:35 PM) coworker: unless ofcourse the server has some kind of ping/keepalive message 
(2:15:38 PM) claudiu: ah so if they have no communicatin 
(2:15:42 PM) claudiu: there's no way to tell that a TCP connection has died 
(2:15:47 PM) claudiu: i remember learning that now, yes.. 
(2:16:23 PM) claudiu: but if i just make the server ping the client then it'll figure out soon enough from lack of ACKs that it's dead, right? 
(2:16:45 PM) coworker: right 
관련 문제