瀏覽器與go語言的websocket通信


簡介
WebSocket是HTML5一種新的協議。顧名思義,它在服務器和瀏覽器之間建立了全雙工通信。

需求背景
區塊鏈測試系統web前端平台需要動態接收后端發送的狀態信息改變一次測試session過程的狀態顯示,測試用例在運行后會返回一次運行的session,后端根據該session實時返回測試狀態。

思路過程:
1.找到go語言websocket官方文檔github官方地址https://github.com/gorilla/websocket
2.git clone代碼,運行官方用例教程server
3.前端使用h5的websocket服務訪問server
4.根據項目需求封裝接口



bug踩坑:
1.can't load package: package server: build constraints exclude all Go files in /home/zeng/go-websocket/src/server
去掉  // +build ignore 即可

2.Firefox 無法建立到 ws://localhost:8080/echo 服務器的連接。
server配置跨域訪問
var upgrader = websocket.Upgrader{
    // 解決跨域問題
    CheckOrigin: func(r *http.Request) bool {
        return true
    },
}

前端主要代碼:
<!doctype html>
<html>
<head>
    <meta charset="UTF-8">
    <title>WebSocket</title>
</head>
<body>
<h1>WebSocket</h1>
<script>
    var websocket  = new WebSocket("ws://localhost:8080/echo");
    websocket.onopen = function () {
        session = "abcd"
        websocket.send(session);
        console.log(websocket.readyState)
    }
    websocket.onmessage = function (event) {
        console.log(event.data);
        websocket.close()
    }
    websocket.onclose = function() {
        alert("連接已關閉...");
    };
</script>
</body>
</html>

后端主要代碼:
package main

import (
    "SocketService"
    "encoding/json"
    "fmt"
    "time"
)

type Test struct {
    Id   string
    Data string
}

func main() {
    url := "localhost:8080"
    SocketService.Init(url)
    time.Sleep(time.Second * 10)
    err := SocketService.SendMessage("abc", []byte("zeng"))
    if err != nil {
        fmt.Println("1:", err)
    }
    t := Test{"Id", "Data"}
    d, _ := json.Marshal(t)
    session := "abcd"
    SocketService.SendMessage(session, d)

    if err != nil {
        fmt.Println("2:", err)
    }
    time.Sleep(time.Second * 1000)

}


參考博客:
https://blog.csdn.net/imliutao2/article/details/80838975
https://blog.csdn.net/wang_gongzi/article/details/82860427

demo傳送門:https://github.com/umbrellahusky/gowebsocket

郵箱:2919033008@qq.com
qq:2919033008


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM