▲ | initplus 3 days ago | ||||||||||||||||
http.ListenAndServe is implemented under the hood with a new goroutine per incoming connection. You don't have to explicitly use goroutines here, it's the default behaviour. | |||||||||||||||||
▲ | necrobrit 3 days ago | parent [-] | ||||||||||||||||
Yes _however_ the nodejs benchmark at least is handling each message asynchronously, whereas the go implementation is only handling connections asynchronously. The client fires off all the requests before waiting for a response: https://github.com/matttomasetti/NodeJS_Websocket-Benchmark-... so the comparison isn't quite apples to apples. Edit to add: looks like the same goes for the c++ and rust implementations. So I think what we might be seeing in this benchmark (particularly the node vs c++ since it is the same library) is that asynchronously handling each message is beneficial, and the go standard libraries json parser is slow. Edit 2: Actually I think the c++ version is async for each message! Dont know how to explain that then. | |||||||||||||||||
|