2

新しいクライアントが Web サーバーを使用するたびに YAWS で実行されているコードを知りたい...

最初に、YAWS が同時ユーザーを処理する方法を理解しようとしました...そして、次の .yaws ページを試してみました:

io:format("~nProcess Identifier: ~p  Port: ~p  Client: ~p  YAWS pid: ~p ~n",[self(), A#arg.clisock, A#arg.client_ip_port, A#arg.pid]).

これは、各クライアントの Pid 、ポート、および ip を返す必要があります...同じブラウザー (Firefox) でこのページを開き、2 つの異なるタブを開きました... これは印刷されました。

Process Identifier: <0.65.0>  Port: #Port<0.1211>  Client: {{127,0,0,1},60451}  YAWS pid: <0.65.0> 

Process Identifier: <0.65.0>  Port: #Port<0.1211>  Client: {{127,0,0,1},60451}  YAWS pid: <0.65.0> 

何らかの理由で、同じポートと pid が返されています (したがって、YAWS は各クライアントに対して新しいポートまたは新しい pid を作成していません)。

Chrome でこれを試してみると、次のように出力されました。

Process Identifier: <0.71.0>  Port: #Port<0.2998>  Client: {{127,0,0,1},60543}  YAWS pid: <0.71.0> 

Process Identifier: <0.71.0>  Port: #Port<0.2998>  Client: {{127,0,0,1},60543}  YAWS pid: <0.71.0> 

したがって、YAWS が同じブラウザーの各タブに対して新しいポートまたは pid を開かないのはなぜですか? また、元の質問に戻りますが、YAWS はどこでどのコードを使用して新しい PID を生成したり、新しいポートを開いたりしますか?

ありがとう

4

1 に答える 1

6

ブラウザーがタブごとに新しい HTTP 接続を開くことを確信していない限り、テストしていると思っていることを実際にテストしているとは言えません。代わりに、コマンドラインからこれを試してください:

curl http://yaws_host:yaws_port/path/to/your/yaws/page.yaws
curl http://yaws_host:yaws_port/path/to/your/yaws/page.yaws    

はい、2 回実行します。これは、2 つの別々の接続を使用することが保証されているためです。次に、Yaws が 2 つの異なる Erlang プロセスと TCP 接続を使用して 2 つのリクエストを処理することがわかります。

Process Identifier: <0.59.0>  Port: #Port<0.1181>  Client: {{127,0,0,1},64977}  YAWS pid: <0.59.0>
Process Identifier: <0.64.0>  Port: #Port<0.3268>  Client: {{127,0,0,1},64978}  YAWS pid: <0.64.0>

接続を処理するための Yaws コードが存在する場所については、yaws_server.erlを参照してください。特に、acceptor/1接続を受け入れるプロセスを起動するdo_listen/2関数と、リッスンするためにソケットを開く関数を参照してください。

于 2013-04-20T16:01:19.430 に答える