You're absolutely right. Disregard my comment. On Wednesday, September 18, 2019 at 1:10:38 PM UTC-4, Jochen Voss wrote: > > Dear Ilia, > > Thank you for your comment. In my mind, Read and Write are made for > streaming data, whereas a websocket connection transports messages. How > would I handle message types and message boundaries when using the > io.Reader and io.Writer interfaces? (I do try to implement these > interfaces for the *contents* of the messages themselves, see my > SendMessage and ReceiveMessage functions.) > > Many thanks, > Jochen > > On Wednesday, 18 September 2019 14:37:49 UTC+1, Ilia Choly wrote: >> >> You should try to make Conn implement io.Reader and io.Writer >> >> 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/f03c246f-89c3-4400-8d9e-7912738359f9%40googlegroups.com.