<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                ThinkChat2.0新版上線,更智能更精彩,支持會話、畫圖、視頻、閱讀、搜索等,送10W Token,即刻開啟你的AI之旅 廣告
                ~~~ package main import ( "fmt" "golang.org/x/net/websocket" "net/http" "runtime" "strconv" "strings" "sync" "time" ) var list map[int]map[*websocket.Conn]*websocket.Conn //所屬聊天室里的連接 (map[int] 保存的是聊天室id) var ch map[int]chan []byte //加入聊天室后接收的信息 var msg map[int][][]byte //加入聊天室前接收的信息 var mu sync.Mutex func svrConnHandler(conn *websocket.Conn) { r := conn.Request() r.ParseForm() fGroupid := r.Form["groupid"][0] //聊天室Id groupid, _ := strconv.Atoi(fGroupid) // fUserid := r.Form["userid"][0] //用戶Id userid, _ := strconv.Atoi(fUserid) // name := r.Form["name"][0] //用戶名稱 _, ok := list[groupid] if !ok { //初始化聊天室 list[groupid] = make(map[*websocket.Conn]*websocket.Conn, 500) ch[groupid] = make(chan []byte, 500) msg[groupid] = make([][]byte, 0, 500) } //TODO : 斷線重連后, 又讀取了一次歷史數據(是否在定義一個message2方法, 讓第二次連接的訪問這個方法? 或者每次斷線重連的時候清空之前顯示的消息) //獲取歷史數據(視頻直播聊天需求:要求新加入的用戶也能獲取之前的聊天記錄) go func() { mu.Lock() //加鎖, 防止在讀取歷史數據時, 有用戶發送消息 list[groupid][conn] = conn for _, v := range msg[groupid] { conn.Write(v) } mu.Unlock() }() //接收客戶端消息 go func() { var content [1024]byte for { n, err := conn.Read(content[:]) if err != nil { delete(list[groupid], conn) conn.Close() break } if n > 0 { //string(content[:]) 是 string 類型沒錯,只是這個 string 有 1024 個字符(后面 1020 個字符都是 0x00)。 if string(content[:n]) == string("ping www.51websocket.cn") { content = [1024]byte{} continue } content2 := append([]byte(fmt.Sprint(userid, ":::", name, ":::")), content[:n]...) ch[groupid] <- content2 content = [1024]byte{} } } }() //向客戶端發送消息 if !ok { for { select { case content := <-ch[groupid]: mu.Lock() message := strings.Split(string(content), ":::") msg[groupid] = append(msg[groupid], []byte("<span class='name'>"+message[1]+":"+"</span>"+message[2])) for _, v := range list[groupid] { v.Write([]byte("<span class='name'>" + message[1] + ":" + "</span>" + message[2])) } mu.Unlock() /* 將用戶留言保存到數據庫 go func() { usermsg, _ := strconv.Atoi(message[0]) zdbmodel.InsertMessage(groupid, usermsg, message[1], message[2]) }() */ } } //<--向客戶端發送消息--> } else { for { time.Sleep(time.Second * 60 * 60) } } } func main() { list = make(map[int]map[*websocket.Conn]*websocket.Conn, 100) ch = make(map[int]chan []byte, 10) msg = make(map[int][][]byte, 100) http.Handle("/message", websocket.Handler(svrConnHandler)) err := http.ListenAndServe(":8095", nil) SimplePanic(err) } func SimplePanic(err error) { if err != nil { _, file, line, _ := runtime.Caller(1) fmt.Println(file, line, err) runtime.Goexit() } } ~~~
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看