Pengenalan:
Mengurus sambungan TCP yang berterusan dalam Go melibatkan pengendalian data masuk dengan berkesan. Artikel ini menangani salah tanggapan biasa tentang net.Conn.Read dan menyediakan penyelesaian praktikal untuk menghuraikan data daripada sambungan TCP berasaskan strim.
Memahami Pembingkaian Data TCP:
TCP ialah protokol berasaskan aliran yang tidak menyediakan sebarang pembingkaian mesej. Ini bermakna bahawa menentukan sempadan mesej individu dalam aliran data masuk adalah tanggungjawab aplikasi.
Salah Tanggapan Biasa:
Salah tanggapan yang biasa ialah net.Conn .Baca secara automatik mengetahui penghujung mesej dan diteruskan dengan sewajarnya. Walau bagaimanapun, ini tidak berlaku.
Pembingkaian Mesej Tersuai:
Untuk menghuraikan data secara berkesan daripada strim TCP, protokol pembingkaian mesej tersuai mesti ditentukan. Ini boleh dicapai dengan menambahkan pengepala pada setiap mesej yang menunjukkan panjangnya.
bufio.Reader to Enhance Efficiency:
Untuk meningkatkan kecekapan membaca dan menyediakan kaedah tambahan untuk menghuraikan, adalah disyorkan untuk membalut sambungan dalam a bufio.Reader.
Penyelesaian:
Coretan kod berikut memberikan contoh cara menghuraikan mesej dengan pembingkaian tersuai:
import ( "bufio" "fmt" "io" "net" ) func main() { ln, err := net.Listen("tcp", ":8080") if err != nil { fmt.Println(err) return } for { conn, err := ln.Accept() if err != nil { fmt.Println(err) return } // Wrap the connection in a bufio.Reader br := bufio.NewReader(conn) for { // Read a single byte containing the message length size, err := br.ReadByte() if err != nil { fmt.Println(err) return } // Read the full message buff := make([]byte, size) _, err = io.ReadFull(br, buff) if err != nil { fmt.Println(err) return } fmt.Printf("Received: %x\n", buff) } } }
Kesimpulan:
Dengan menentukan protokol pembingkaian mesej tersuai dan menggunakan bufio.Reader, adalah mungkin untuk mengendalikan soket TCP berterusan dengan berkesan dalam Go. Pendekatan ini membolehkan penghuraian data yang cekap dan komunikasi yang mantap melalui strim TCP.
Atas ialah kandungan terperinci Bagaimana untuk Mengendalikan Sambungan TCP Berterusan dan Pembingkaian Data dengan Cekap dalam Go?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!