【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing @163.com】

以前,也写过网络编程的一些代码,但是写的不太好。仔细想来,还是对tcp/ip协议理解得不够。加上最近看lwip的实现,学习一下github上开源的代码,再练习一下,也有很多收获。

a)tcp是面向连接的,udp是非连接的。tcp的超时重传和拥塞控制机制,保证了tcp的稳定性。对于广域网这种情况复杂的网络,用tcp比较保险;

b)要实现高性能服务器编程,最好用epoll,socket采用非阻塞的方式,适时用心跳机制检测socket是否健康;

c)socket的read和write都要连续运行,即使失败了,比如出现了EINTR,也要继续读写下去;

d)发送的packet中要显示说明packet的length;

e)状态机和定时器永远是正确的协议处理方法;

f)正确处理多核下的socket表示方法,可以用skynet的方式,也可以用多线程多libevent的方式;

g)tcp最好由客户端关闭,这样服务器不会进入TIMEWAIT状态;

h)局域网测试的结果不代表广域网也ok,所以一定要在不同的场景下试试;

i)tcp的状态切换机制要烂熟于心;

j)wireshark的抓包工具要经常使用;

k)广域网的data必须要加密处理;

l)connect、read、write、close可以全部用异步回调的方式解决;

m)定时器完全可以自己实现;

n)用户侧的checksum可以用复杂一点的算法代替;

o)用户之间没有交互的话,用http代理也可以;

p)udp比较适合局域网;

q)一些实时性的协议比如rtsp,用udp也合适;

r)udp发送packet的时候,length要小一点,否则ip层强制分包,很容易丢包;

s)无效的socket要及时close,否则内存泄漏;

t)高效的socket必然涉及到buffer管理,毕竟很多时候packet是写不完、读不完的;

u)强调时序性的操作,一定要像tcp一样,添加自己的seq和ack;

v)报文传输最好基于json这种格式,不要严格的format形式,否则不好扩展;

w)业务的开发一般是基于某一个通信协议的,私有的也好,标准的也罢,这些都不重要,可以有不同的version;

x)不同的开发语言都有适合自己的framework,但是了解tcpip的基本原理更重要;

y)可以自己实现一个小的tcpip协议栈加深一下印象,看过lwip的同学,肯定不会认为这是一件很恐怖的事情;

z)socket + db基本是server开发的主要模式,可以找一个市场上热门的app,想象一下它们的server端如何设计的,练练手。

随想录(网络编程中的一些问题)相关推荐

  1. 网络编程中的关键问题总结

    网络编程中的关键问题总结 总结下网络编程中关键的细节问题,包含连接建立.连接断开.消息到达.发送消息等等: 连接建立 包括服务端接受 (accept) 新连接和客户端成功发起 (connect) 连接 ...

  2. python的功能模块_Python的功能模块[1] - struct - struct 在网络编程中的使用

    struct模块/ struct Module 在网络编程中,利用 socket 进行通信时,常常会用到 struct 模块,在网络通信中,大多数传递的数据以二进制流(binary data)存在.传 ...

  3. 网络编程中BIO和NIO的区别

    网络编程中BIO和NIO的区别 先上结论 BIO中,每个请求因为要阻塞直到结果返回,所以比较好的解决是每个请求都需要一个线程来处理,但是线程又是他的制约条件. NIO中,每个请求进来都会绑定到一个ch ...

  4. 网络编程中的超时检测

    http://blog.163.com/liukang_0404@126/blog/static/55682581201231955735693/ 我们在网络编程中常见的一种做法是:创建好套接字后以阻 ...

  5. 网络编程中使用float型数据要注意

    2019独角兽企业重金招聘Python工程师标准>>> 在网络编程中使用float型数据要特别注意,因为各个机器对浮点数的表示极有可能会不一样,比如在gsoap中,当在客户机和服务器 ...

  6. 实例解析网络编程中的另类内存泄漏

    本文分享自华为云社区<[网络编程开发系列]一种网络编程中的另类内存泄漏>,作者:架构师李肯. 1 写在前面 最近在排查一个网络通讯的压测问题,最后发现跟"内存泄漏"扯上 ...

  7. c++中recvfrom函数_通俗易懂:快速理解网络编程中5种IO模型

    关于IO模型,就必须先谈到几个日常接触的几个与IO相关名字:同步,异步,阻塞,非阻塞. 名词解释 同步 如果事件A需要等待事件B的完成才能完成,这种串行执行机制可以说是同步的,这是一种可靠的任务序列, ...

  8. python网络通信传输的数据类型_Python网络编程中的网络数据和网络错误。

    上一个章节我们说的是套接字名和DNS.这篇文章我们主要解决下面问题. 我们在两台主机之间建立与关闭TCP流连接以及UDP数据报连接后.我们应该怎么准备我们需要传输的数据,该怎么对数据进行编码与格式化. ...

  9. 关于网络编程中MTU、TCP、UDP优化配置的一些总结

    首先要看TCP/IP协议,涉及到四层:链路层,网络层,传输层,应用层.  其中以太网(Ethernet)的数据帧在链路层 IP包在网络层 TCP或UDP包在传输层 TCP或UDP中的数据(Data)在 ...

  10. 用java网络编程中的TCP方式上传文本文件及出现的小问题

    自己今天刚学java网络编程中的TCP传输,要用TCP传输文件时,自己也是遇到了一些问题,抽空把它整理了一下,供自己以后参考使用. 首先在这个程序中,我用一个客户端,一个服务端,从客户端上传一个文本文 ...

最新文章

  1. C++ 实验 5.12
  2. 第十五届全国大学生智能汽车竞赛华南赛区成绩总结
  3. jsoncpp和rapidjson哪个好用?
  4. python 表格查询_python单表查询
  5. 网站开发中很有用的几个 jQuery 地图插件
  6. svn 配置详解,以及各种可能遇到的问题
  7. Android:沉浸式状态栏(二)集成
  8. Android -- 写xml到SD卡中
  9. SQL根据下标,返回split分割后字符串
  10. 编程规范基础学习笔记
  11. 东北大学金工实习理论考试重点
  12. latex附录中放python代码_LaTeX 里「添加程序代码」的完美解决方案
  13. 全球与中国心脏临床信息系统(CIS)市场深度研究分析报告
  14. html旅游旅行游记攻略网页源码
  15. Word如何让样式库中的样式不添加到自动生成的目录中
  16. 金仓数据库在 TPCE(dbt5,tpsE)测试框架方面的实践和突破
  17. Es refresh index
  18. 如果通过Java来完成大数据开发,需要学习哪些内容
  19. 浅谈IT企业人力资源流失现状与对策
  20. 【知识产权之专利权】不定项选择题和判断题题库

热门文章

  1. keystone nova v2 python
  2. 基于Metronic的Bootstrap开发框架经验总结(11)--页面菜单的几种呈现方式
  3. python 依赖包迁移(本地安装)
  4. oracle 11g 及 plsqldeveloper 相关操作
  5. wuauclt.exe是什么进程?
  6. 【Vue】---- 手动封装on,emit,off
  7. Mail.Ru Cup 2018 Round 1 virtual participate记
  8. 『TensorFlow』分布式训练_其二_单机多GPU并行GPU模式设定
  9. sql server 碎片整理——DBCC SHOWCONTIG
  10. [凯立德]2015春季版C2739-M7L83-3521JON,已O+带3D+带路况