小程序模板網(wǎng)

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

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

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

 

本節(jié)思路

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

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

3、用戶的uuid,又對應著go服務端里面的一個map

 

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

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

 

安裝redis的go客戶端

 

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

服務器端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. //用戶列表新增當前用戶
  66. ActiveClients


易優(yōu)小程序(企業(yè)版)+靈活api+前后代碼開源 碼云倉庫:starfork
本文地址:http://22321a.com/wxmini/doc/course/23634.html 復制鏈接 如需定制請聯(lián)系易優(yōu)客服咨詢:800182392 點擊咨詢
QQ在線咨詢