簡體   English   中英

YAWS如何處理並發用戶

[英]How YAWS handle concurrent users

我想知道每次新客戶端使用其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,port和ip ...我在同一瀏覽器(Firefox)上打開了此頁面,並打開了兩個不同的選項卡...如下所示:

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或打開新的端口?

謝謝

除非確定您的瀏覽器為每個選項卡打開了新的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    

是的,請運行兩次,因為可以保證使用兩個單獨的連接。 然后,您將看到Yaws使用兩個不同的Erlang進程和TCP連接來處理兩個請求:

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函數中,該函數啟動接受連接的進程,而do_listen/2函數打開套接字以進行監聽。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM