您的位置:首页 > 理论基础 > 计算机网络

系统软件性能调优策略(二)异步网络传输模式

2010-04-19 21:29 387 查看
异步网络传输模式,分两个层面

A)使用非阻塞socket

sockfd=socket(AF_INET,SOCK_STREAM,0);

/* 设置socket缓冲区 */
size=65535;
ret=setsockopt(sockfd,SOL_SOCKET,SO_SNDBUF,&size,sizeof(size));

size=65535;
ret=setsockopt(sockfd,SOL_SOCKET,SO_RCVBUF,&size,sizeof(size));

/* 设置非阻塞socket */
#ifndef WIN32
#	ifdef MY_HPUX
jet = fcntl(sockfd,F_SETFL,O_NONBLOCK);
#	else
jet = fcntl(sockfd,F_SETFL,O_NDELAY);
#	endif
#else
{
DWORD flag = 1;
jet = ioctlsocket(sockfd, FIONBIO, &flag);
}
#endif/**********win32*************/

jet = connect(sockfd,(struct sockaddr *)&cen_addr,sizeof(cen_addr));


B)异步数据处理模式
定义发送、接收控制索引及数据缓冲区

typedef struct rcv_buf_ctrl {
short needRcvLen;
} RCVBUFCTRL;
char *RcvBuf;

typedef struct snd_buf_ctrl {
short needSndLen;
} SNDBUFCTRL;
char *SndBuf;


控制索引及数据缓冲区原则:
1)能发送就发送,不能发送也不能强求,将需要发送的数据先寄存到SndBuf中;
下次发送前,首先发送SndBuf中的数据
2)能接收就接收,不能接收就通过select(,readfds,,,timeout)来检测socket可读,然后再接收;
下次接收前,首先要接收上次预期的数据

备注:

异步网络传输模式,在以下两种情况下非常有效:
1)低带宽环境
2)普通带宽环境,但单次发送的数据量比较大,如32K
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: