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?

王林
王林asal
2023-07-30 18:43:54919semak imbas

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

Pelaksanaan kod
Pertama, kita perlu mengimport pakej yang diperlukan:

package main

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

    "github.com/gorilla/websocket"
)

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

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

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

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

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

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

go run main.go

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!");

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!

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