介绍


示例仓库


  • 官方例子:Chat example
  • 为上更改过的例子:cloud-native-game-server/2-gorilla-websocket-chat


为啥要再熟悉下这个例子?


通过通信共享内存,通过通信共享内存,通过通信共享内存

分析 Nano 之前,再过一遍 Golang 的并发编程。


示例分析


这里我整理下这个例子的官方 README.md


一句话描述业务


  1. 客户端可以连接服务器
  2. 客户端可以发送消息,然后服务端立即广播消息


技术描述业务


websocket
websocket读写
Clientwebsocket读写
websocket
HubClientClientwebsocket写


Server


ClientHubClientClientHubHub


HubClientHubClient


核心源码解释:



Hub


Hubmainrunregisterunregisterbroadcast


clients
clientssend
sendsend


核心源码解释:



Client


Client
serveWsmain


writePump


readPump


readPumpwritePump


writePumpsend

核心源码解释:



API 的相关细节,大家可以直接查文档,思想才是最重要的


Frontend


前端代码在 home.html 中。

在加载文档时,脚本在浏览器中检查 websocket 功能。如果 websocket 功能可用,那么脚本打开一个到服务器的连接,并注册一个回调函数来处理来自服务器的消息。回调函数使用 appendLog 函数将消息追加到聊天日志中。


appendLog


表单处理程序将用户输入写入websocket并清除输入字段。


Docker 搭建开发调试环境


Image



启动开发环境(支持 live reload)



进入 localhost:3250 可以看到效果。


启动调式环境