免费国产欧美国日产_少妇AV一区二区三区无码_蜜桃精品av无码喷奶水小说_jk18禁网站视频_精产国品一二三级产品区别_被夫の上司に犯波多野结衣_78m成人手机免费看_最爽最刺激18禁视频_偷偷色噜狠狠狠狠的777米奇

易優(yōu)GEO 重磅上線 ~ 一站式GEO優(yōu)化工具,讓豆包、文心一言、DeepSeek 在回答中主動(dòng)推薦你的品牌,搶占AI流量入口!  點(diǎn)擊查看

小程序模板網(wǎng)

打造一款猜拳小程序go+websocket+redis+mysql《二》

發(fā)布時(shí)間:2018-04-18 10:06 所屬欄目:小程序開發(fā)教程

分享者:keyunq,來自原文地址

 

本節(jié)思路

1、redis的go客戶端安裝 
2、基于redis的set集合,實(shí)現(xiàn)房間的概念,一個(gè)房間對(duì)應(yīng)一個(gè)set集合,集合內(nèi)保存該房間內(nèi)用戶的唯一標(biāo)識(shí) 
我們給每個(gè)用戶生成了唯一標(biāo)識(shí)uuid(后期接入微信小程序,則可以使用微信用戶openid代替),于是set集合大致如下:

房間1 
用戶A-uuid 
用戶B-uuid 
...... 
房間2 
用戶C-uuid 
用戶D-uuid 
...... 
......

3、用戶的uuid,又對(duì)應(yīng)著go服務(wù)端里面的一個(gè)map

 

				
  1. ActiveClients = make(map[string]ClientConn)

該map以用戶的uuid為key,在線用戶的websocket鏈接為value  于是在發(fā)送消息時(shí),取到redis里某房間內(nèi)所有的uuid,就可以得到對(duì)應(yīng)的websocket鏈接,實(shí)現(xiàn)房間內(nèi)的廣播  如果限制房間內(nèi)只有2個(gè)用戶,則實(shí)現(xiàn)了一對(duì)一私聊

 

安裝redis的go客戶端

 

				
  1. go get -u github.com/go-redis/redis

服務(wù)器端go代碼:

 

				
  1. package main
  2. import (
  3. "golang.org/x/net/websocket"
  4. "fmt"
  5. "log"
  6. "net/http"
  7. "github.com/go-redis/redis"
  8. "encoding/json"
  9. )
  10.  
  11. var (
  12. JSON = websocket.JSON // codec for JSON
  13. Message = websocket.Message // codec for string, []byte
  14. ActiveClients = make(map[string]ClientConn) // map containing clients
  15. User = make(map[string]string)
  16. )
  17.  
  18. type ClientConn struct {
  19. websocket *websocket.Conn
  20. }
  21.  
  22. type UserMsg struct {
  23. Room string
  24. Cmd string
  25. User string
  26. Content string
  27. Uuid string
  28. }
  29.  
  30. func echoHandler(ws *websocket.Conn) {
  31. var err error
  32. var userMsg UserMsg
  33.  
  34. for {
  35.  
  36. var data []byte
  37. if err = websocket.Message.Receive(ws, &data); err != nil {
  38. fmt.Println("can't receive")
  39. break
  40. }
  41.  
  42. err = json.Unmarshal(data, &userMsg)
  43. fmt.Println(userMsg)
  44.  
  45. go wsHandler(ws,userMsg)
  46.  
  47. }
  48.  
  49. }
  50.  
  51. func wsHandler(ws *websocket.Conn,userMsg UserMsg) {
  52. sockCli := ClientConn{ws}
  53. var err error
  54.  
  55.  
  56. redisClient := redis.NewClient(&redis.Options{
  57. Addr: "localhost:6379",
  58. Password: "", // no password set
  59. DB: 0, // use default DB
  60. })
  61.  
  62. //登錄
  63. if userMsg.Cmd == "login" {
  64. fmt.Println("login")
  65. //用戶列表新增當(dāng)前用戶
  66. ActiveClients


易優(yōu)小程序(企業(yè)版)+靈活api+前后代碼開源 碼云倉(cāng)庫(kù):starfork
本文地址:http://www.szcjxy.com/wxmini/doc/course/23634.html 復(fù)制鏈接 如需定制請(qǐng)聯(lián)系易優(yōu)客服咨詢: 點(diǎn)擊咨詢
在線客服