0

非ブロッキング telnet スタイルのソケット プログラミングにminiboa ライブラリを使用しています。

ライブラリには、単純なチャット サーバーのデモが含まれています。

行 809 のpoll()関数で、システムはselect.select()関数を使用します。miniboa.py ファイルでデモ サーバーを実行すると、サーバーはこの関数をブロックしません。それは実行され、ビートをスキップすることなく続行されます。

私はまさにそのコードに基づいたネットワーキング コードで MUD を作成していますが、私の MUD サーバー (以下のリンクを参照) では、サーバーはそのまったく同じ呼び出しを毎回ブロックします。

MUD のnetwork.pyライブラリの 68 行目で、サーバーがpoll()関数を実行します。これは単純なチャット サーバーで実行される関数と同じですが、MUD サーバーで実行される場合はselect.select()呼び出しがブロックされます。

ブロックしている理由はわかりませんが、ブロックしていて、ユーザーがデータを送信するまでループは繰り返されません。誰も何も送信しない場合、サーバーはただ待機します。

なぜこれが考えられるのか誰にも分かりますか?コードに関する質問には喜んでお答えします。また、コードはオープンソースなので、必要に応じてすべてのコードを確認し、操作することができます。

皆様のご協力をお願いいたします。何年も前に子供の頃に初めて MUD をプレイして以来、私は MUD を作成することを夢見てきました。このバグが解決されるまで、作業を続けることを恐れています。このバグを修正するまで、サーバーは正常に動作しません。

TL;DR:select.select()クライアントの入力を待機している間、サーバーが関数内でスタックしますが、そこで一時停止することは想定されていません。ブロックする理由がわかりません。

4

0 に答える 0