需求摘要
- 实现一个分布式点对点的聊天系统,所有节点都是对等的,不需要中央服务器
- 实现注册节点名称,节点之间通过节点名称发起会话
思路分析
- 节点同时具备服务端和客户端的职能
- 服务端只负责接收其它节点主动发送过来的消息
- 客户端只负责主动向其它节点发送消息
- 通信都用短连接,服务端收完消息/客户端发完消息都断开conn——一方面是节约IO资源,另一方面是为了使逻辑清晰
- 节点名称注册到【注册服务器】(很像DNS),以便根据节点名称访问节点而不是监听端口
节点代码实现
peer.go代码实现如下
package main
import (
"fmt"
"net"
"os"
"time"
)
/*
·用一个可执行程序实现相互聊天
·实现注册节点名称,并通过名称发起会话
·实现群发消息
*/
/*
思路概要:
·节点同时具备服务端和客户端的职能
·服务端只负责接收其它节点主动发送过来的消息
·客户端只负责主动向其它节点发送消息
·通信都用短连接,服务端收完消息/客户端发完消息都断开conn——一方面是节约IO资源,另一方面是为了使逻辑清晰
·节点名称注册到【注册服务器】(很像DNS)