go 聊天室
我使用Go来编写一些工具也有一段时间了。接下来 我决定花更多的时间和心思去深入学习它,主要的方向是系统编程以及分布式编程。
这个聊天室是灵光一现所得。对于一个我的沙盒项目而言,它足够的简洁但也不至于太过简单。我会尽量尝试从0开始去编写这个项目。
本文更像是一份我在练习如何去用Go编写程序时的总结,如果你更趋向于看源代码,你可以查看我github的项目。
需求
聊天室的基础的功能:
- 一个简单的聊天室
- 用户可以连接到这个聊天室
- 用户可以设置他们连接时的用户名
- 用户可以在里面发消息,并且消息会被广播给所有其他用户
目前聊天室是没有做数据持久化的,用户只能看到他/她登陆以后所接收到的消息。
通讯协议
客户端和服务端通过字符串进行TCP通讯。我原本打算使用RPC协议进行数据传输,但是最后还是采用TCP的一个主要原因是我并不是很经常去接触到TCP底层的数据流操作,而RPC偏向于上层的通讯操作,所以也想借此机会尝试和学习一下。
有了以上需求能引申出以下3个指令:
- 发送指令(SEND):客户端可以发送聊天消息
- 命名指令(Name):客户端设置用户名
- 消息指令(MESSAGE):服务端广播聊天消息给其他用户
每个指令都是字符串,以指令名称开始,中间带有参数/内容,以\n
结束。