<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>

                ??一站式輕松地調用各大LLM模型接口,支持GPT4、智譜、豆包、星火、月之暗面及文生圖、文生視頻 廣告
                ~~~ package main //如果是服務掛了, 重啟的話, 重數據庫里讀取聊天信息 import ( "chatbox/zdbmodel" "chatbox/zlogs" "golang.org/x/net/websocket" "net/http" "strconv" "fmt" "time" "strings" ) //直播間信息 type LiveRoom struct { user map[int]*UserInfo //直播間用戶 ch chan []byte //發送彈幕 msg [][]byte //歷史彈幕 } //用戶信息 type UserInfo struct { id int //用戶Id name string //用戶名稱 conn *websocket.Conn //當前用戶的連接 connType int //用戶類型 1-游客 2-會員 } //公共函數 func commAtoi(s string) (int) { if n, err := strconv.Atoi(s); err == nil { return n } return 0 } var list map[int]*LiveRoom var roomUser map[int]*UserInfo var roomCh chan []byte var roomMsg [][]byte func svrConnHandler(conn *websocket.Conn) { //TODO : 表單數據處理 r := conn.Request() r.ParseForm() roomId := r.Form["roomId"][0] userId := r.Form["userId"][0] userName := r.Form["userName"][0] connType := r.Form["connType"][0] rId := commAtoi(roomId) uId := commAtoi(userId) cType := commAtoi(connType) //TODO : 構建結構體 uInfo := &UserInfo{ id: uId, name: userName, conn: conn, connType: cType, } _, ok := list[rId] if !ok { roomUser = make(map[int]*UserInfo, 100) roomCh = make(chan []byte, 100) roomMsg = make([][]byte, 100) } roomUser[uId] = uInfo list[rId] = &LiveRoom{ user: roomUser, ch: roomCh, msg: roomMsg, } //TODO : 接收客戶端消息 go func() { var content [1024]byte for { connUserInfo := list[rId].user[uId] n, err := connUserInfo.conn.Read(content[:]) if err != nil { list[rId].user[uId].conn.Close() delete(list[rId].user, uId) break } if n > 0 { if string(content[:n]) == string("ping www.51websocket.cn") { content = [1024]byte{} continue } content2 := append([]byte(fmt.Sprint(userId, ":::", userName, ":::")), content[:n]...) list[rId].ch <- content2 content = [1024]byte{} } } }() //TODO : 向客戶端發送消息 if !ok { for { select { case content := <-list[rId].ch: message := strings.Split(string(content), ":::") list[rId].msg = append(list[rId].msg, []byte("<span class='name'>"+message[1]+":"+"</span>"+message[2])) for _, v := range list[rId].user { v.conn.Write([]byte("<span class='name'>" + message[1] + ":" + "</span>" + message[2])) } } } //<--向客戶端發送消息--> } else { for { time.Sleep(time.Second * 60 * 60) } } } func main() { list = make(map[int]*LiveRoom, 10) zlogs.InitLog() zdbmodel.InitDb() http.Handle("/message", websocket.Handler(svrConnHandler)) err := http.ListenAndServe(":8095", nil) zlogs.ErrorLog(err) } ~~~
                  <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>

                              哎呀哎呀视频在线观看