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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

go中的WebSocket

發布時間:2025/6/15 编程问答 24 豆豆
生活随笔 收集整理的這篇文章主要介紹了 go中的WebSocket 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

WebSocket是HTML5的重要特性,它實現了基于瀏覽器的遠程socket,它使瀏覽器和服務器可以進行全雙工通信,許多瀏覽器(Firefox、Google Chrome和Safari)都已對此做了支持。

在WebSocket出現之前,為了實現即時通信,采用的技術都是“輪詢”,即在特定的時間間隔內,由瀏覽器對服務器發出HTTP Request,服務器在收到請求后,返回最新的數據給瀏覽器刷新,“輪詢”使得瀏覽器需要對服務器不斷發出請求,這樣會占用大量帶寬。

WebSocket采用了一些特殊的報頭,使得瀏覽器和服務器只需要做一個握手的動作,就可以在瀏覽器和服務器之間建立一條連接通道。且此連接會保持在活動狀態,你可以使用JavaScript來向連接寫入或從中接收數據,就像在使用一個常規的TCP Socket一樣。它解決了Web實時化的問題,相比傳統HTTP有如下好處:

  • 一個Web客戶端只建立一個TCP連接
  • Websocket服務端可以推送(push)數據到web客戶端.
  • 有更加輕量級的頭,減少數據傳送量

WebSocket URL的起始輸入是ws://或是wss://(在SSL上)。下圖展示了WebSocket的通信過程,一個帶有特定報頭的HTTP握手被發送到了服務器端,接著在服務器端或是客戶端就可以通過JavaScript來使用某種套接口(socket),這一套接口可被用來通過事件句柄異步地接收數據。

?

?

WebSocket原理

WebSocket的協議頗為簡單,在第一次handshake通過以后,連接便建立成功,其后的通訊數據都是以”\x00″開頭,以”\xFF”結尾。在客戶端,這個是透明的,WebSocket組件會自動將原始數據“掐頭去尾”。

?

在請求中的"Sec-WebSocket-Key"是隨機的,對于整天跟編碼打交到的程序員,一眼就可以看出來:這個是一個經過base64編碼后的數據。服務器端接收到這個請求之后需要把這個字符串連接上一個固定的字符串:

258EAFA5-E914-47DA-95CA-C5AB0DC85B11

即:f7cb4ezEAl6C3wRaU6JORA==連接上那一串固定字符串,生成一個這樣的字符串:

f7cb4ezEAl6C3wRaU6JORA==258EAFA5-E914-47DA-95CA-C5AB0DC85B11

對該字符串先用 sha1安全散列算法計算出二進制的值,然后用base64對其進行編碼,即可以得到握手后的字符串:

rE91AJhfC+6JdVcVXOGJEADEJdQ=

將之作為響應頭Sec-WebSocket-Accept的值反饋給客戶端。

Go實現WebSocket

Go語言標準包里面沒有提供對WebSocket的支持,但是在由官方維護的go.net子包中有對這個的支持,你可以通過如下的命令獲取該包:

go get code.google.com/p/go.net/websocket

WebSocket分為客戶端和服務端,接下來我們將實現一個簡單的例子:用戶輸入信息,客戶端通過WebSocket將信息發送給服務器端,服務器端收到信息之后主動Push信息到客戶端,然后客戶端將輸出其收到的信息,客戶端的代碼如下:

<html> <head></head> <body><script type="text/javascript">var sock = null;var wsuri = "ws://127.0.0.1:1234";window.onload = function() {console.log("onload");sock = new WebSocket(wsuri);sock.onopen = function() {console.log("connected to " + wsuri);}sock.onclose = function(e) {console.log("connection closed (" + e.code + ")");}sock.onmessage = function(e) {console.log("message received: " + e.data);}};function send() {var msg = document.getElementById('message').value;sock.send(msg);};</script><h1>WebSocket Echo Test</h1><form><p>Message: <input id="message" type="text" value="Hello, world!"></p></form><button onclick="send();">Send Message</button> </body> </html>

可以看到客戶端JS,很容易的就通過WebSocket函數建立了一個與服務器的連接sock,當握手成功后,會觸發WebScoket對象的onopen事件,告訴客戶端連接已經成功建立。客戶端一共綁定了四個事件。

  • 1)onopen 建立連接后觸發
  • 2)onmessage 收到消息后觸發
  • 3)onerror 發生錯誤時觸發
  • 4)onclose 關閉連接時觸發

