2010-11-18 20 views
4

誰もがこれを経験していますか?私はねじれたアプリを持っています。クライアントはサーバーに接続します。クライアントがサーバーに接続しても、そのIPアドレスからのクライアントが既に実行されている場合は、新しいクライアントの接続を切断する機能を追加しました。クライアントが切断されていることを検出していません。

しばらくして、Pythonプログラムを手動でオフにすることなく、クライアントコンピュータ(または正確にはVM)をシャットダウンしました。これを行うと、しばらくしてもかなり頻繁に、サーバーは切断を検出しません。コンピュータが復帰して再接続しようとすると、サーバはそのIPからの接続が既にあると主張します。私が今までに見つけた唯一の解決策は、サーバーを再起動することです。

接続が切断されていないという奇妙なネットワーキングの問題はありますか?ツイストバグ?

私は、コードを切断して処理するバグではないことを99%確信しています。私のコードは、マシンがシャットダウンするほとんどの場合を含め、接続が失われるたびにconnectionLostが呼び出されるように設定されています。何か異常が発生した場合に何が切断されたか、または例外をスローする文字列を記録します。これらの事のどちらもログに現れなかった。

+0

ツイストフレームワークには、すべての概念レベル(トランスポート/接続、プロトコルなど)でイベントとイベントハンドラが定義されており、切断を処理します。だから、コードを調べれば助けになるだろう。その動作を示すコードの簡略版を投稿することができます。 – 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 
関連する問題