0

Unixソケットとsendmsg / recvmsgを使用して、リクエストを失うことなくソケットファイル記述子を新しいサーバープロセスに渡すWebサーバーで遊んでいます。ab でテストしているときに、クライアント接続が長続きし、apachebench (ab) がエラー「apr_poll: The timeout specified has expired (70007)」を表示することがわかりました。

ファイル記述子のアドレスに変更があり、開いている接続が役に立たなくなるのではないかと疑っていましたが、すべての要求の最後に接続が閉じられていることを確認しても違いはなく、いくつかの要求が失敗しました。

ソケットレベルで何か特別な奇妙な点がありますか、それとも ab は単に奇妙ですか? 他に考慮すべきことはありますか?

編集:PHPをクライアントとして使用してリクエストを行うと、サイクル中に失速します。

4

2 に答える 2

1

ソケットをリッスンしている (着信接続を受け入れる) マスター サーバーがあり、複数のワーカー プロセスがある場合は意味があります。

適切な/空いているワーカーを (たとえば、すべてのワーカーが使用している TCP 接続の数に基づいて) 選択し、マスターからの着信接続の記述子をワーカーに渡すことができます。これにより、複数のワーカーが共通のエンドポイントでリッスンするときに「雷鳴の群れ」を回避できます。

于 2010-12-17T15:30:13.513 に答える
0

これは、電話回線を介して電話を送ろうとするのと同じです。意味がありません。ソケット fd は、接続のエンドポイントを識別します。別のホストが接続を必要とする場合は、独自のものを作成する必要があります。あなたはそれをあなたのものにすることはできません。

于 2010-08-21T04:46:03.987 に答える