Rumah >pembangunan bahagian belakang >Golang >Mengapa Pelayan Gema Soket Go Unix Saya Putuskan Sambungan: Masalah Komunikasi Sehala?
Dalam Go, soket Unix menyediakan mekanisme untuk komunikasi antara proses. Walau bagaimanapun, isu biasa timbul apabila cuba mewujudkan sambungan dua hala, menyebabkan pelayan menerima tetapi tidak membalas mesej pelanggan.
Pemerhatian lebih dekat mendedahkan bahagian yang hilang dalam contoh kod pelanggan. Walaupun ia menghantar data ke pelayan, ia tidak membaca respons pelayan. Menambah kod untuk menangani perkara ini menyelesaikan isu.
Kod klien yang diperbetulkan termasuk goroutine yang membaca data daripada pelayan. Selain itu, penggunaan penangguhan dan pemecahan memastikan pembersihan yang betul dan keluar dari goroutine.
package main import ( "io" "log" "net" "time" ) func reader(r io.Reader) { buf := make([]byte, 1024) for { n, err := r.Read(buf[:]) if err != nil { return } println("Client got:", string(buf[0:n])) } } func main() { c, err := net.Dial("unix", "/tmp/echo.sock") if err != nil { panic(err) } defer c.Close() go reader(c) for { _, err := c.Write([]byte("hi")) if err != nil { log.Fatal("write error:", err) break } time.Sleep(1e9) } }
Dengan melaksanakan fungsi baca yang hilang dalam kod pelanggan, komunikasi dua arah diwujudkan, membenarkan klien menerima dan membalas mesej pelayan. Pendekatan ini memastikan pelayan gema dan pelanggan berfungsi sepenuhnya.
Atas ialah kandungan terperinci Mengapa Pelayan Gema Soket Go Unix Saya Putuskan Sambungan: Masalah Komunikasi Sehala?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!