首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >YAWS如何处理并发用户

YAWS如何处理并发用户
EN

Stack Overflow用户
提问于 2013-04-19 19:23:55
回答 1查看 212关注 0票数 2

我希望知道每次新客户端使用其web服务器时,在YAWS中执行的是哪些代码……

首先,我试图理解YAWS是如何处理并发用户的……并尝试以下.yaws页面:

代码语言:javascript
复制
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)上打开了这个页面,并打开了两个截然不同的选项卡...这是打印的:

代码语言:javascript
复制
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上试用时,打印的是:

代码语言:javascript
复制
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或打开新的端口?

谢谢

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-04-21 00:01:19

除非您确定浏览器为每个选项卡都打开了新的HTTP连接,否则您并没有真正测试您认为正在测试的内容。相反,可以从命令行尝试执行以下操作:

代码语言:javascript
复制
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连接来处理这两个请求:

代码语言:javascript
复制
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函数。

票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16103488

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档