[英]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.