Rumah >pembangunan bahagian belakang >Golang >Cara untuk mendengar soket web sebelah pelayan tanpa sekatan dalam Go

Cara untuk mendengar soket web sebelah pelayan tanpa sekatan dalam Go

PHPz
PHPzke hadapan
2024-02-08 20:45:09451semak imbas

如何在 Go 中非阻塞地监听服务器端 websocket

Kandungan soalan

Saya menggunakan https://pkg.go.dev/golang.org/x/net/websocket untuk mencipta websocket sebelah pelayan. Semua komunikasi melaluinya adalah dalam format json. Jadi kod saya mengandungi:

func wsHandler(ws *websocket.Conn) {
    var evnt event
    websocket.JSON.Receive(ws, &evnt)
    …

Walau bagaimanapun, ini menghalang sehingga pelanggan menutup sambungan. Saya tahu pakej websocket ini mendahului konteks (dan saya tahu terdapat pakej websocket yang lebih baharu), tetapi masih - adakah benar-benar tiada cara untuk menunggu bingkai masuk tanpa menyekat?


Jawapan betul


Ini menyekat sehingga pelanggan menutup sambungan.

Cara paling mudah untuk mengendalikan operasi menyekat serentak adalah dengan memberi mereka goroutine. Goroutine, tidak seperti proses atau benang, pada asasnya "percuma".

func wsHandler(ws *websocket.Conn) {
    go func() {
      var evnt event
      websocket.JSON.Receive(ws, &evnt)
      ....
   }()
}

Atas ialah kandungan terperinci Cara untuk mendengar soket web sebelah pelayan tanpa sekatan dalam Go. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Artikel ini dikembalikan pada:stackoverflow.com. Jika ada pelanggaran, sila hubungi admin@php.cn Padam