golang中tcp socket粘包问题和处理

陈杰斌 ·
看过了stream里面readValue这个函数,觉得spin6lock说的是对的。json.Decode会从流中一直读取复合jsong规范的数据出来,直到读到io.EOF。golang完美的解决了json的粘包的问题。
#7
更多评论
polaris
社区,需要你我一同完善!
补充:对于 json 格式数据传输,可以通过 json 包来处理,go 的 json 包已经处理好了 粘包 问题 ```go func handleConnection(conn net.Conn) { d := json.NewDecoder(conn) for { var msg interface{} if err := d.Decode(&msg); err != nil { log.Println(conn.RemoteAddr().String(), " connection error: ", err) return } log.Println(conn.RemoteAddr().String(), "receive data:", msg) } } ```
#1
这种场景不适合使用json.NewDecoder,如果一个协议包(假定是json数据),协议栈只收到了一部分怎么办?你直接decode失败就return了?原文的length + data是一种很好的方式,当然加上header也是可以的。
#2