• linux平台下网络编程晋级


      工作中负责开发过数据传输通用模块,跟随者c++大牛们快速成长,本文分享一些心得。

    1.基本的概念

      建立tcp连接三次握手、断开tcp连接四次握手,这两个概念请自己google

    2.错误排查工具:

      1).netstat -anp |grep your's port:

        此命令用于查看linux下你的端口的状态,通过它可以观察到连接是否建立、是否正常(状态是established、收发栈为空或者持续变化)、是否关闭服务器的防火墙(经常会遇到机器的防火墙没有stop,然后请求连接状态处于sys send的状态)。

      2).查看端口数据流通情况的神器tcpdump

        基本用法请自行google,学会几个关键点:怎么看一个包是push包还是answer包、能够简单的分析网络连接的状态、保存abc.pcap文件然后可以在windows平台上用wirshark分析字节(这点必须掌握,通常会抓包看数据传输是否正常);

      3).基本步骤:

        先用1)查看网络连接是否正常,如果1)排查不出来,请用2)抓包分析;并且详细审查你的代码,逻辑不错为根本。

    3.程序模型:

      说起网络编程,肯定离不开的另一个话题就是多线程,真实的场景下,几乎都是并行收发处理数据,所以程序的模型至关重要。好的程序模型,不仅可以从性能上大大提高处理速度,而且能缩短研发周期。

      在思考模型的时候主要考虑的点是:

      1).IO的类型是nio还是bio,不同的类型决定了不同的线程模型

        bio对应于一个线程一个连接,那么当连接数量很多的时候(每个连接内部最好有自己的缓存内存块,也有公用的一块大内存的,但是得用读写锁去处理数据出入的问题,而且连接过多的时候,就算是读写锁也未必能达到要求,所以多花点内存是值得的),要一个消费线程管理好几个连接推送过来的数据

        nio则把接收的数据拷贝先拷贝给一个分发线程,然后此分发线程将数据均衡的分配给n个消费线程,用并行化去提高处理速率

      2).tcp连接的数量、每个连接的有效期、每个连接的数据量

        这些是决定使用哪类IO的重要依据,如果是长连接并且数据实时性要求高、数据量大,则bio;如果连接数量特别多(500+),则选择nio。

      3).学会画模型图,写好设计文档,类间的队列不应该暴露出来(持有对象引用,调用相应的方法去push/pop元素)

      4).在关键的地方要替换掉锁,一种锁的替换思路请参考我的这篇bloghttp://www.cnblogs.com/uttu/archive/2013/02/07/2908685.html在几个逻辑重要点部分    

  • 相关阅读:
    枚举-完美立方
    list
    undefined reference to `typeinfo for xxx 报错
    bubble排序
    Iframe跨域传值
    Iframe------父子页面传值
    LDAP 概念
    覆盖equals()要覆盖HashCode()
    HashSet和TreeSet的实现与原理
    jvm调优
  • 原文地址:https://www.cnblogs.com/uttu/p/2921336.html
Copyright © 2020-2023  润新知