小程序模板网

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

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

 

本节思路

1、redis的go客户端安装 
2、基于redis的set集合,实现房间的概念,一个房间对应一个set集合,集合内保存该房间内用户的唯一标识 
我们给每个用户生成了唯一标识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  于是在发送消息时,取到redis里某房间内所有的uuid,就可以得到对应的websocket链接,实现房间内的广播  如果限制房间内只有2个用户,则实现了一对一私聊

 

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


易优小程序(企业版)+灵活api+前后代码开源 码云仓库:starfork
本文地址:https://www.eyoucms.com/wxmini/doc/course/23634.html 复制链接 如需定制请联系易优客服咨询:800182392 点击咨询
QQ在线咨询