javascript - 在 node.js 网络服务器中写入结束后错误

标签 javascript node.js sockets

由于“结束后写入”错误,我正在为我的 node.js 爱好项目而苦苦挣扎。我创建了一个 node.js 网络服务器,其中包括使用以下代码将从 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 docs关于网络套接字。

关于javascript - 在 node.js 网络服务器中写入结束后错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27769842/

相关文章:

javascript - 从文本区域内执行 Javascript(自定义 JS 控制台)

javascript - XMLHttpRequest 已弃用。用什么代替?

javascript - Element.getClientRects() 何时返回多个对象的集合?

node.js - CORS 不适用于 hapijs 和 socket.io

javascript - 由于另一个服务注入(inject),服务无法找到依赖项

node.js - 如何在客户端将可视文件上传到 Amazon S3?

php - PHP等待直到循环完成

javascript - 如何将文本放在图像上(JS)

python - 使用 python 套接字发送消息

python - ZMQ 套接字在 Python 中优雅地终止