【问题标题】:How YAWS handle concurrent usersYAWS 如何处理并发用户
【发布时间】:2013-04-21 00:01:19
【问题描述】:

我想知道每次新客户端使用其 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 或打开新的端口?

谢谢

【问题讨论】:

    标签: erlang yaws


    【解决方案1】:

    除非您确定您的浏览器会为每个选项卡打开新的 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 函数。

    【讨论】:

      猜你喜欢
      • 2012-03-02
      • 2012-02-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-09-27
      相关资源
      最近更新 更多