网络编程-开发注意要点

将近做了一年的网络编程,串口、USB通讯的开发,主要是负责处理具体的通讯逻辑,提供给C#和android等上层应用相关的API

现总结一下具体网络编程需要注意的关键点,随着开发的深入,以后会不断增加:

要点:
一、网络编程框架的选择、选择原始socket,还是成熟的网络库boost asio,libevent,muduo,libuv,poco等。
二、通讯模式选择TCP还是UDP,sokcet选择阻塞还是非阻塞,调用方式选择异步调用还是同步调用。
三、超时处理的相关问题,如果是TCP,需要处理TCP收发包的完整性,防止粘包,如果是阻塞socket,需要关注内核缓冲区满的情况,设置超时,连接的建立,断开等的处理。
四、异步方式缓冲区buffer的设计,数据包的处理,比如发送端发送过快,接收端接受较慢等问题在缓冲区如何处理。
五、通讯协议格式的设计,使用xml,json,protobuffer还是其他二进制协议格式。
六、通讯协议是否需要确认包的应答机制,心跳的设计。

七、多线程编程的问题。

八、无论采用epoll模式还是select模式,都需要设计应用层缓冲区,为了防止busy loop,需要一次性从内核缓冲区中将接受到的包读取完毕。

 

posted @ 2017-12-06 14:19  karllen  阅读(526)  评论(0编辑  收藏  举报