[解決済み] node.jsのWebサーバでWrite After Endエラーが発生する。
2022-02-26 12:27:50
質問内容
node.jsの趣味のプロジェクトで、"write after end" Errorに悩まされ、困っています。 node.jsのWebサーバを作成し、HTMLページから受け取ったコマンドを次のコードで別のプロセスに送信しています。
var netSocket = require('net').Socket();
netSocket.connect(9090);
netSocket.write(messages);
netSocket.end();
これは、トラフィックが増加し始める(つまり、送信されるメッセージの量やメッセージのサイズが増加する)までは機能します。 この時点で、次のようなエラーが発生しました。
Error: write after end
at writeAfterEnd (_stream_writable.js:132:12)
at Socket.Writable.write (_stream_writable.js:180:5)
at Socket.write (net.js:615:40)
at Socket.<anonymous> (/Users/mark/Documents/GitHub Repos/voice_controlled_zumo/speech_module/web_server_HTTPS.js:66:15)
at Socket.emit (events.js:95:17)
at Socket.onevent (/Users/mark/Documents/GitHub Repos/voice_controlled_zumo/node_modules/socket.io/lib/socket.js:327:8)
at Socket.onpacket (/Users/mark/Documents/GitHub Repos/voice_controlled_zumo/node_modules/socket.io/lib/socket.js:287:12)
at Client.ondecoded (/Users/mark/Documents/GitHub Repos/voice_controlled_zumo/node_modules/socket.io/lib/client.js:193:14)
at Decoder.Emitter.emit (/Users/mark/Documents/GitHub Repos/voice_controlled_zumo/node_modules/socket.io/node_modules/socket.io-parser/node_modules/component-emitter/index.js:134:20)
私の推測では、9090のサーバーがトラフィック量に圧倒され、エラーが発生したのだと思います。 node.jsの世界では全くの初心者なので、この問題を解決するためのヒントがあれば、本当にありがたいのですが。
また、ウェブサーバーはSSLでページを提供していることに注意してください(それが何らかの違いを生むかもしれないので)。
お忙しい中、お読みいただきありがとうございました。
マーク
解決方法は?
NodeJSはノンブロッキングの非同期プラットフォームです。
あなたの場合
netSocket.write(messages);
は非同期メソッドであるため
netSocket.end()
が呼び出される前に
write
が完了する。
というのが正しい使い方でしょう。
netSocket.write(messages, function(err) { netSocket.end(); });
ここでの第二引数はコールバック関数で、'write'メソッドがその仕事を終えると呼び出されるものです。
NodeJS、非同期スタイル、コールバックについてもっと読む/見ることをお勧めします。
ここからが本題です。 https://www.youtube.com/watch?v=GJmFG4ffJZU
そしてもちろん、NodeJSの APIドキュメント ネットソケットについて。
関連
-
[解決済み】未定義のプロパティ 'forEach' を読み取ることができない
-
[解決済み] Node.jsのプログラムにコマンドライン引数を渡すにはどうしたらいいですか?
-
[解決済み] Node.jsを使うタイミングをどう判断するか?
-
[解決済み] Node.jsで終了する方法
-
[解決済み] Node.jsでファイルを書き込む
-
[解決済み] Node.jsアプリケーションをデバッグするにはどうすればよいですか?
-
[解決済み] Node.jsを完全にアンインストールして、最初から再インストールする方法 (Mac OS X)
-
[解決済み] Node.jsのmodule.exportsの目的と使い方を教えてください。
-
[解決済み] Node.jsで環境変数を読み込む
-
[解決済み] Node.jsでファイル/ディレクトリが存在するかどうかを同期的にチェックする
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】document.getElementByIDは関数ではありません。
-
[解決済み】SecurityError: オリジンを持つフレームがクロスオリジンフレームにアクセスするのをブロックした
-
[解決済み】JavaScriptのinnerHTMLで要素が更新されない
-
[解決済み] テスト
-
[解決済み】SyntaxError: ChromeのJavascriptコンソールでUnexpected Identifierが発生する。
-
[解決済み】WebpackとBabelで「このファイルタイプを扱うには適切なローダーが必要な場合があります。
-
[解決済み】getElementByIdはnullを返す?[クローズド]
-
[解決済み】JavaScriptで相対URLへのリダイレクトを行う
-
[解決済み】Jestが予期しないトークンに遭遇した
-
[解決済み】Syntax error: JavaScriptの不正なreturnステートメント