Dear T L, Thanks for this. I was aware of implementations number 1 and 4 (and I think I like my own better than these), but I didn't spot numbers 2 and 3. I'll have a look at these, too.
Many thanks, Jochen On Wednesday, 18 September 2019 14:27:17 UTC+1, T L wrote: > > Just for reference. Here are other Go websocket implementations: > * Gorilla WebSocket https://github.com/gorilla/websocket > * https://github.com/nhooyr/websocket > * https://github.com/gobwas/ws > * x/net/websocket https://godoc.org/golang.org/x/net/websocket > > On Tuesday, September 17, 2019 at 6:29:08 PM UTC-4, Jochen Voss wrote: >> >> Dear all, >> >> Because I wanted to learn about the websocket protocol, I have >> implemented a websocket server in Go: >> >> code: https://github.com/seehuhn/go-websocket >> documentation: https://godoc.org/seehuhn.de/go/websocket >> >> I would be happy to receive feedback about my code. >> >> Specific questions: >> >> - Does the API look reasonable? Anything to improve? >> >> - I use the function readMultiplexer (at the end of reader.go) to read >> all frame headers from the network connection, and to make sure that the >> readers of the frame bodies don't step on each other's feet. Similarly, >> the function writeMultiplexer (at the end of writer.go) coordinates all >> writers and performs all writes to the network connection. This system is >> held together by a tangle of go channels. The code is much messier than I >> would like it to be. Is there a way to structure such code so that it >> is easier to reason about, so that I can be more confident that it is >> correct? The bits a struggled most with are the various ways the >> connection can be closed (closed by server explicitly or because of a >> protocol error, closed by client with/without close frame). >> >> - I attempted to profile the code, to find whether there are any >> performance bottlenecks. My code for this is in websocket_test.go >> (function BenchmarkEcho), but the profiles then only ever show the code >> waiting for data on go channels or for data from the network. My feeling >> is that I was really benchmarking the network connection and not my code. >> Is there a way to improve BenchmarkEcho to get more meaningful results? >> >> Many thanks, >> Jochen >> >> -- You received this message because you are subscribed to the Google Groups "golang-nuts" group. To unsubscribe from this group and stop receiving emails from it, send an email to golang-nuts+unsubscr...@googlegroups.com. To view this discussion on the web visit https://groups.google.com/d/msgid/golang-nuts/9637cdf0-c438-4659-9ce8-35ddff219bfb%40googlegroups.com.