关于golang:golang-网络连接库-cellnet1

cellnet是一个组件化、高扩展性、高性能的开源服务器网络库。它的次要概念如下


队列
队列应用NewEventQueue创立,应用.StartLoop()开启队列事件处理循环,所有投递到队列中的函数回调会在队列自在的goroutine中被调用,逻辑在此时被解决

个别在main goroutine中调用queue.Wait阻塞期待队列完结。

队列在cellnet中应用cellnet.Queue接口, 底层由带缓冲的channel实现

端(Peer)
peer是客户端和服务端的封装
cellnet应用Acceptor接管多个连贯,Acceptor是一种Peer(端),连贯到Acceptor的Peer叫做Connector。

一个Peer领有很多属性(名称,地址,队列),peer.NewGenericPeer函数封装了属性的设置过程。

peer.NewGenericPeer创立好的Peer不会产生任何socket操作,对于Acceptor来说,调用Acceptor的Start办法后,才会真正开始socket的侦听

应用如下代码创立一个接受器(Acceptor):

  queue := cellnet.NewEventQueue()

    // NewGenericPeer参数顺次是: peer类型, peer名称(日志中不便查看), 侦听地址,事件队列
    peerIns := peer.NewGenericPeer("tcp.Acceptor", "server", "127.0.0.1:8801", queue)

    peerIns.Start()

Connector也是一种Peer,与Acceptor很很多相似的中央,因而创立过程也是相似的。

应用如下代码创立一个连接器(Connector):

queue := cellnet.NewEventQueue()

    peerIns := peer.NewGenericPeer("tcp.Connector", "client", "127.0.0.1:8801", queue)

    peerIns.Start("127.0.0.1:8801")

处理器(proc)
cellnet应用Processor解决音讯的收发过程。

应用proc.BindProcessorHandler函数,将一个Peer绑定到某个Processor上,且设置用户音讯解决回调。

上面代码尝试将peerIns的Peer,绑定”tcp.ltv”处理器,回调函数为func(ev cellnet.Event) { … }

proc.BindProcessorHandler(peerIns, "tcp.ltv", func(ev cellnet.Event) {

    switch msg := ev.Message().(type) {
    // 有新的连贯连到8801端口
    case *cellnet.SessionAccepted:
        log.Debugln("server accepted")
    // 有连贯从8801端口断开
    case *cellnet.SessionClosed:
        log.Debugln("session closed: ", ev.Session().ID())
    // 收到某个连贯的ChatREQ音讯
    case *proto.ChatREQ:

        // 筹备回应的音讯
        ack := proto.ChatACK{
            Content: msg.Content,       // 聊天内容
            Id:      ev.Session().ID(), // 应用会话ID作为发送内容的ID
        }

        // 在Peer上查问SessionAccessor接口,并遍历Peer上的所有连贯,并发送回应音讯(即播送音讯)
        p.(cellnet.SessionAccessor).VisitSession(func(ses cellnet.Session) bool {

            ses.Send(&ack)

            return true
        })

    }

})

callnet 通过这三种封装将网络连接和解决音讯解耦开,下篇文章将要介绍callnet对于peer源码的解析,不同的协定(http,tcp, protobuf)都有对应的peer我将取其中(tcp)解析,其它的协定下的内容都差不多。

评论

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

这个站点使用 Akismet 来减少垃圾评论。了解你的评论数据如何被处理