我們服務器端的實現如下:

package mainimport ("code.google.com/p/go.net/websocket""fmt""log""net/http" )func Echo(ws *websocket.Conn) {var err errorfor {var reply stringif err = websocket.Message.Receive(ws, &reply); err != nil {fmt.Println("Can't receive")break}fmt.Println("Received back from client: " + reply)msg := "Received: " + replyfmt.Println("Sending to client: " + msg)if err = websocket.Message.Send(ws, msg); err != nil {fmt.Println("Can't send")break}} }func main() {http.Handle("/", websocket.Handler(Echo))if err := http.ListenAndServe(":1234", nil); err != nil {log.Fatal("ListenAndServe:", err)} }

當客戶端將用戶輸入的信息Send之后,服務器端通過Receive接收到了相應信息,然后通過Send發送了應答信息。

總結

以上是生活随笔為你收集整理的go中的WebSocket的全部內容,希望文章能夠幫你解決所遇到的問題。

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

主站蜘蛛池模板: 老司机深夜免费福利 | 成人污 | 亚洲一区二区三区四区在线 | 欧美丝袜一区二区 | 欧美色图在线观看 | 熟妇人妻中文字幕 | 一区二区三区视频在线观看免费 | 亚洲精品久久久久久久蜜桃 | 国产一卡二卡在线播放 | 一级做a爰片毛片 | 久久高清内射无套 | 一区二区三区在线免费视频 | 亚洲天堂影视 | 色视频免费观看 | 免费观看全黄做爰的视频 | 国产在线一 | 国产美女作爱全过程免费视频 | 日本人妻不卡一区二区三区中文字幕 | 中文有码av | 波多野结衣高清在线 | 免费看日产一区二区三区 | 男人天堂网在线视频 | 人妻熟女aⅴ一区二区三区汇编 | 欧美性xxxx在线播放 | www.青青草.com| 日韩视频中文 | 日本女人一区二区三区 | 男女激情网 | 成人福利网 | 一级黄色伦理片 | 亚洲欧美日韩成人 | 久色精品视频 | www.97av| 白石茉莉奈番号 | 让男按摩师摸好爽视频 | 中文字幕成人在线观看 | 亚洲精品欧美精品 | 亚洲精品一区二区三区区别 | 国产精品粉嫩 | 一本色道久久综合精品婷婷 | 免费黄色网页 | 午夜在线影院 | 日韩欧美国产网站 | 在线观看av网页 | 在线一区二区三区 | 97在线免费公开视频 | 欧美在线性爱视频 | 亚洲第一免费网站 | 97免费在线视频 | 色啪视频| 久久久久黄色片 | 国产福利一区二区三区在线观看 | 无码人妻一区二区三区免费n鬼沢 | 中文字幕av观看 | 中文字幕av网站 | 午夜免费福利小电影 | 免费人成年激情视频在线观看 | 欧美日韩国产一区二区三区在线观看 | 天天射综合网站 | 久久精品99国产国产精 | 黄色片网站免费观看 | 免费三片在线播放 | 日韩av电影中文字幕 | 麻豆免费在线播放 | 久久久一级 | 最新日韩在线 | 波多野结衣高清电影 | 91视频在线观看视频 | 中文字幕免费在线播放 | 日韩欧美高清在线 | 三级a视频 | 欧美黄色一级大片 | 一本视频在线 | 怡红院成人影院 | 午夜院线| 亚洲天堂中文字幕在线观看 | 日韩黄色短视频 | 黄色片视频播放 | 亚洲天堂日韩在线 | 最近中文字幕在线免费观看 | 亚洲精品福利网站 | 日本免费高清一区二区 | 黄色av网站在线免费观看 | 欧美日韩在线免费播放 | 国产精品亲子伦对白 | 欧美黄色片免费看 | 99爱视频在线| 亚洲精品一区二区三区不卡 | 人人看人人做 | 一区二区在线视频观看 | 国产综合免费视频 | 日韩国产欧美一区二区三区 | 欧美xxxx黑人 | 手机看片日韩福利 | 亚洲av女人18毛片水真多 | 欧美性色黄大片手机版 | 福利在线国产 | 吊侵犯の奶水授乳羞羞漫画 | 中文字幕美女 |