1.首先就是初始化discovery,然后创建与其他服务通信的gprc客户端。
2.然后把其作为参数传入长链接中。
接下来就是初始化黑名单,这个是非核心业务,暂时忽略。
然后就是创建tcp 和 websocket 服务。
addrs 就是不同的地址,创建多个tcp服务。
接下来就是apue 讲的怎么创建服务器。
1.bind 端口
2.listen 监听端口
3.accept 接受连接,这里边是阻塞的,所以可以用携程处理。
func InitTCP(server *Server, addrs []string, accept int) (err error) {
var (
bind string
listener *net.TCPListener
addr *net.TCPAddr
)
for _, bind = range addrs {
if addr, err = net.ResolveTCPAddr("tcp", bind); err != nil {
log.Errorf("net.ResolveTCPAddr(tcp, %s) error(%v)", bind, err)
return
}
if listener, err = net.ListenTCP("tcp", addr); err != nil {
log.Errorf("net.ListenTCP(tcp, %s) error(%v)", bind, err)
return
}
log.Infof("start tcp listen: %s", bind)
// split N core accept
for i := 0; i < accept; i++ {
go acceptTCP(server, listener)
}
}
return
}
在建立之后,定义内存来存储读写消息。这里边为了节省内存,采用环形数组连接池。
这里边需要注意的就是
读取消息是同步的,
写入消息是异步的。
评论