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

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

GO 语言websocket编程

發(fā)布時間:2025/3/21 编程问答 13 豆豆
生活随笔 收集整理的這篇文章主要介紹了 GO 语言websocket编程 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

GO提供原生的websocket API,使用時go get然后引用即可
golang.org/x/net/websocket
使用起來也很方便,直接上代碼吧。

一個echo server的代碼

package mainimport("golang.org/x/net/websocket""fmt""net/http""flag" )type WSServer struct {ListenAddr string }func (this *WSServer)handler(conn *websocket.Conn){fmt.Printf("a new ws conn: %s->%s\n", conn.RemoteAddr().String(), conn.LocalAddr().String())var err errorfor {var reply stringerr = websocket.Message.Receive(conn, &reply)if err != nil {fmt.Println("receive err:",err.Error())break}fmt.Println("Received from client: " + reply)if err = websocket.Message.Send(conn, reply); err != nil {fmt.Println("send err:", err.Error())break}} } func (this *WSServer)start()(error){http.Handle("/ws", websocket.Handler(this.handler))fmt.Println("begin to listen")err := http.ListenAndServe(this.ListenAddr, nil)if err != nil {fmt.Println("ListenAndServe:", err)return err}fmt.Println("start end")return nil }func main(){addr := flag.String("a", "127.0.1.1:12345", "websocket server listen address")flag.Parse()wsServer := &WSServer{ListenAddr : *addr,}wsServer.start()fmt.Println("------end-------") }

上述代碼中,每來一個新的websocket client,server會起一個goroutine執(zhí)行WSSever的handler函數(shù)。

websocket client代碼實(shí)例

