課題のためにPythonでチャットサーバーを書いています。ただし、サーバーのシャットダウンで問題が発生します。何が起こっているのか:
クライアントが接続すると、2つのスレッドが生成されます:readThreadとwriteThread。クライアントからのデータの読み取りとへのreadThread印刷を担当し、クライアントからのメッセージの読み取りとクライアントへの送信を担当します。stdoutwriteThreadstdin
クライアントが送信'EXIT'したら、サーバーをシャットダウンしたいと思います。私writeThreadは次のようなループで実行されます:
def write(self) :
while self.dowrite :
data = sys.stdin.readline().strip();
self.conn.send(data);
print 'WriteThread loop ended';
さて、を受け取ったときはfalseEXITに設定dowriteしましたが、もちろん、呼び出しがブロックされているため、whileループは中断されませんsys.stdin.readline().strip()。
つまり、切断するには、クライアントがを送信するEXIT必要があり、次にコンソールでReturnキーを押す必要があります。これを回避する方法はありますか?クライアントが終了メッセージを送信すると、すぐにwhileループから抜け出しますwrite()。
編集 それがどのように一緒になるか:
メインスレッドは2つのスレッド:readとを生成し、終了するwriteのを待ちます(結合します)read。Readを読み取ると終了しますEXIT。スレッドが終了するとすぐにread、メインスレッドは続行dowriteし、書き込みスレッドでfalseに設定されます。これにより、書き込みループが終了しますが、これは、whileループがもう一度繰り返される場合にのみ発生します。