中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

如何在Golang中使用WebSocket實現一個通信功能

發布時間:2021-02-22 15:15:24 來源:億速云 閱讀:181 作者:Leah 欄目:開發技術

本篇文章給大家分享的是有關如何在Golang中使用WebSocket實現一個通信功能,小編覺得挺實用的,因此分享給大家學習,希望大家閱讀完這篇文章后可以有所收獲,話不多說,跟著小編一起來看看吧。

什么是golang

golang 是Google開發的一種靜態強類型、編譯型、并發型,并具有垃圾回收功能的編程語言,其語法與 C語言相近,但并不包括如枚舉、異常處理、繼承、泛型、斷言、虛函數等功能。

WebSocket是一種通信協議,旨在改善HTTP作為無狀態協議通信的效率問題,WebSocket是客戶端與服務器之間的全雙工連接,客戶端和服務器只需要建立一次連接就可以使用該連接進行通信。在我們的項目中,一般客戶端是前端頁面,使用JavaScript創建WebSocket與后端的WebSocket服務端進行通信。

下面首先看看我們的服務端代碼

package main
 
import (
 "fmt"
 "html/template"
 "net/http"
 "os"
 "strings"
 
 "golang.org/x/net/websocket"
)
 
func upper(ws *websocket.Conn) {
 var err error
 for {
 var reply string
 
 if err = websocket.Message.Receive(ws, &reply); err != nil {
  fmt.Println(err)
  continue
 }
 
 if err = websocket.Message.Send(ws, strings.ToUpper(reply)); err != nil {
  fmt.Println(err)
  continue
 }
 }
}
 
func index(w http.ResponseWriter, r *http.Request) {
 if r.Method != "GET" {
 return
 }
 
 t, _ := template.ParseFiles("index.html")
 t.Execute(w, nil)
}
 
func main() {
 http.Handle("/upper", websocket.Handler(upper))
 http.HandleFunc("/", index)
 
 if err := http.ListenAndServe(":9999", nil); err != nil {
 fmt.Println(err)
 os.Exit(1)
 }
}

我們從main函數看起,我們使用Golang的http包創建了一個Server,該Server能夠處理兩個請求,一個是/,這是Web項目的根路徑,index函數作為處理方法,返回首頁index.html。

Server還處理/upper請求,該請求的處理函數是一個WebSocket的處理函數,它包裹了我們自己定義的upper函數,upper函數有一個參數,就是服務端創建好的WebSocket連接,upper函數邏輯很簡單,通過WebSocket連接讀取服務器的請求內容,將內容轉化為大寫后,通過WebSocket將結果返回給客戶端。

<!DOCTYPE html>
<html>
<head>
  <meta charset="utf-8"/>
  <title>Websocket</title>
</head>
<body>
  <h2>字符串轉換大寫</h2>
  <form>
    <p>
      字符串: <input id="content" type="text" placeholder="輸入要轉換的字符串">
    </p>
  </form>
  <label id="result">結果為:</label><br><br>
  <button onclick="send()">轉換</button>
 
  <script type="text/javascript">
    var sock = null;
    var wsuri = "ws://127.0.0.1:9999/upper";
    sock = new WebSocket(wsuri);
    sock.onmessage = function(e) {
      var result = document.getElementById('result');
      result.innerHTML = "結果為:" + e.data;
    }
 
    function send() {
      var msg = document.getElementById('content').value;
      sock.send(msg);
    }
  </script>
</body>
</html>

前端頁面我們主要看JavaScript代碼部分,首先建立一個全局的WebSocket,之后點擊轉換按鈕時,就會將input的內容通過WebSocket發送出去。WebSocket的onmessage函數用來處理服務端的響應,還有onerror,onclose等方法,分別是WebSocket的錯誤回調和關閉回調,本文并沒有使用,一般用來處理資源回收和報錯。

Golang可以很方便的使用WebSocket,只是使用websocket.Handler包裹一個處理函數即可。

以上就是如何在Golang中使用WebSocket實現一個通信功能,小編相信有部分知識點可能是我們日常工作會見到或用到的。希望你能通過這篇文章學到更多知識。更多詳情敬請關注億速云行業資訊頻道。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

高碑店市| 汝城县| 连州市| 萝北县| 漳州市| 额尔古纳市| 东明县| 资讯| 蓝田县| 开封市| 开原市| 谢通门县| 余干县| 塘沽区| 梁山县| 太保市| 宿松县| 武陟县| 灵宝市| 饶平县| 大邑县| 久治县| 和平区| 吕梁市| 邢台市| 天峻县| 临桂县| 瑞安市| 娄烦县| 云南省| 赣州市| 武清区| 施秉县| 固镇县| 隆子县| 大田县| 思茅市| 海安县| 龙里县| 荃湾区| 讷河市|