goim 源码分析

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
}

在建立之后,定义内存来存储读写消息。这里边为了节省内存,采用环形数组连接池。

这里边需要注意的就是

读取消息是同步的,
写入消息是异步的。

评论

(= ̄ω ̄=)··· 暂无内容!

回复

邮箱