首 页文档资料下载资料维修视频包年699元
请登录  |  免费注册
当前位置:精通维修下载 > 文档资料 > 家电技术 > 维修教程知识 > 单片机栏
基于Linux的Socket网络编程的性能优化
来源:本站整理  作者:佚名  2009-10-20 09:53:33




4 SOCket的性能优化
4.1 解决多路复用
    上面的运行过程仅实现了一个客户端接人,在实际情况中,人们往往遇到多个客户端连接服务器端的情况。由于connect(),recv(),send() 都是阻塞性函数,若资源没有准备好,则调用该甬数的进程将进入睡眠状态,无法处理I/O多路复用。在服务器端的serv.c中加入select()函数,它可同时监听多个套接字,实现I/O的多路复用。
    其函数原型如下:
  

    该函数监视一系列文件描述符,特别是readfds、writefds和exceptfds。如果想知道是否能从标准输入和套接字描述符sockfd读入数据,只要将文件描述符“0”和“sockfd”加入集合readfds中。参数numfds应等于最高文件描述符的值加1,设置该值为sockfd+ 1。因为它一定大于标准输入的文件描述符“0”。当函数select()返回时,readfds的值修改为反映选择的哪个文件描述符可读。重新编译和运行客户端的程序后,服务器端允许多个客户端接入,服务器端运行结果如图6所示。

4.2 最小化报文传输的延时
    通过TCP socket进行通信时,数据都被拆分成数据块,这样它们就可以封装到给定连接的TCP payload(指TCP数据包中的有效负荷)中。TCP payload的大小取决于几个因素(如最大报文长度和路径),为了达到较好的性能,应使用尽可能多的可用数据来填充每个报文。当没有足够的数据来填充 payload时(也称为最大报文段长度maximum segment size或MSS),TCP将采用Nagle算法自动将一些小缓冲区连接到一个报文段中。这样可以通过最小化所发送的报文的数量来提高应用程序的效率,并减轻整体的网络拥塞。
    由于这种算法对数据进行合并,试图构成一个完整的TCP报文段,因此会引入一些延时。Socket网络传输很长时间只发送一些较小的报文,比如 telnet程序,它让用户可以与远程系统进行交互,通常通过一个shell来进行,如果用户被要求用发送报文之前输入的字符来填充某个报文段,该方法绝对不能满足需要。再比如HTTP协议,通常客户机浏览器会产生一个小请求(一条HTTP请求消息),然后Web服务器就会返回一个更大的响应(Web页面)。最小化传输延时是首要的。在这种情况中,Socket可以提供一种解决方案,即禁用Nagle算法,可设置TCP_NODELAY socket选项TCP socket禁用Nagle算法。

  
    使用Samba的实验表明,在服务器上的Samba驱动器上读取数据时,禁用Nagle算法几乎可以加倍提高读性能。

上一页  [1] [2] [3] [4]  下一页

关键词:

文章评论评论内容只代表网友观点,与本站立场无关!

   评论摘要(共 0 条,得分 0 分,平均 0 分)

推荐阅读

图文阅读

热门阅读

Copyright © 2007-2017 down.gzweix.Com. All Rights Reserved .
页面执行时间:99,019.53000 毫秒