你好同胞Erlangers :)Yaws - socket_closed_remotely
只是另一個Erlang愛好者在這裏玩的語言。我有一個非常簡單的YAWS應用程序模塊,可以在單個客戶端訪問時正常工作。但是,當我嘗試產生多個併發客戶端時,其中一些客戶端開始接收錯誤(即使這些客戶端的數量很低,例如10)。任何想法可能導致它?
龍虎鬥代碼:
APP模塊
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).
我得到的錯誤:
Server responded with an error: socket_closed_remotely.
信息的最後一條是:
- 10個併發客戶端 - 從2到5個錯誤,平均
- 100-100000併發客戶端 - 平均
我想50級%的錯誤我處理代碼導致它,但在客戶端收到httpc錯誤的情況下,服務器甚至不會對「有東西!」做出反應。
我確定我錯過了一些微不足道的東西,你能幫忙嗎?
問候, 彼得
如果沒有更多關於服務器端處理/ 2的詳細信息,很難回答這個問題。我建議檢查Yaws日誌,看看有沒有相關的。此外,請確保您的Yaws收聽積壓設置足夠高,以確保您正在嘗試的內容,並確保適當地設置客戶端和服務器的文件描述符的最大數量。 –
謝謝。看,問題是句柄/ 2甚至沒有被調用。我在github上讀過某處(某些回購中的一些舊問題),認爲它可能是由inets使用的配置文件造成的。我計劃探索一下。 –
是的,剛剛確認。即使我完全將句柄/ 2排除在外,我仍然遇到同樣的問題。 –