用户
 找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,登录网站

小程序社区 首页 教程 实战教程 查看内容

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

天下雪 2017-5-8 00:05

分享者:keyunq,来自原文地址本节思路1、redis的go客户端安装2、基于redis的set集合,实现房间的概念,一个房间对应一个set集合,集合内保存该房间内用户的唯一标识我们给每个用户生成了唯一标识uuid(后期接入微信 ...

分享者: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. var (
  11. JSON = websocket.JSON // codec for JSON
  12. Message = websocket.Message // codec for string, []byte
  13. ActiveClients = make(map[string]ClientConn) // map containing clients
  14. User = make(map[string]string)
  15. )
  16. type ClientConn struct {
  17. websocket *websocket.Conn
  18. }
  19. type UserMsg struct {
  20. Room string
  21. Cmd string
  22. User string
  23. Content string
  24. Uuid string
  25. }
  26. func echoHandler(ws *websocket.Conn) {
  27. var err error
  28. var userMsg UserMsg
  29. for {
  30. var data []byte
  31. if err = websocket.Message.Receive(ws, &data); err != nil {
  32. fmt.Println("can't receive")
  33. break
  34. }
  35. err = json.Unmarshal(data, &userMsg)
  36. fmt.Println(userMsg)
  37. go wsHandler(ws,userMsg)
  38. }
  39. }
  40. func wsHandler(ws *websocket.Conn,userMsg UserMsg) {
  41. sockCli := ClientConn{ws}
  42. var err error
  43. redisClient := redis.NewClient(&redis.Options{
  44. Addr: "localhost:6379",
  45. Password: "", // no password set
  46. DB: 0, // use default DB
  47. })
  48. //登录
  49. if userMsg.Cmd == "login" {
  50. fmt.Println("login")
  51. //用户列表新增当前用户
  52. ActiveClients
鲜花
鲜花
鸡蛋
鸡蛋
分享至 : QQ空间
收藏

相关阅读