非ブロッキング telnet スタイルのソケット プログラミングにminiboa ライブラリを使用しています。
ライブラリには、単純なチャット サーバーのデモが含まれています。
行 809 のpoll()
関数で、システムはselect.select()
関数を使用します。miniboa.py ファイルでデモ サーバーを実行すると、サーバーはこの関数をブロックしません。それは実行され、ビートをスキップすることなく続行されます。
私はまさにそのコードに基づいたネットワーキング コードで MUD を作成していますが、私の MUD サーバー (以下のリンクを参照) では、サーバーはそのまったく同じ呼び出しを毎回ブロックします。
MUD のnetwork.pyライブラリの 68 行目で、サーバーがpoll()
関数を実行します。これは単純なチャット サーバーで実行される関数と同じですが、MUD サーバーで実行される場合はselect.select()
呼び出しがブロックされます。
ブロックしている理由はわかりませんが、ブロックしていて、ユーザーがデータを送信するまでループは繰り返されません。誰も何も送信しない場合、サーバーはただ待機します。
なぜこれが考えられるのか誰にも分かりますか?コードに関する質問には喜んでお答えします。また、コードはオープンソースなので、必要に応じてすべてのコードを確認し、操作することができます。
皆様のご協力をお願いいたします。何年も前に子供の頃に初めて MUD をプレイして以来、私は MUD を作成することを夢見てきました。このバグが解決されるまで、作業を続けることを恐れています。このバグを修正するまで、サーバーは正常に動作しません。
TL;DR:
select.select()
クライアントの入力を待機している間、サーバーが関数内でスタックしますが、そこで一時停止することは想定されていません。ブロックする理由がわかりません。