cocos2dx除了curllib和websocket其他的没有封装好用的网络库,尤其是使用socket的时候得自己分装网络层。网络层有哪些东西呢或者说我们要连接服务器收发数据需要怎样的流程?
自己造轮子
关于socket
首先是socket还好是跨平台支持,至于connect receive send就不说了,至于select epoll poll这些是服务端的东西.
创建socket connect之后就是手法数据了当然之前我们得定义好数据专属的协议使用json pb还是直接传byte.收到数据之后我们需要的是解析数据,解析之前得是完整的包吧需要处理粘包问题,解析之后当然是处理了,根据预定义的消息id或者名字分发到逻辑层进行处理.
消息通信格式
通常的消息格式是:长度+消息内容
消息内容:消息id+消息结构体
消息编码
使用pb或者json或者是使用struct
消息接受
开启一个读线程receive消息并且把消息放入消息缓冲区,然后读取消息缓冲区中完整的消息,需要读出长度信息在进行分别处理可能涉及多次receive.完整的消息结构字后放入消息队列,然后通过schedule将消息发送到cocos的逻辑层进行分发处理
消息发送
开启一个发送线程,逻辑层将消息编码后交给发送线程发送线程组装数据,加上长度信息然后发送给socket,这里需要队列,因为发送失败需要再次发送
读线程
receive消息,解析消息。具体的消息结构最好在逻辑层解析
写线程
处理发送操作涉及重发
心跳包
这个主要是看是否离线
现成的轮子
现成的轮子有很多,分门别类的介绍,例如有mqtt,kcp,sprotop,pbc,lpack,struct,bjson等
git@github.com:bytemode/cocos2dx-socket.git
git@github.com:bytemode/skynet_multithread_client_socket.git
git@github.com:bytemode/sproto.git
git@github.com:bytemode/pbc.git
git@github.com:LuaDist/lpack.git