我是HullQin,公众号线下聚会游戏的作者(欢迎关注公众号,发送加微信,交个朋友),转发本文前需获得作者HullQin授权。我独立开发了《联机桌游合集》,是个网页,可以很方便的跟朋友联机玩斗地主、五子棋等游戏,不收费没广告。还开发了《Dice Crush》参加Game Jam 2022。喜欢可以关注我 HullQin 噢~我有空了会分享做游戏的相关技术。
背景
第一篇文章:《为什么我选用Go重构Python版本的WebSocket服务?》,介绍了我的目标。
第二篇文章:《你的第一个Go WebSocket服务: echo server》,介绍了一下怎么写一个WebSocket server。
第三篇文章:《单房间的聊天室》,介绍了如何实现一个单房间的聊天室。
第四篇文章:《多房间的聊天室(一)思考篇》,介绍了实现一个多房间的聊天室的思路。
今天我们实现一个多房间的聊天室。如果你没阅读上面的文章,一定要先看一下,因为这篇文章更复杂,如果你不弄懂上面几篇,这篇可能跟不上节奏噢。
方案回顾
上篇文章,有2个决策点:
- 何时创建房间?
- 如何决定客户端连哪个房间?
上篇文章都提到了多种解决方案,都是可以选择的。但是本文要开始写代码实现了,必须作出一个选择,选择如下:
决策点1选择「方案二:动态创建房间」。决策点2选择「方案一:URL里指定」。
这也是我的「联机桌游合集」所采用的方案。
直接看源码
多房间聊天室案例代码的地址:https://github.com/HullQin/go-websocket-examples
在chat-multi-rooms
文件夹中,文章可配套commit记录阅读:
- ws handler logic 对应「URL指定房间号:路由参数」、「动态创建房间逻辑」。
- http handler logic 对应「修改http服务」。
初始代码
我们用《单房间的聊天室》的代码为基础,在它上面改造。
URL指定房间号:路由参数
因为我们要在URL里指定房间号,怎么实现呢?我们可以借助gorilla/mux
这个库,它可以实现强大的路由能力。Github介绍如下:Package gorilla/mux
implements a request router and dispatcher for matching incoming requests to their