欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

go語言使用gorilla/websocket實現(xiàn)websocket

 更新時間:2025年04月30日 09:01:30   作者:考慮考慮  
Gorilla WebSocket 是一個用于 Go 語言的 WebSocket 協(xié)議實現(xiàn),而且是一個優(yōu)秀的組件庫,能快速實現(xiàn)websocket協(xié)議,下面就跟隨小編一起來看看它的具體使用吧

前言

Gorilla WebSocket 是一個用于 Go 語言的 WebSocket 協(xié)議實現(xiàn),而且是一個優(yōu)秀的組件庫,能快速實現(xiàn)websocket協(xié)議

websocket實現(xiàn)

依賴安裝

使用以下依賴安裝對應(yīng)的庫

go get github.com/gorilla/websocket

程序?qū)崿F(xiàn)

package main

import (
    "fmt"
    "github.com/gorilla/websocket"
    "log"
    "net/http"
)

var upgrader = websocket.Upgrader{
    ReadBufferSize:  4196,
    WriteBufferSize: 1124,
    CheckOrigin: func(r *http.Request) bool {

       //if r.Method != "GET" {
       // fmt.Println("method is not GET")
       // return false
       //}
       //if r.URL.Path != "/ws" {
       // fmt.Println("path error")
       // return false
       //}
       return true
    },
}

var m map[string]*websocket.Conn

// ServerHTTP 用于升級協(xié)議
func ServerHTTP(w http.ResponseWriter, r *http.Request) {
    // 收到http請求之后升級協(xié)議
    conn1, err := upgrader.Upgrade(w, r, nil)
    if err != nil {
       log.Println("Error during connection upgrade:", err)
       return
    }
    userId := r.FormValue("userId")
    log.Println("userId:" + userId)
    defer conn1.Close()
    m[userId] = conn1

    conn := m[userId]

    for {
       // 服務(wù)端讀取客戶端請求
       messageType, message, err := conn.ReadMessage()
       if err != nil {
          log.Println("Error during message reading:", err)
          break
       }
       log.Printf("Received:%s", message)

       // 開啟關(guān)閉連接監(jiān)聽
       conn.SetCloseHandler(func(code int, text string) error {
          fmt.Println(code, text) // 斷開連接時將打印code和text
          return nil
       })

       //服務(wù)端給客戶端返回請求
       err = conn.WriteMessage(messageType, message)
       conn.WriteMessage(websocket.TextMessage, []byte("aaa"))
       if err != nil {
          log.Println("Error during message writing:", err)
          return
       }

    }
}

func home(w http.ResponseWriter, r *http.Request) {
    fmt.Fprintf(w, "Index Page")
}

func main() {
    //a, _ := strconv.Atoi("1")
    //fmt.Println(a)

    m = make(map[string]*websocket.Conn)

    // 創(chuàng)建HTTP服務(wù)器
    http.HandleFunc("/ws", ServerHTTP)
    log.Println("Server started on :8080")
    log.Fatal(http.ListenAndServe(":8080", nil))
}

啟動之后

使用postman連接服務(wù)端

發(fā)送消息

總結(jié)

Gorilla WebSocket 提供了一個完整且經(jīng)過測試的 WebSocket 協(xié)議實現(xiàn),適用于構(gòu)建高效的 WebSocket 應(yīng)用程序

到此這篇關(guān)于go語言使用gorilla/websocket實現(xiàn)websocket的文章就介紹到這了,更多相關(guān)go websocket內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 深入了解Go語言中web框架的中間件運行機(jī)制

    深入了解Go語言中web框架的中間件運行機(jī)制

    大家在使用iris框架搭建web系統(tǒng)時,一定會用到中間件。那么你了解中間件的運行機(jī)制嗎?你知道為什么在iris和gin框架的請求處理函數(shù)中要加c.Next()函數(shù)嗎?本文就和大家一起探究該問題的答案
    2023-02-02
  • 讓goland支持proto文件類型的實現(xiàn)

    讓goland支持proto文件類型的實現(xiàn)

    這篇文章主要介紹了讓goland支持proto文件類型的實現(xiàn)操作,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-12-12
  • 關(guān)于Go你不得不知道的一些實用小技巧

    關(guān)于Go你不得不知道的一些實用小技巧

    開發(fā)語言上Go成為高并發(fā)業(yè)務(wù)開發(fā)的主流語言,再加上云原生技術(shù)底座的驅(qū)動,Go語言風(fēng)光無限,下面這篇文章主要給大家介紹了關(guān)于Go你不得不知道的一些實用小技巧,需要的朋友可以參考下
    2022-11-11
  • go語言切片slice使用細(xì)節(jié)和注意事項整理大全

    go語言切片slice使用細(xì)節(jié)和注意事項整理大全

    這篇文章主要給大家介紹了關(guān)于go語言切片slice使用細(xì)節(jié)和注意事項整理的相關(guān)資料,需要的朋友可以參考下
    2024-05-05
  • 簡單聊聊Go語言中空結(jié)構(gòu)體和空字符串的特殊之處

    簡單聊聊Go語言中空結(jié)構(gòu)體和空字符串的特殊之處

    在日常的編程過程中,大家應(yīng)該經(jīng)常能遇到各種”空“吧,比如空指針、空結(jié)構(gòu)體、空字符串等,本文就以?Go?語言為例,一起來看看空結(jié)構(gòu)體和空字符串在?Go?語言中的特殊之處吧
    2024-03-03
  • go語言實現(xiàn)mqtt協(xié)議的實踐

    go語言實現(xiàn)mqtt協(xié)議的實踐

    MQTT是一個基于客戶端-服務(wù)器的消息發(fā)布/訂閱傳輸協(xié)議。本文主要介紹了go語言實現(xiàn)mqtt協(xié)議的實踐,文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-09-09
  • Goland debug失效詳細(xì)解決步驟(合集)

    Goland debug失效詳細(xì)解決步驟(合集)

    今天用Goland開發(fā)時,打斷點,以debug方式運行,發(fā)現(xiàn)程序并沒有斷住,程序跳過了斷點,直接運行結(jié)束,網(wǎng)上搜尋了大量文章,最后得以解決,特此在這里總結(jié)幾種Goland debug失效常見情況,需要的朋友可以參考下
    2025-02-02
  • Golang使用archive/zip包實現(xiàn)ZIP壓縮與解壓

    Golang使用archive/zip包實現(xiàn)ZIP壓縮與解壓

    Golang?中的?archive/zip?包用于處理?ZIP?格式的壓縮文件,提供了一系列用于創(chuàng)建、讀取和解壓縮?ZIP?格式文件的函數(shù)和類型,使用起來非常方便,下面就跟隨小編一起了解一下具體使用方法吧
    2023-08-08
  • 詳解golang中發(fā)送http請求的幾種常見情況

    詳解golang中發(fā)送http請求的幾種常見情況

    這篇文章主要介紹了詳解golang中發(fā)送http請求的幾種常見情況,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-12-12
  • 簡單聊聊Go語言的注釋

    簡單聊聊Go語言的注釋

    這篇文章主要介紹了簡單聊聊Go語言的注釋的相關(guān)資料,需要的朋友可以參考下
    2023-08-08

最新評論