gpt4 book ai didi

erlang - YAWS 如何处理并发用户

转载 作者:行者123 更新时间:2023-12-02 08:41:30 25 4
gpt4 key购买 nike

每次新客户端使用其 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) 上打开了这个页面并打开了两个不同的选项卡...这是打印出来的:

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 函数。

关于erlang - YAWS 如何处理并发用户,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16103488/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com