###及时性要求高,数据又不能丢包,如何构建?###
如果需要通过internet构建一个网络服务器,服务器与n多个客客端建立链接,并且要求实时进行数据交互,又不能存在丢失数据包,请问各位大侠有什么好建议?或相关思路?
[82 byte] By [
szch-灏然] at [2008-1-6]
TCP因為實現的算法問題,在包比較小且頻的時候,他會等待幾個包組成一個較大的包一起發送,這樣就可能不能滿足樓主要求的實時交互了.UDT是基於UDP的可靠通訊協議,网上有完整的文檔可以借鑒,不過實現也是比較複雜的.如果要求不高干脆自已實現一個簡單的好了.保證包的完整和順序就行.
To leon7909 && 楼主:
首先要搞清楚,这里的“实时性”具体含义是什么。应该给出具体组网环境下的时延和响应时间的数值,否则讨论“实时性”就无从谈起,比方说,对于http的应用来说,我认为tcp就很实时了。
对于任何一段路经来说,要想不丢包,就必须在接受端返回确认,这就要求两端要实现一个类似TCP的窗口机制。
因此,实时性与不丢包肯定是冲突的,因为通讯实时性实际上受制于窗口大小。(当然也受其他因素的影响,比如链路时延,但是这种因素你用UDP也存在,因此无法消除)而窗口如果太大,又导致发生差错时重传代价增加,如果采用可填补的窗口(只需要重传发生差错的报文),则可能需要大量的确认报文,造成网络负荷增加。
因此,应该给需求下一个更加精确的定义,我们就以TCP为例,在你的应用中,传输时延有多大?如果使用TCP,时延是多少,你的期望值是多少,你能接受的丢包代价有多大?
这样分析数值之后,也许你就会发现,TCP离你的期望并不是特别远,也许只要更改一些参数,比如窗口大小,就可以满足你的要求了。毕竟,TCP的实现非常完整,从稳定性和可以移植性上来说要好的多。