Rumah >pembangunan bahagian belakang >Golang >Cara menutup soket dalam golang (dua cara)

Cara menutup soket dalam golang (dua cara)

PHPz
PHPzasal
2023-04-10 14:18:161224semak imbas

Di Golang, soket ialah kaedah komunikasi rangkaian yang penting. Walau bagaimanapun, apabila mengendalikan soket, kami akan menghadapi beberapa situasi yang memerlukan soket ditutup, seperti program keluar semasa masa jalanan, pengecualian, dsb. Artikel ini akan meneroka isu ini dari perspektif menutup soket di Golang.

Bagaimana untuk menutup soket di Golang? Kita boleh menggunakan dua kaedah berikut:

Kaedah pertama ialah menggunakan kaedah Close() antara muka net.Conn untuk menutup soket. Kod khusus adalah seperti berikut:

conn, err := net.Dial("tcp", "127.0.0.1:8080")
if err != nil {
    log.Fatalf("connect error: %s", err)
}

// do something with conn here

conn.Close()

Dalam kod di atas, kami mula-mula menyambung ke alamat yang ditentukan melalui kaedah Dail() dan kemudian menutup sambungan melalui kaedah Close(). Perlu diingat bahawa jika kita tidak menutup sambungan secara manual, program Go akan ditutup secara automatik apabila program keluar.

Cara kedua ialah menggunakan kaedah Close() antara muka Pendengar yang dikembalikan oleh kaedah net.Listen() untuk menutup soket. Kod khusus adalah seperti berikut:

listener, err := net.Listen("tcp", "127.0.0.1:8080")
if err != nil {
    log.Fatalf("listen error: %s", err)
}

// do something with listener here

listener.Close()

Dalam kod di atas, kami mula-mula mencipta pendengar melalui kaedah Listen() dan kemudian menutup pendengar melalui kaedah Close(). Perlu diingatkan bahawa jika kita tidak menutup pendengar secara manual, program Go akan ditutup secara automatik apabila program keluar.

Jadi, anda mungkin bertanya, selain daripada dua kaedah di atas, adakah terdapat cara lain untuk menutup soket? Sebenarnya, dua kaedah di atas sudah cukup untuk memenuhi keperluan kita. Di samping itu, jika kita menggunakan kaedah pertama, iaitu kaedah Dial() dan bukannya kaedah Listen(), ia juga boleh dilakukan untuk menutup sambungan dengan menetapkan tamat masa. Kod khusus adalah seperti berikut:

conn, err := net.DialTimeout("tcp", "127.0.0.1:8080", time.Second*2)
if err != nil {
    log.Printf("connect error: %s", err)
    return
}

// do something with conn here

conn.SetDeadline(time.Now())

Dalam kod di atas, kami membuat sambungan melalui kaedah DialTimeout() dan menetapkan tamat masa selama 2 saat. Jika pengecualian berlaku semasa sambungan, kaedah Connect membuang pengecualian dan keluar dari sambungan, jika tidak, kami boleh melakukan apa yang kami perlukan pada sambungan. Apabila kita tidak memerlukan sambungan, kita boleh menutup sambungan melalui kaedah SetDeadline().

Dalam bahasa Go, menutup soket tidak begitu rumit dan terdapat banyak cara untuk dipilih. Kita boleh menutup sambungan atau pendengar melalui kaedah Close() antara muka net.Conn atau kaedah Close() antara muka Pendengar. Selain itu, kita juga boleh menutup sambungan dengan menetapkan tamat masa. Perkara di atas adalah yang dibincangkan oleh artikel ini, saya harap ia dapat membantu anda.

Atas ialah kandungan terperinci Cara menutup soket dalam golang (dua cara). 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