package mainimport ("flag""fmt""time""golang.org/x/net/websocket" )var addr = flag.String("addr", "127.0.0.1:12345", "http service address")func main() {flag.Parse()url := "ws://"+ *addr + "/ws"origin := "test://1111111/"ws, err := websocket.Dial(url, "", origin)if err != nil {fmt.Println(err)}go timeWriter(ws)for {var msg [512]byte_, err := ws.Read(msg[:])//此處阻塞,等待有數(shù)據(jù)可讀if err != nil {fmt.Println("read:", err)return}fmt.Printf("received: %s\n", msg)} }func timeWriter(conn *websocket.Conn) {for {time.Sleep(time.Second * 2)websocket.Message.Send(conn, "hello world")} }

client的代碼,每隔2秒鐘發(fā)送hello world到server,然后阻塞在Read函數(shù)。需要注意的是origin必須以“http://1111111/” 這種標(biāo)準(zhǔn)的URI格式,否則報錯“invalid URI for request”。

關(guān)閉進(jìn)程、網(wǎng)絡(luò)斷線等異常情況

關(guān)閉進(jìn)程

無論server還是client,關(guān)閉進(jìn)程,對端Read都會立刻收到EOF,對EOF做處理即可。

網(wǎng)絡(luò)斷線

  • 測試
    client和server部署在不同機(jī)器上,client每隔2秒中向server發(fā)送數(shù)據(jù),server收到后回吐給客戶端。這個過程中,拔掉client的網(wǎng)線。
  • 測試結(jié)果
  • 斷網(wǎng)后,client一定時間內(nèi)寫都能成功返回,但是因為斷網(wǎng)實(shí)際沒有發(fā)送出去,數(shù)據(jù)寫到了底層tcp的緩沖區(qū)。
  • 過一段時間后,1分鐘左右,client Read返回錯誤“read: operation timed out”。Write會返回“write: broken pipe”。這個可能是Go中websocket實(shí)現(xiàn)時加了超時機(jī)制,也有可能是設(shè)置了底層TCP SO_KEEPALIVE,檢測到了網(wǎng)絡(luò)不可用。
  • 在Read/Write返回錯誤之前,重新連上網(wǎng)絡(luò),可以繼續(xù)發(fā)送和接受數(shù)據(jù)。這個可以從TCP的實(shí)現(xiàn)上解釋。TCP連接并不是物理連接,本質(zhì)上就是連接兩端各自系統(tǒng)內(nèi)核維護(hù)的一個四元組。客戶端斷線,在一定時間內(nèi)并不會導(dǎo)致四元組的釋放。所以當(dāng)連上網(wǎng)線后此TCP連接可以自動恢復(fù),繼續(xù)進(jìn)行正常的網(wǎng)絡(luò)操作。
  • 斷線重連到其他網(wǎng)絡(luò),相當(dāng)于斷網(wǎng)。這個很好解釋,連上其他網(wǎng)絡(luò),IP地址都改變了,之前的四元組不可用。

--------------------- 本文來自 阿冬哥 的CSDN 博客 ,全文地址請點(diǎn)擊:https://blog.csdn.net/c359719435/article/details/78845719?utm_source=copy

總結(jié)

以上是生活随笔為你收集整理的GO 语言websocket编程的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 国产精品视频网站 | 99ri视频 | av成人在线电影 | 欧美乱妇日本无乱码特黄大片 | 日本黄色录像片 | 深夜福利91 | 成人tiktok黄短视频 | 国产免费av片在线观看 | 婷婷伊人五月 | 天堂av一区二区 | 人妻精品无码一区二区三区 | 国产精品一级片 | 播放毛片 | 免费av网站在线 | 五月激情婷婷网 | 日本不卡不卡 | 亚洲综合视频一区 | 91精品久久久久久久 | 国产亚洲精品久久久久动 | 色撸撸在线 | 国产精品网站视频 | 天天躁夜夜躁狠狠躁 | 亚洲视频一区二区三区在线观看 | 白石茉莉奈黑人 | 18禁男女爽爽爽午夜网站免费 | 在线91视频 | 久久乐国产精品 | 中文字幕永久在线观看 | 色片在线免费观看 | 97精品人妻一区二区三区蜜桃 | 国产精品2 | 欧美色xxxxx 日本精品一区二区三区四区的功能 | 色欧美亚洲 | 色呦网站 | 男人操女人网站 | 免费91视频 | 四虎成人影视 | 一区二区三区免费 | 免费看操片 | 97xxxxx| 一级α片免费看刺激高潮视频 | 超碰在线免费播放 | 草草影院发布页 | 自拍超碰 | 一级黄色淫片 | 任你躁av一区二区三区 | 国产美女永久免费 | 中文日韩| 人人射人人插 | 最新中文字幕在线观看 | 看久久 | 超碰网站在线 | 精品人妻一区二区三区久久夜夜嗨 | 色噜噜狠狠一区二区 | 亚洲福利在线视频 | 91丝袜呻吟高潮美腿白嫩在线观看 | 亚洲久久在线观看 | 中文字幕av观看 | 午夜网| 欧美激情影院 | 国产精品久久久久久久久久久久久久久久久久 | 在线免费观看www | 人体裸体bbb欣赏 | 91麻豆精品国产91久久久更新时间 | 中文字幕永久在线播放 | 精品99久久久久成人网站免费 | 性久久久久久久久 | 性涩av| 国产suv精品一区二区三区 | 丁香六月激情综合 | 成人在线超碰 | 国产亚洲精品熟女国产成人 | 精品一区二区在线播放 | 神马午夜在线观看 | 日韩av在线播放观看 | 国产欧美日韩精品在线观看 | 久精品免费视频 | 污污的视频网站在线观看 | 熟妇人妻久久中文字幕 | 精品毛片在线观看 | 日韩中文字幕精品 | 内射干少妇亚洲69xxx | 亚洲17p | 夜夜天天拍拍 | 香蕉视频网站 | 欧美日a| 综合久久伊人 | 欧美一区二区三区影视 | 91污网站| 精品欧美国产 | 素人fc2av清纯18岁 | 大香伊人久久 | 69精品久久久久久久 | 丰满熟妇人妻av无码区 | 中文字幕在线导航 | 成人区一区二区 | 日韩一区二区三区在线视频 | 久久99久久99精品免观看粉嫩 | 欧美粉嫩videosex极品 |