Rumah >pembangunan bahagian belakang >Golang >Mengapa Pelayan Gema Soket Go Unix Saya Putuskan Sambungan: Masalah Komunikasi Sehala?

Mengapa Pelayan Gema Soket Go Unix Saya Putuskan Sambungan: Masalah Komunikasi Sehala?

DDD
DDDasal
2024-12-02 21:16:12223semak imbas

Why Does My Go Unix Socket Echo Server Disconnect: A Unidirectional Communication Problem?

Komunikasi Sehala dalam Soket Unix: Menyelesaikan Putus Sambungan Pelayan Gema

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.

Isunya

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 Pelanggan Dibetulkan

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)
    }
}

Pemikiran Akhir

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!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn