当前位置: 技术问答>linux和unix
网络编程的传输速率问题,高手请进!
来源: 互联网 发布时间:2015-07-07
本文导语: 各位: 我在做一个网络通信的项目,涉及到了在Server机和Client机之间传输数据,在Server上运行着两个进程(A和B):A进程负责数据包的监听和更改、B进程负责同Client之间的正常通信(A和B之间通过共享内存进行...
各位:
我在做一个网络通信的项目,涉及到了在Server机和Client机之间传输数据,在Server上运行着两个进程(A和B):A进程负责数据包的监听和更改、B进程负责同Client之间的正常通信(A和B之间通过共享内存进行通信,而Server和Client之间的通信是通过Socket实现的)。现在的最大难题就是如何实现Server和Client之间的高速数据传输。
目前的限制:B进程只能派生一个线程(C线程)来负责向Client不断地发送数据,B进程本身需要维护同Client的其他联系。所以,如何使C线程能够尽最大能力进行数据转发捆扰了在下很久!
我目前的做法:A进程监听到一个数据包并更改完成后就触发C线程的接收代理,从而使C线程的循环中的Receive函数(消息接收函数)解除阻塞转而将该数据包从A进程(通过共享内存)处提取出来并发送给Client机。但是A进程向C线程发送数据包的速率始终要比C线程向Client发送的速率要快,所以A和C之间的共享内存就会有被填满的时候,从而出现问题(而且现在已经证明:当有大量、快速的数据包被A进程截获时,共享内存将会被填满)。
现在向想各位大虾请教的是,如何使C线程能够尽可能快地响应A进程?通过上述的代理?中断处理?还是其他的方式?如果是中断处理的话,好象是不能进行并发触发的吧?(就是上个中断处理函数没有执行完毕之前又来了一个中断,此时如何处理)?
请各位踊跃参与讨论,来者有分!!!不够再加!!!
我在做一个网络通信的项目,涉及到了在Server机和Client机之间传输数据,在Server上运行着两个进程(A和B):A进程负责数据包的监听和更改、B进程负责同Client之间的正常通信(A和B之间通过共享内存进行通信,而Server和Client之间的通信是通过Socket实现的)。现在的最大难题就是如何实现Server和Client之间的高速数据传输。
目前的限制:B进程只能派生一个线程(C线程)来负责向Client不断地发送数据,B进程本身需要维护同Client的其他联系。所以,如何使C线程能够尽最大能力进行数据转发捆扰了在下很久!
我目前的做法:A进程监听到一个数据包并更改完成后就触发C线程的接收代理,从而使C线程的循环中的Receive函数(消息接收函数)解除阻塞转而将该数据包从A进程(通过共享内存)处提取出来并发送给Client机。但是A进程向C线程发送数据包的速率始终要比C线程向Client发送的速率要快,所以A和C之间的共享内存就会有被填满的时候,从而出现问题(而且现在已经证明:当有大量、快速的数据包被A进程截获时,共享内存将会被填满)。
现在向想各位大虾请教的是,如何使C线程能够尽可能快地响应A进程?通过上述的代理?中断处理?还是其他的方式?如果是中断处理的话,好象是不能进行并发触发的吧?(就是上个中断处理函数没有执行完毕之前又来了一个中断,此时如何处理)?
请各位踊跃参与讨论,来者有分!!!不够再加!!!
|
C线程轮询读sharemem,别用触发。一般来说网络发送不应该比sharemem慢,如果数据不做处理的话,sharemem里应该始终保持很少的数据。