Rumah > pembangunan bahagian belakang > Golang > Ketahui fungsi pengaturcaraan rangkaian dalam bahasa Go dan laksanakan bilik sembang pelayan WebSocket?

Ketahui fungsi pengaturcaraan rangkaian dalam bahasa Go dan laksanakan bilik sembang pelayan WebSocket?

王林
Lepaskan: 2023-07-30 18:43:54
asal
913 orang telah melayarinya

Ketahui fungsi pengaturcaraan rangkaian dalam bahasa Go dan laksanakan bilik sembang pelayan WebSocket

Pengenalan
Dengan perkembangan pesat Internet, aplikasi Web telah menjadi bahagian yang amat diperlukan dalam kehidupan orang ramai. Mencapai komunikasi masa nyata adalah salah satu komponen penting aplikasi Web. WebSocket ialah protokol yang menyediakan komunikasi dua hala dan boleh mewujudkan sambungan berterusan antara penyemak imbas dan pelayan. Artikel ini akan memperkenalkan cara menggunakan fungsi pengaturcaraan rangkaian dalam bahasa Go dan menggabungkannya dengan protokol WebSocket untuk melaksanakan pelayan bilik sembang ringkas.

Persediaan
Sebelum anda mula menulis kod, anda perlu memasang persekitaran pembangunan bahasa Go dan memahami sintaks asas Go. Selain itu, kita juga perlu menggunakan perpustakaan WebSocket sumber terbuka untuk memudahkan pemprosesan protokol WebSocket. Perpustakaan boleh dipasang dengan arahan berikut:

go get github.com/gorilla/websocket
Salin selepas log masuk

Pelaksanaan kod
Pertama, kita perlu mengimport pakej yang diperlukan:

package main

import (
    "fmt"
    "log"
    "net/http"

    "github.com/gorilla/websocket"
)
Salin selepas log masuk

Seterusnya, tentukan penaik taraf untuk sambungan WebSocket. Penaik taraf ialah http.HandlerFunc, yang menaik taraf sambungan HTTP kepada sambungan WebSocket:

var upgrader = websocket.Upgrader{
    ReadBufferSize:  1024,
    WriteBufferSize: 1024,
    CheckOrigin: func(r *http.Request) bool {
        return true
    },
}
Salin selepas log masuk

Kemudian, tentukan struktur untuk mewakili pelayan bilik sembang:

type ChatRoom struct {
    clients   map[*websocket.Conn]bool
    broadcast chan []byte
}

func newChatRoom() *ChatRoom {
    return &ChatRoom{
        clients:   make(map[*websocket.Conn]bool),
        broadcast: make(chan []byte),
    }
}
Salin selepas log masuk

Seterusnya, laksanakan kaedah pelayan bilik sembang. Yang pertama ialah fungsi handleWebSocket, yang digunakan untuk mengendalikan peningkatan sambungan WebSocket dan pemprosesan mesej:

func (c *ChatRoom) handleWebSocket(w http.ResponseWriter, r *http.Request) {
    conn, err := upgrader.Upgrade(w, r, nil)
    if err != nil {
        log.Println(err)
        return
    }

    c.clients[conn] = true

    for {
        _, msg, err := conn.ReadMessage()
        if err != nil {
            log.Println(err)
            delete(c.clients, conn)
            break
        }

        c.broadcast <- msg
    }

    defer conn.Close()
}
Salin selepas log masuk

Kemudian, laksanakan fungsi broadcastMessage, yang digunakan untuk menyiarkan mesej kepada semua pelanggan yang disambungkan:

func (c *ChatRoom) broadcastMessage() {
    for {
        msg := <-c.broadcast

        for client := range c.clients {
            err := client.WriteMessage(websocket.TextMessage, msg)
            if err != nil {
                log.Println(err)
                client.Close()
                delete(c.clients, client)
            }
        }
    }
}
Salin selepas log masuk

Akhir sekali, laksanakan fungsi utama fungsi untuk permulaan pelayan bilik sembang:

func main() {
    room := newChatRoom()

    go room.broadcastMessage()

    http.HandleFunc("/ws", room.handleWebSocket)

    err := http.ListenAndServe(":8080", nil)
    if err != nil {
        log.Fatal(err)
    }
}
Salin selepas log masuk

Jalankan
Jalankan arahan berikut dalam direktori kod untuk memulakan pelayan bilik sembang:

go run main.go
Salin selepas log masuk

Kemudian lawati http://localhost:8080 dalam penyemak imbas, buka alat pembangun penyemak imbas, dan tukar konsol Pergi ke tab WebSocket dan gunakan kod JavaScript berikut untuk menyambung ke pelayan:

var socket = new WebSocket("ws://localhost:8080/ws");

socket.onopen = function(event) {
  console.log("Connected to the server");
};

socket.onmessage = function(event) {
  console.log("Received message: " + event.data);
};

socket.onclose = function(event) {
  console.log("Disconnected from the server");
};

socket.send("Hello, server!");
Salin selepas log masuk

Kini anda boleh mempunyai komunikasi dua hala masa nyata antara penyemak imbas dan pelayan.

Ringkasan
Dengan mempelajari fungsi pengaturcaraan rangkaian dalam bahasa Go dan digabungkan dengan protokol WebSocket, kami melaksanakan pelayan bilik sembang yang mudah. WebSocket boleh mewujudkan sambungan berterusan antara penyemak imbas dan pelayan untuk mencapai komunikasi masa nyata. Dengan bantuan fungsi pengaturcaraan rangkaian Golang, kami boleh mengendalikan sambungan WebSocket dan penghantaran mesej dengan mudah. Saya harap artikel ini dapat membantu anda mempelajari pengaturcaraan rangkaian dan WebSocket dalam bahasa Go.

Atas ialah kandungan terperinci Ketahui fungsi pengaturcaraan rangkaian dalam bahasa Go dan laksanakan bilik sembang pelayan WebSocket?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
Kenyataan Laman Web ini
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
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan