Concurrency Yaws-远程关闭插座
你好,埃尔兰格斯的同胞们:) 这只是另一个玩Erlang语言的爱好者。我有一个非常简单的YAWS应用程序模块,当被单个客户端访问时,它可以正常工作。但是,当我尝试生成多个并发客户机时,其中一些客户机开始接收错误(即使这些客户机的数量非常少,比如10个)。知道是什么引起的吗 说明代码: 应用程序模块Concurrency Yaws-远程关闭插座,concurrency,erlang,yaws,Concurrency,Erlang,Yaws,你好,埃尔兰格斯的同胞们:) 这只是另一个玩Erlang语言的爱好者。我有一个非常简单的YAWS应用程序模块,当被单个客户端访问时,它可以正常工作。但是,当我尝试生成多个并发客户机时,其中一些客户机开始接收错误(即使这些客户机的数量非常少,比如10个)。知道是什么引起的吗 说明代码: 应用程序模块 out(Arg) -> io:format("got something!\n"), Method = extract_method(Arg), handle(Method, Arg
out(Arg) ->
io:format("got something!\n"),
Method = extract_method(Arg),
handle(Method, Arg).
客户端
client(SenderPID) ->
case httpc:request(
put,
{
"http://localhost:8080/storageunit",
[],
"application/x-www-form-urlencoded",
""
}, [], []) of
{ error, Reason } -> io:format("Server responded with an error: ~p.\n", [Reason]);
{ ok, _ } -> ok
end,
SenderPID ! 'FINISHED'.
client_spawner(_SenderPID, 0) -> io:format("Done.\n");
client_spawner(SenderPID, Times) ->
spawn(concurrent, client, [SenderPID]),
client_spawner(SenderPID, Times - 1).
我得到的错误是:
Error. Reason: socket_closed_remotely
服务器响应错误:套接字\u远程关闭
最后一条信息是:
- 10个并发客户端-平均有2到5个错误
- 100-100000个并发客户端-平均错误率为50%
Piotr我的初始代码一定有问题。我从头重写了模块,它给了我预期的结果。代码如下:
-module(annoying_client).
-export([annoy/0, client/1, client_spawner/2]).
client(SenderPID) ->
case httpc:request("http://www.google.com") of
{ error, Reason } -> io:format("Error. Reason: ~p\n", [Reason]);
{ ok, _ } -> io:format("ok\n")
end,
SenderPID ! 'FINISHED'.
client_spawner(_SenderPID, 0) -> io:format("Done.\n");
client_spawner(SenderPID, Times) ->
spawn(?MODULE, client, [SenderPID]),
client_spawner(SenderPID, Times - 1).
annoy() ->
inets:start(),
spawn(?MODULE, client_spawner, [self(), 100]),
wait_for_all_jobs(1),
inets:stop(),
init:stop().
wait_for_all_jobs(NumberOfFinishedJobs) ->
receive 'FINISHED' ->
if
NumberOfFinishedJobs < 100 ->
wait_for_all_jobs(NumberOfFinishedJobs + 1);
true ->
io:format("All jobs finished.\n")
end
end.
及
DoS保护?配置不正确?不管怎样,我对我目前的成绩很满意。可能会使用其他ErlangWeb服务器进行试验,以获得一些性能数据
谢谢大家。如果没有更多关于
handle/2
在服务器端所做工作的详细信息,很难回答这个问题。我建议检查Yaws日志,看看是否有任何相关信息。另外,确保您的Yaws-listen backlog设置得足够高,以满足您的需要,并确保客户端和服务器的文件描述符的最大数量都设置得适当。谢谢。看,问题是handle/2甚至没有被调用。我在github上的某个地方(某些回购协议中的一些旧问题)读到,这可能是由iNet使用的配置文件引起的。我打算再探讨一下。是的,刚刚确认。即使我完全排除了handle/2,我还是遇到了同样的问题。Yaws到底收到了什么,还是这只是一个客户端问题?看起来像是客户端问题。雅斯一点也没有得到。
Error. Reason: {failed_connect,[{to_address,{"www.google.com",80}}, {inet,[inet],system_limit}]}