十年網(wǎng)站開發(fā)經(jīng)驗(yàn) + 多家企業(yè)客戶 + 靠譜的建站團(tuán)隊(duì)
量身定制 + 運(yùn)營維護(hù)+專業(yè)推廣+無憂售后,網(wǎng)站問題一站解決
這篇文章主要介紹html5怎么使用go+websocket搭建websocket服務(wù),文中介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們一定要看完!
創(chuàng)新互聯(lián)專注于樂亭網(wǎng)站建設(shè)服務(wù)及定制,我們擁有豐富的企業(yè)做網(wǎng)站經(jīng)驗(yàn)。 熱誠為您提供樂亭營銷型網(wǎng)站建設(shè),樂亭網(wǎng)站制作、樂亭網(wǎng)頁設(shè)計(jì)、樂亭網(wǎng)站官網(wǎng)定制、重慶小程序開發(fā)公司服務(wù),打造樂亭網(wǎng)絡(luò)公司原創(chuàng)品牌,更為您提供樂亭網(wǎng)站排名全網(wǎng)營銷落地服務(wù)。
這次的就直接發(fā)放代碼截圖吧,應(yīng)該是用go語言做后臺一個簡易的聊天,這里沒用到什么特別的知識,最樸實(shí)的來實(shí)現(xiàn)效果,主要目的是分享下h6怎么用websocket,go搭建websocket服務(wù)的主要部分。
go代碼部分:
// WebChat project main.go package main import ( "fmt" "net/http" "time" "encoding/json" "strings" "golang.org/x/net/websocket" ) //全局信息 var datas Datas var users map[*websocket.Conn]string func main() { fmt.Println("啟動時間") fmt.Println(time.Now()) //初始化 datas = Datas{} users = make(map[*websocket.Conn]string) //綁定效果頁面 http.HandleFunc("/", h_index) //綁定socket方法 http.Handle("/webSocket", websocket.Handler(h_webSocket)) //開始監(jiān)聽 http.ListenAndServe(":8", nil) } func h_index(w http.ResponseWriter, r *http.Request) { http.ServeFile(w, r, "index.html") } func h_webSocket(ws *websocket.Conn) { var userMsg UserMsg var data string for { //判斷是否重復(fù)連接 if _, ok := users[ws]; !ok { users[ws] = "匿名" } userMsgsLen := len(datas.UserMsgs) fmt.Println("UserMsgs", userMsgsLen, "users長度:", len(users)) //有消息時,全部分發(fā)送數(shù)據(jù) if userMsgsLen > 0 { b, errMarshl := json.Marshal(datas) if errMarshl != nil { fmt.Println("全局消息內(nèi)容異常...") break } for key, _ := range users { errMarshl = websocket.Message.Send(key, string(b)) if errMarshl != nil { //移除出錯的鏈接 delete(users, key) fmt.Println("發(fā)送出錯...") break } } datas.UserMsgs = make([]UserMsg, 0) } fmt.Println("開始解析數(shù)據(jù)...") err := websocket.Message.Receive(ws, &data) fmt.Println("data:", data) if err != nil { //移除出錯的鏈接 delete(users, ws) fmt.Println("接收出錯...") break } data = strings.Replace(data, "\n", "", 0) err = json.Unmarshal([]byte(data), &userMsg) if err != nil { fmt.Println("解析數(shù)據(jù)異常...") break } fmt.Println("請求數(shù)據(jù)類型:", userMsg.DataType) switch userMsg.DataType { case "send": //賦值對應(yīng)的昵稱到ws if _, ok := users[ws]; ok { users[ws] = userMsg.UserName //清除連接人昵稱信息 datas.UserDatas = make([]UserData, 0) //重新加載當(dāng)前在線連接人 for _, item := range users { userData := UserData{UserName: item} datas.UserDatas = append(datas.UserDatas, userData) } } datas.UserMsgs = append(datas.UserMsgs, userMsg) } } } type UserMsg struct { UserName string Msg string DataType string } type UserData struct { UserName string } type Datas struct { UserMsgs []UserMsg UserDatas []UserData }
html代碼部分:
內(nèi)容:在線:
昵稱: 聊聊:
效果圖:
以上是“html5怎么使用go+websocket搭建websocket服務(wù)”這篇文章的所有內(nèi)容,感謝各位的閱讀!希望分享的內(nèi)容對大家有幫助,更多相關(guān)知識,歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道!