Erlang YAWS如何处理并发用户

Erlang YAWS如何处理并发用户,erlang,yaws,Erlang,Yaws,我想知道每次新客户机使用其web服务器时,YAWS中都会执行哪些代码 首先,我试图了解YAWS如何处理并发用户。。。并trie以下.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)

我想知道每次新客户机使用其web服务器时,YAWS中都会执行哪些代码

首先,我试图了解YAWS如何处理并发用户。。。并trie以下.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)上打开了这个页面,并打开了两个不同的选项卡。。。这是印刷的:

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> 
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> 
进程标识符:端口:#端口客户端:{{127,0,0,1},60451}YAWS-pid:
进程标识符:端口:#端口客户端:{{127,0,0,1},60451}YAWS-pid:
由于某些原因,返回的端口和pid相同(因此,YAWS没有为每个客户端创建新端口或新pid)

当我在Chrome上试用时,这是打印的:

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> 
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> 
进程标识符:端口:#端口客户端:{{127,0,0,1},60543}YAWS-pid:
进程标识符:端口:#端口客户端:{{127,0,0,1},60543}YAWS-pid:
因此,为什么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>
进程标识符:端口:#端口客户端:{{127,0,0,1},64977}YAWS-pid:
进程标识符:端口:#端口客户端:{{127,0,0,1},64978}YAWS-pid:
至于处理连接的Yaws代码所在的位置,您可以查看,特别是启动进程以接受连接的
acceptor/1
函数和打开套接字进行侦听的
do_listen/2
函数