Write After End error in node.js webserver

后端 未结 3 1038
醉梦人生
醉梦人生 2021-02-06 22:55

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

3条回答
  •  无人及你
    2021-02-06 23:14

    First, I think there is misinformation in another answer about socket.write() and socket.end(). It is perfectly normal and OK to do them back to back in the same tick:

    socket.write(everythingIPlanToSend);
    socket.end();
    

    You do not need to provide a callback to write. The callback will tell you when the data has been fully flushed out the connection, but that is an optional notification that typical programs don't need to concern themselves with.

    However, looking at your stack trace, I think your event handling control flow is broken in this manner. You have a socket.io client connected, and that emits events which you listen for. When those events fire you send them onward to your upstream server. Then you end the upstream socket connection. At that point, you must unbind (removeListener) your socket.io connection listener so that as more events arrive you don't attempt to send them up the connection you have already closed.

    Another way to say it is whenever you call .end() on your upstream socket, you have to make sure that future incoming events from the browser do not make use of that same socket. OR you have to change your code to use the same upstream socket for all events from the corresponding browser socket (which is probably more efficient/correct), BUT in that case don't call .end() on it until the browser socket actually disconnects.

提交回复
热议问题