Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Pengaturcaraan soket dan penulisan sebelah pelayan dalam bahasa Go

Pengaturcaraan soket dan penulisan sebelah pelayan dalam bahasa Go

WBOY
WBOYasal
2023-05-31 23:40:572203semak imbas

Dengan perkembangan pesat Internet, lebih banyak aplikasi memerlukan komunikasi rangkaian, dan pengaturcaraan soket telah menjadi kaedah pengaturcaraan yang penting. Bahasa Go ialah bahasa pengaturcaraan yang telah menarik banyak perhatian sejak beberapa tahun kebelakangan ini, dan ia juga mempunyai kelebihan unik dalam bidang pengaturcaraan rangkaian. Artikel ini akan memperkenalkan pengaturcaraan soket dalam bahasa Go dan cara menulis program pelayan mudah.

1. Gambaran keseluruhan pengaturcaraan soket

Soket ialah lapisan abstraksi yang disediakan antara lapisan aplikasi dan lapisan pengangkutan, yang membolehkan aplikasi berkomunikasi melalui rangkaian. Untuk kebanyakan aplikasi, soket adalah pintu masuk dan keluar untuk komunikasi rangkaian. Secara khusus, dalam pengaturcaraan soket, soket boleh dianggap sebagai jenis fail khas Program ini boleh melakukan komunikasi rangkaian dengan membaca dan menulis "fail" ini.

Kandungan teras pengaturcaraan Socket termasuk aspek berikut:

1 Cipta soket

Sebelum mencipta soket, anda perlu menjelaskan protokol yang digunakan: TCP atau. UDP . Pilihan protokol akan secara langsung mempengaruhi kaedah pengaturcaraan seterusnya. Dalam bahasa Go, anda boleh memanggil fungsi yang sepadan dalam pakej bersih untuk membuat soket.

2. Ikat alamat dan port

Untuk klien mencari pelayan, pelayan perlu mengikat alamat pendengaran dan port. Dalam bahasa Pergi, anda boleh memanggil fungsi Dengar dalam pakej bersih untuk melengkapkan pengikatan alamat dan port.

3 Dengar permintaan sambungan pelanggan

Sebaik sahaja pelayan mengikat alamat dan port, ia akan mula mendengar permintaan sambungan pelanggan. Dalam bahasa Go, anda boleh menggabungkan goroutine dan memilih pernyataan untuk memantau berbilang soket secara serentak.

4 Terima dan memproses permintaan pelanggan

Apabila pelanggan meminta untuk mewujudkan sambungan, pelayan perlu memanggil fungsi Terima untuk menerima permintaan pelanggan dan menyerahkan permintaan pelanggan kepada sub- coroutine.

5. Menghantar dan menerima data

Selepas klien dan pelayan membuat sambungan, kedua-dua pihak boleh menghantar dan menerima data melalui Socket. Dalam bahasa Pergi, anda boleh memanggil fungsi Tulis dan Baca dalam pakej bersih untuk menghantar dan menerima data.

2. Pengaturcaraan sebelah pelayan dalam bahasa Go

Setelah memahami pengetahuan asas pengaturcaraan soket, kita boleh mula menulis program sebelah pelayan. Bahagian ini akan mengambil program gema ringkas sebagai contoh untuk memperkenalkan cara menulis program pelayan menggunakan bahasa Go.

1 Cipta soket

Dalam bahasa Go, anda boleh mencipta soket dengan memanggil fungsi Dengar dalam pakej bersih. Parameter fungsi Dengar ialah rentetan, yang mewakili alamat dan nombor port yang ingin kami ikat. Jika port ialah 0, port percuma diperuntukkan. Kod berikut menunjukkan cara membuat soket TCP dan mengikatnya ke port tempatan 8000.

listener, err := net.Listen("tcp", ":8000")
if err != nil {
    fmt.Println("Error listen:", err)
    return
}
defer listener.Close()

2. Pantau permintaan sambungan pelanggan

Selepas mencipta soket, kami perlu memantau permintaan sambungan pelanggan secara berterusan. Dalam bahasa Go, kita boleh menggunakan gelung infinite for untuk terus memanggil fungsi Terima dan menunggu permintaan sambungan pelanggan. Fungsi Terima mengembalikan sambungan objek Soket yang disambungkan oleh pelanggan.

for {
    conn, err := listener.Accept()
    if err != nil {
        fmt.Println("Error accept:", err)
        return
    }
    go handleConnection(conn)
}

3. Memproses permintaan pelanggan

Kaedah memproses permintaan pelanggan diletakkan dalam sub-coroutine, supaya CPU berbilang teras boleh digunakan sepenuhnya untuk meningkatkan keupayaan pemprosesan serentak. Artikel ini mengambil program gema sebagai contoh, yang mengembalikan data yang dihantar oleh klien kepada klien secara utuh.

func handleConnection(conn net.Conn) {
    buf := make([]byte, 1024)
    defer conn.Close()
    for {
        n, err := conn.Read(buf)
        if err != nil {
            fmt.Println("Error reading:", err)
            return
        }
        fmt.Println("Received:", string(buf[:n]))
        _, err = conn.Write(buf[:n])
        if err != nil {
            fmt.Println("Error writing:", err)
            return
        }
    }
}

4. Kod lengkap

Berikut ialah kod program pelayan gema yang lengkap:

package main

import (
    "fmt"
    "net"
)

func main() {
    listener, err := net.Listen("tcp", ":8000")
    if err != nil {
        fmt.Println("Error listen:", err)
        return
    }
    defer listener.Close()

    fmt.Println("Listening on :8000")

    for {
        conn, err := listener.Accept()
        if err != nil {
            fmt.Println("Error accept:", err)
            continue
        }
        fmt.Println("New client connected")
        go handleConnection(conn)
    }
}

func handleConnection(conn net.Conn) {
    buf := make([]byte, 1024)
    defer conn.Close()
    for {
        n, err := conn.Read(buf)
        if err != nil {
            fmt.Println("Error reading:", err)
            return
        }
        fmt.Println("Received:", string(buf[:n]))
        _, err = conn.Write(buf[:n])
        if err != nil {
            fmt.Println("Error writing:", err)
            return
        }
    }
}

Melalui kod di atas, kita dapat melihat bahawa dalam bahasa Go, Sangat mudah untuk melaksanakan program pelayan gema yang mudah.

3. Ringkasan

Artikel ini terutamanya memperkenalkan konsep asas pengaturcaraan soket dan cara menulis program pelayan gema yang paling mudah dalam bahasa Go. Bahasa Go menyediakan antara muka pengaturcaraan rangkaian yang sangat ringkas dan mudah digunakan, yang boleh mengurangkan kos pembelajaran pengaturcara dan kesukaran pengaturcaraan, serta meningkatkan kecekapan pengaturcaraan dan kecekapan operasi. Untuk aplikasi yang memerlukan komunikasi rangkaian, bahasa Go sudah pasti merupakan pilihan yang sangat baik.

Atas ialah kandungan terperinci Pengaturcaraan soket dan penulisan sebelah pelayan dalam bahasa Go. 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