這次的就直接發放程式碼截圖吧,應該是用go語言做後台一個簡易的聊天,這裡沒用到什麼特別的知識,最樸實的來實現效果,主要目的是分享下h5怎麼用websocket ,go搭建websocket服務的主要部分。
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)) //开始监听 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 { //判断是否重复连接 if _, ok := users[ws]; !ok { users[ws] = "匿名" } userMsgsLen := len(datas.UserMsgs) fmt.Println("UserMsgs", userMsgsLen, "users长度:", len(users)) //有消息时,全部分发送数据 if userMsgsLen > 0 { b, errMarshl := json.Marshal(datas) if errMarshl != nil { fmt.Println("全局消息内容异常...") break } for key, _ := range users { errMarshl = websocket.Message.Send(key, string(b)) if errMarshl != nil { //移除出错的链接 delete(users, key) fmt.Println("发送出错...") break } } datas.UserMsgs = make([]UserMsg, 0) } fmt.Println("开始解析数据...") 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("解析数据异常...") break } fmt.Println("请求数据类型:", userMsg.DataType) switch userMsg.DataType { case "send": //赋值对应的昵称到ws if _, ok := users[ws]; ok { users[ws] = userMsg.UserName //清除连接人昵称信息 datas.UserDatas = make([]UserData, 0) //重新加载当前在线连接人 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程式碼部分:
效果圖:
#以上是html5使用go+websocket搭建websocket服務的實例的詳細內容。更多資訊請關注PHP中文網其他相關文章!