荷葉邊是一個完全管理的UDP庫,旨在高性能和低潛伏期。
有許多RUDP庫,例如ENET,Lidgren,Litenetlib。儘管其中許多人很棒,但荷葉邊的目的是填補一個未填充的利基市場,而該利基是輕量級管理的圖書館。
與上面的示例相比,ENET真是太神奇了,幾乎是荷葉邊想要成為的事物,但它沒有管理。 Lidgren,LiteNetlib和許多其他託管庫可能會感到過於腫,並且包含許多不必要的功能,而且通常會慢得多。
荷葉邊有許多其他Libs缺乏的功能。請參閱下面的摘要和詳細說明。
荷葉邊協議需要在建立連接之前完成挑戰。當前,挑戰是服務器提供的挑戰,是由客戶端解決並提交的野蠻力量。 (當前使用fowler-noll-vo哈希功能而不是sha1)。
通過需要非規模的連接消息大小來防止DOS擴增。此外,由於連接挑戰,攻擊第4層是不可行的。
荷葉邊具有固定數量的連接插槽,可用於待處理連接,這限制了第4層的插槽填充攻擊的可用性。待處理的連接具有固定的超時,可以解決計算昂貴的hashcash挑戰,然後再被淘汰,在那之後將再次提供插槽。由於這唯一限制了插槽填充攻擊,因此荷葉邊還具有安全機制,其中必須在第一個消息中求解hashcash。該挑戰是由客戶端生成的,服務器將驗證使用的日期是最新的,並且尚未使用IV,迫使客戶每次想初始化握手時都會重新計算Hashcash挑戰。
通過這些安全性緩解,將服務器降低的唯一方法是耗盡所有CPU資源。
荷葉邊為您處理所有連接管理。這是一個完全以連接的協議,帶有心跳keetalive數據包,以確保連接還活著。
荷葉邊是完全無垃圾的,這是通過GC空間中的自定義內存分配器完成的。這樣可以確保沒有記憶洩漏給垃圾收集器,除非為了調整大小。這使荷葉邊燃燒迅速。它還盡可能避免記憶副本。由於荷葉邊仍然在GC空間中運行,因此垃圾收集器將處理荷葉邊的任何內存洩漏,並且將通知用戶,因為將內存的破壞者與最初分配洩漏的內存的堆棧一起稱呼。請參閱實現。
當前有幾種方式以荷葉邊發送消息。這些類型是:
保證將交付所有消息,不能保證該訂單,重複刪除。使用固定的滑動窗口。
保證所有消息都可以通過訂單也可以保證,刪除了重複項。使用固定的滑動窗口。
保證所有消息都可以通過訂單也可以保證,刪除了重複項。使用固定的滑動窗口。允許大型消息分散。
交貨不能保證,也不是訂單。重複項被刪除。
交貨不能保證,但訂單為。較舊的數據包和重複項被刪除。
交貨不能保證,也不是訂單。重複不刪除。
不需要連接的原始UDP數據包。
所有消息都不能保證傳遞。如果您發送多條消息,至少一條郵件是guranteed到達。如果您發送一條消息,則可以保證它到達。消息將始終為秩序。重複項被刪除。
保證將交付所有消息,不能保證該訂單,重複刪除。使用固定的滑動窗口。允許大型消息分散。
荷葉邊是本機的多線程,默認情況下使用後台工作線程來處理網絡I/O。
荷葉邊的所有公共API均設計為線程安全,並且可以從任何線程訪問。
荷葉邊是100%無依賴性的,因此非常便攜,應該在大多數平台上運行。
荷葉邊支持IPv6雙插座模式。它通過使用綁定到同一端口的兩個插座來完成此操作,從而完成用戶看不見的完整雙堆棧功能。
小數據包將延遲發送,這使它們可以合併為一個較大的數據包。可以按每個數據包禁用和啟用。還可以配置延遲和最大合併大小。
可以將數據包發送為可靠的拋棄或可靠的剝離,這允許單個數據包的大小高達2^15*1450字節= 47513600字節= 47.5 megabyte。
ACK數據包被合併到Bitfields中,以使它們更加緊湊。
可以從連接中檢索詳細的統計信息,包括發送的字節,發送的數據包,往返時間等。
自動發現每個連接可能最大的MTU。
限制允許發送到連接的流量。自定義算法可以使用Ibandwidthtracker接口進行調整。
這是我想要的東西,併計劃添加
這是考慮但未決定的功能。這是為了防止膨脹。
當前,碎片通道的ACK重新升級沒有任何流速。
由於統一錯誤,違約的荷葉邊在IL2CPP中無法正常工作。據報導該錯誤是團結的。如果您需要使用IL2CPP運行荷葉邊,請使用這已經修補。隨時在您的項目中使用IL2CPP。MILLISECONDS_SELECT定義進行編譯。這將使套接字。選擇方法使用基於毫秒的超時而不是微秒。