NodeMCUで簡単なHTTPサーバーを作成しようとしています。私はnodeMCUを起動し、wifiに接続し、以下のプログラムを実行します。私はブラウザからサーバーに接続できます。ページをリロードし続けると永遠に動作しますが、1〜2分のリクエストの送信を停止すると、サーバーは何とか機能を停止します。つまり、ページをリロードすると、nodeMCUはデータを受信せず、データを返すこともできません。NodeMCU HTTPサーバーが応答を停止する
a=0
function receive(conn,payload)
a=a+1
print(payload)
local content="<!DOCTYPE html><html><head><link rel='shortcut icon' href='/'></head><body><h1>Hello!</h1><p>Since the start of the server " .. a .. " connections were made</p></body></html>"
local contentLength=string.len(content)
conn:send("HTTP/1.1 200 OK\r\nContent-Length:" .. contentLength .. "\r\n\r\n" .. content)
conn:close()
end
function connection(conn)
conn:on("receive",receive)
end
srv=net.createServer(net.TCP,1)
srv:listen(8080,connection)
私はいくつかの事柄:
- 私は何もへのリンクを追加することにより、ファビコンを要求してからブラウザを停止しました。
- ブラウザが長時間読み込まれないように、非アクティブクライアントのタイムアウトを1に設定しました(ブラウザはタイムアウトまで読み込みを続けます)。
- HTTPヘッダーを送信するようにコードを更新しました。
- 接続ごとにサーバーを閉じて開こうとしました(いいえ、接続を続けるとこの修正がなくても動作を停止しないためです)。
- 私は
conn:close()
をStackOverflowの答えとしてここに追加しました。
私はコンパイル済みのファームウェア0.9.6-dev_20150704整数を実行しています。
私はまだ試していませんが、あなたの答えは私の問題を完全にカバーしており、古いファームウェアがおそらく問題です。 – IsawU
さて、新しいファームウェアを実行していて、サーバの応答が停止しているという問題がWiFi APによって発生していることがわかりました。定期的に切断するときにタブレットに問題が発生しました。今、私はWiFiから切断し、サーバーが応答を停止し、サーバーがそれ以降に再度実行されているときに再び接続しようとしました。 – IsawU
それは実際に私の最初の推測だった...あなたがNodeMCU 0.9.6を実行しているのを見るまで。 –