直播商城原始碼,實現商城客服聊天,傳送文字、圖片的功能
直播商城原始碼,實現商城客服聊天,傳送文字、圖片的功能
1.實現的思路
由於之前寫python的時候接觸過websocket,但是當時是使用類似於廣播的機制的,沒有做過一對一的聊天.但是既然知道了廣播,那一對一也就不是什麼難事了
首先客戶端連線上來時,伺服器會例項化每個客戶端的連線,並且儲存這些連線,這時候只需要前端傳送訊息時,帶有聯絡人的id 這樣就可以根據id 找到聯絡人傳送訊息了
2.Demo 示例
下面是gin 實現的一個介面,使用 ws協議 連線該介面,然後就可以儲存一個ws的連線
// 把 http 升級為 ws func Login(c *gin.Context) { tid := c.Query("tid") userID , err := strconv.ParseInt(tid, 10, 64) if err != nil { c.JSON(http.StatusOK, gin.H{"code": 10, "arg-err": db.InvalidArgument}) return } Logger.Info(" ------ 請求頭 ------", c.Request.Header) Logger.Info("ws 連線請求") userInfo, err := db.FindUser(userID) if err != nil { Logger.Info("ws 連線失敗,找不到使用者資訊", err) c.JSON(http.StatusOK, gin.H{"code": 10, "arg-err": db.InvalidArgument}) return } conn, err := Upgrader.Upgrade(c.Writer, c.Request, nil) if err != nil { Logger.Error("http 協議升級為ws 協議失敗:", err) return } uniqueID := utils.UUID() wsClient := &Client{ID: utils.UUID(), Socket: conn, Send: make(chan []byte), UserInfo:userInfo, ConnID:uniqueID} go wsClient.Read() Manager.Register <- wsClient Logger.Infof("ws 登陸成功 ip %v 使用者id %v", conn.RemoteAddr(), *wsClient.UserInfo.TID) }
聊天功能demo
聊天功能主要是每個連線開了一個go 協程去檢查該連線是否有訊息,如果有訊息 則檢查它要發給哪個使用者,找到那個使用者的連線,發過去即可
func (c *Client) Read() { defer func() { Manager.Unregister <- c c.Socket.Close() }() for { Logger.Infof("使用者 %v 等待訊息中....", *c.UserInfo.TID) _, message, err := c.Socket.ReadMessage() if err != nil { Logger.Error("讀取訊息失敗 ", err) Manager.Unregister <- c c.Socket.Close() break } Logger.Info("====== ws 訊息 ====== ", string(message)) var content Message err = json.Unmarshal(message, &content) if err != nil { Logger.Error("接收訊息失敗 ", err) continue } if content.Content == "logout" { Manager.Unregister <- c c.Socket.Close() break } if (content.Recipient == 0 || len(content.Content) == 0) && len(content.Image) < 0 { Logger.Error("無效的訊息 ") continue } // 儲存聊天記錄 unRead := db.MessageUnRead msgType := content.Type chat := &db.Chat{} fromUser := c.UserInfo.TID chat.FromUser = fromUser chat.ToUser = &content.Recipient chat.Content = &content.Content chat.Image = &content.Image chat.Status = &unRead chat.Type = &msgType db.SaveChat(chat) now := time.Now() nowTimeStamp := db.JSONTime{Time:now} content.MsgID = *chat.TID content.Timestamp = nowTimeStamp content.Sender = *fromUser // 轉發給另外一端 Logger.Infof("使用者 %v 發訊息 %v 給另外一個使用者 %v ", *fromUser, content.Content, content.Recipient) Manager.ChatTo(content.Recipient, &content) } } func (manager *ClientManager) ChatTo(userID int64, msg *Message) { manager.Clients.Range(func(k, v interface{}) bool { if v != nil { conn := v.(*Client) if *conn.UserInfo.TID == userID { message, err := json.Marshal(msg) if err != nil { Logger.Error("聊天失敗") return true } Logger.Info("傳送給 ", *conn.UserInfo.TID) err = conn.Socket.WriteMessage(websocket.TextMessage, message) if err != nil { Logger.Error("訊息轉發失敗 ", err) } } } return true }) }
關於離線訊息的處理
當聯絡人不線上時,我的處理方案是將聊天資料儲存下來標記該訊息未讀,提供一個介面查詢使用者未讀訊息,當下次使用者登陸時前端發http 請求未讀訊息即可
關於圖片傳送
這裡我的處理方案是,寫一個介面提供給前端上傳圖片上傳成功時返回圖片路徑,前端發來的聊天內容只有圖片的url,後續聊天圖片顯示通過url 請求圖片即可
以上就是直播商城原始碼,實現商城客服聊天,傳送文字、圖片的功能, 更多內容歡迎關注之後的文章
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69978258/viewspace-2870937/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 直播商城原始碼,Android實現監聽Settings值變化的功能原始碼Android
- 為了直播流暢,實現直播商城原始碼的轉碼原始碼
- 直播商城原始碼,利用Python將圖片批次改成任意格式原始碼Python
- 直播帶貨商城功能詳解布穀直播APP原始碼新增功能APP原始碼
- 實現小程直播帶貨app原始碼的紅包傳送功能APP原始碼
- 直播商城原始碼如何實現資料的單項選擇原始碼
- 夢幻直播商城軟體原始碼帶貨,移動商城定製開發功能原始碼
- vue實現聊天+圖片表情功能Vue
- 直播商城原始碼,商品展示分為視訊和圖片展示兩種方式原始碼
- 直播商城原始碼,實現左右聯動商品分類頁面原始碼
- 線上直播系統原始碼,Node.js中使用Koa實現上傳圖片功能原始碼Node.js
- 直播商城原始碼,實現系統的日間/夜間模式切換原始碼模式
- 直播商城APP功能介紹APP
- 直播系統app原始碼,藉助django 實現顯示圖片功能APP原始碼Django
- 影片直播系統原始碼,C語言實現圖片合成功能原始碼C語言
- 一文詮釋直播商城原始碼原始碼
- 直播商城系統原始碼,點選按鈕 儲存頁面為圖片到本地原始碼
- 直播商城原始碼包含哪些技術?商城直播系統開發難點有哪些?原始碼
- 泰山眾籌商城系統開發(實現方案)丨泰山眾籌商城開發原始碼及功能原始碼
- 直播商城原始碼,響應式的全螢幕背景圖(主介面背景圖)原始碼
- app直播商城原始碼,有哪些常用的加密方式APP原始碼加密
- app直播原始碼,js實現上傳圖片型別+大小+尺寸驗證APP原始碼JS型別
- 直播平臺原始碼,上傳本地圖片實現個人名片背景圖輪播原始碼地圖
- IM 聊天教程:傳送圖片 / 影片 / 語音 / 表情
- app直播原始碼,為文字/圖片新增按壓效果APP原始碼
- Android實現商城購物車功能Android
- 直播平臺原始碼,圖片放大瀏覽功能原始碼
- 微信小程式實現商城案例(賦原始碼)微信小程式原始碼
- 直播平臺搭建,實現圖片縮圖功能
- 眾籌app商城開發詳細,眾籌app商城系統開發(原始碼部署),眾籌商城系統原始碼功能APP原始碼
- 仿京東商城原始碼具備哪些功能?原始碼
- 直播系統原始碼,快速實現改變圖片尺寸原始碼
- 直播商城原始碼,密碼輸入框自定義顯示隱藏圖示原始碼密碼
- IM 聊天教程:傳送圖片 / 視訊 / 語音 / 表情
- 線上直播系統原始碼,vue實現搜尋文字高亮功能原始碼Vue
- 直播app系統原始碼,使用element ui隱藏元件實現圖片預覽功能APP原始碼UI元件
- 直播商城原始碼,vue製作簡易的購物車原始碼Vue
- 直播商城原始碼,記一次 js隨機密碼原始碼JS隨機密碼