zoukankan      html  css  js  c++  java
  • 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在几个逻辑重要点部分    

  • 相关阅读:
    UVA 11488 Hyper Prefix Sets (字典树)
    UVALive 3295 Counting Triangles
    POJ 2752 Seek the Name, Seek the Fame (KMP)
    UVA 11584 Partitioning by Palindromes (字符串区间dp)
    UVA 11100 The Trip, 2007 (贪心)
    JXNU暑期选拔赛
    计蒜客---N的-2进制表示
    计蒜客---线段的总长
    计蒜客---最大质因数
    JustOj 2009: P1016 (dp)
  • 原文地址:https://www.cnblogs.com/uttu/p/2921336.html
Copyright © 2011-2022 走看看