日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

golang(5):编写WebSocket服务,client和html5调用

發布時間:2025/1/21 编程问答 41 豆豆
生活随笔 收集整理的這篇文章主要介紹了 golang(5):编写WebSocket服务,client和html5调用 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

本文的原文連接是: http://blog.csdn.net/freewebsys/article/details/46882777 轉載請必須注明出處!

1。關于websocket

HTML5定義了WebSocket協議,能更好的節省server資源和帶寬并達到實時通訊。
在JavaEE7中也實現了WebSocket協議。
在 WebSocket API,瀏覽器和server僅僅須要要做一個握手的動作。然后,瀏覽器和server之間就形成了一條高速通道。

兩者之間就直接能夠數據互相傳送。


參考:
http://baike.baidu.com/link?

url=gSdXNTHdO4W0jS-lqdo3VOL0VDTyTh7YLXV1amAT5cEsMIgn5u0Sbay4fMJeqOiX4vaWn9E4ttit3Dxv2A_KGK

2,安裝websocket

使用的golang官方的net包以下的websocket,地址:
https://github.com/golang/net

首先設置go_path變量,參考:
http://blog.csdn.net/freewebsys/article/details/46695513

下載net包,安裝websocket模塊

#所有模塊下載 go get github.com/golang/net #做下軟連接把github目錄以下的映射到golang.org下,否則其它模塊如html安裝不上。 ln -s /usr/local/go_path/src/github.com/golang/net /usr/local/go_path/src/golang.org/x/net #安裝websocket模塊 go install golang.org/x/net/websocket

這個模塊的包結構都統一成golang.org/x/net。使用import “golang.org/x/net/websocket”引入。

文檔在:(godoc是很不錯的站點,所有golang的文檔都在上面。


https://godoc.org/golang.org/x/net/websocket

3。代碼和執行

代碼:
https://github.com/golang-samples/websocket
server代碼:終于還是掛在httpserver上面的。

package mainimport ("golang.org/x/net/websocket""fmt""log""net/http" )func echoHandler(ws *websocket.Conn) {msg := make([]byte, 512)n, err := ws.Read(msg)if err != nil {log.Fatal(err)}fmt.Printf("Receive: %s\n", msg[:n])send_msg := "[" + string(msg[:n]) + "]"m, err := ws.Write([]byte(send_msg))if err != nil {log.Fatal(err)}fmt.Printf("Send: %s\n", msg[:m]) }func main() {http.Handle("/echo", websocket.Handler(echoHandler))http.Handle("/", http.FileServer(http.Dir(".")))err := http.ListenAndServe(":8080", nil)if err != nil {panic("ListenAndServe: " + err.Error())} }

clientwebsocket調用代碼:

package mainimport ("golang.org/x/net/websocket""fmt""log" )var origin = "http://127.0.0.1:8080/" var url = "ws://127.0.0.1:8080/echo"func main() {ws, err := websocket.Dial(url, "", origin)if err != nil {log.Fatal(err)}message := []byte("hello, world!你好")_, err = ws.Write(message)if err != nil {log.Fatal(err)}fmt.Printf("Send: %s\n", message)var msg = make([]byte, 512)m, err := ws.Read(msg)if err != nil {log.Fatal(err)}fmt.Printf("Receive: %s\n", msg[:m])ws.Close()//關閉連接 }

client使用websocket.Dial(url, “”, origin) 進行websocket連接,可是origin參數并沒有實際調用。
使用websocket進行數據的發送和接受。

很有意思的事情是,假設client和服務端都是用go寫,用的都是websocket這個對象。

函數調用都是一樣的。僅僅只是一個寫一個讀數據而已。

4。html5調用

使用jquery了。用百度的cdn:
http://cdn.code.baidu.com/
html5頁面代碼:

<!DOCTYPE html> <html> <head><meta charset="UTF-8"/><title>Sample of websocket with golang</title><script src="http://apps.bdimg.com/libs/jquery/2.1.4/jquery.min.js"></script><script>$(function() {var ws = new WebSocket("ws://localhost:8080/echo");ws.onmessage = function(e) {$('<li>').text(event.data).appendTo($ul);};var $ul = $('#msg-list');$('#sendBtn').click(function(){var data = $('#name').val();ws.send(data);});});</script> </head> <body> <input id="name" type="text"/> <input type="button" id="sendBtn" value="send"/> <ul id="msg-list"></ul> </body> </html>

當點擊button按鈕之后,websocket收到onmessage事件,然后把數據顯示到頁面。

瀏覽器顯示websocket連接狀態。


5,總結

本文的原文連接是: http://blog.csdn.net/freewebsys/article/details/46882777 轉載請必須注明出處!

使用golang開發websocket很easy。
很方便。由于nodejs做server的時候會出現server負載突然高的情況。并且nodejs的庫很雜和多,解決起來可能比較麻煩。


我還是比較傾向于用golang開發。

總結

以上是生活随笔為你收集整理的golang(5):编写WebSocket服务,client和html5调用的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。