我有一些用于自定義協議的 Go 客戶端。該協議是 lz4 壓縮的 JSON-RPC,帶有一個四字節的標頭,給出了壓縮 JSON 的長度。func ReceiveMessage(conn net.Conn) ([]byte, error) { start := time.Now() bodyLen := 0 body := make([]byte, 0, 4096) buf := make([]byte, 0, 256) for bodyLen == 0 || len(body) < bodyLen { if len(body) > 4 { header := body[:4] body = body[:4] bodyLen = int(unpack(header)) } n, err := conn.Read(buf[:]) if err != nil { if err != io.EOF { return body, err } } body = append(body, buf[0:n]...) now := time.Now() if now.Sub(start) > time.Duration(readTimeout) * time.Millisecond { return body, fmt.Errorf("Timed-out while reading from socket.") } time.Sleep(time.Duration(1) * time.Millisecond) } return lz4.Decode(nil, body)}客戶端:func main() { address := os.Args[1] msg := []byte(os.Args[2]) fmt.Printf("Sending %s to %s\n", msg, address) conn, err := net.Dial(address) if err != nil { fmt.Printf("%v\n", err) return } // Another library call _, err = SendMessage(conn, []byte(msg)) if err != nil { fmt.Printf("%v\n", err) return } response, err := ReceiveMessage(conn) conn.Close() if err != nil { fmt.Printf("%v\n", err) return } fmt.Printf("Response: %s\n", response)}當我調用它時,我沒有得到響應,它只是超時。(如果我沒有明確忽略 EOF,它會返回 io.EOF 錯誤。)我有另一個用 Python 編寫的庫,它也適用于具有相同負載的相同端點。你馬上看到什么了嗎?
- 2 回答
- 0 關注
- 394 瀏覽
添加回答
舉報
0/150
提交
取消