Monday, May 20, 2024
 Popular · Latest · Hot · Upcoming
140
rated 0 times [  141] [ 1]  / answers: 1 / hits: 98581  / 10 Years ago, sun, january 4, 2015, 12:00:00

I am struggling with my node.js hobby project due to a write after end Error. I have a created a node.js webserver that amongst other things, sends commands received from a HTML page onwards to another process using the following code:



var netSocket = require('net').Socket();
netSocket.connect(9090);
netSocket.write(messages);
netSocket.end();


This works until the traffic starts to increase (i.e. the amount of messages being sent and or the size of the messages). At this point I get the following error:



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)


My guess is that the server at 9090 is being overwhelmed by the amount of traffic, giving rise to the error. As a complete newbie in the node.js world I'd really appreciate any hints for how I could resolve this issue.



Note also that the webserver is serving pages over SSL (in case that makes any difference).



Thanks for taking the time to read this!



Mark


More From » node.js

 Answers
16

NodeJS is a non-blocking async platform.


In your case,


netSocket.write(messages);

is an async method; therefore, netSocket.end() is called before write is complete.


The correct use would be:


netSocket.write(messages, function(err) { netSocket.end(); });

The second argument here is a callback function that will be called once the 'write' method finishes its job.


I would recommend you read/watch more about NodeJS, async styles and callbacks.


Here is a great place to start: https://www.youtube.com/watch?v=GJmFG4ffJZU


And of course, the NodeJS API docs regarding net sockets.


[#68313] Wednesday, December 31, 2014, 10 Years  [reply] [flag answer]
Only authorized users can answer the question. Please sign in first, or register a free account.
jamilab

Total Points: 687
Total Questions: 88
Total Answers: 86

Location: Antigua and Barbuda
Member since Sat, Apr 24, 2021
3 Years ago
;