文章目錄
距離ESPlus 2.0發布已經有半年的時間了,在這半年多的時間中,有數十家公司在他們的項目或產品中正式使用了ESFramework 4.0,並根據實際的使用狀況,給我們反饋了很多有益的建議。基於這些建議和ESFramework的長期發展規劃,今天,我們推出了ESPlus 3.0 。在新版本的ESFramework/ESPlus中,我們重構了部分介面,這將使得架構的使用更加容易上手;新版本也加入了更多實用的新特性,開發人員能更細膩地控制ESFramework提供的強大功能。另外,ESPlus 3.0也是接下來ESPlatform的群集平台1.0能進行發布的前提條件。
接下來我們將從Bug修複、核心最佳化、特性變更三個方面描述最新版本與上一版本的區別。
一.Bug修複列表
1.基於TCP的P2P通道偶爾會自動關閉的bug。
2.用戶端被擠掉線後,可能還會自動重連的bug。
3.用戶端P2P引擎在某種情況下,會寫大量日誌的bug。
4.未登入成功的使用者中斷連線時,UserManager也會觸發SomeOneDisconnected事件的bug。
二.核心最佳化列表
1.基於UDP的P2P最佳化:增強UDP引擎效能;改進演算法,降低重發率;增大發送速度。
2.TCP用戶端引擎最佳化:減少初始化所需的啟動時間。
三.特性變更列表
1.好友與組
將好友與組二項,由Rapid引擎的必需兩翼,轉變成可選功能。
(1)增加ESPlus.Application.Friends和ESPlus.Application.Friends和ESPlus.Application.Friends和ESPlus.Application.Group命名空間,來容納好友與組的相關功能。
(2)IFriendsManager、IGroupManager由作為服務端IRapidServerEngine的Initialize方法的參數轉變成了其注入屬性。
(3)IRapidServerEngine增加了唯讀屬性IFriendsController和IGroupController,用於控制好友與組的相關行為。
(4)IRapidPassiveEngine增加了唯讀屬性FriendsOutter和GroupOutter。
(5)那些不需要好友與組特性的開發人員,就不再需要去瞭解這兩個選項。也不用設定IRapidServerEngine的FriendsManager和GroupManager屬性。
2.用戶端ICustomizeOutter
(1)增加非同步投遞訊息(Post)的功能;
(2)增加回複非同步呼叫的功能;
(4)增加發送大資料區塊(Blob)的功能。詳情請參見 ESFramework 提示 -- 大資料區塊資訊。
(5)支援在通道繁忙時,可以選擇是否丟棄要發送的資料。
(6)通過ICustomizeOutter進行同步調用時,如果串連斷開,不再需要等到逾時,而是直接拋出異常。
(7)BroadcastInGroup方法轉移成為IGroupOutter的Broadcast方法。
3.ICustomzieHandler
請特別注意,在新版本中,服務端和用戶端共用同一個ICustomizeHandler介面,即ESPlus.Application.CustomizeInfo.ICustomizeHandler。最新的介面定義更加簡潔,如下所示:
public interface ICustomizeHandler { /// <summary> /// 處理接收到的資訊(包括大資料區塊資訊)。 /// </summary> /// <param name="sourceUserID">發出資訊的使用者ID。如果為null,表示資訊來自服務端。</param> /// <param name="informationType">自訂資訊類型</param> /// <param name="info">資訊</param> void HandleInformation(string sourceUserID, int informationType, byte[] info); /// <summary> /// 處理接收到的請求並返回應答資訊。 /// </summary> /// <param name="sourceUserID">發送請求資訊的使用者ID。如果為null,表示資訊來自服務端。</param> /// <param name="informationType">自訂請求資訊的類型</param> /// <param name="info">請求資訊</param> /// <returns>應答資訊</returns> byte[] HandleQuery(string sourceUserID, int informationType, byte[] info); }
就像注釋所解釋的,如果方法的參數sourceUserID的值為null,就表示這個自訂資訊是來自服務端的【用於用戶端時】。當然,如果是用於服務端,則方法的第一個參數sourceUserID是絕對不會為null的。
至於廣播資訊,已經遷移到了ESPlus.Application.Group命名空間,用戶端接收到的廣播資訊時由IGroupOutter觸發BroadcastReceived事件進行通知。
4.用戶端IBasicOutter
(1)Logon方法如果逾時沒有回複,則由拋出TimeoutException異常改為返回登入失敗。
(2)增加PingByP2PChannel的功能。
(3)好友/組友上下線通知事件轉移到對應的IFriendsOutter和IGroupOutter介面中。
5.Rapid引擎更加內聚
(1)用戶端IRapidPassiveEngine不再暴露內部的核心引擎。
(2)為了彌補由(1)帶來的部分引擎資訊不能訪問的不足,IRapidPassiveEngine增加屬性和事件:ChannelIsBusy屬性,ConnectionInterrupted事件、ConnectionRebuildStart事件。
(3)服務端IRapidServerEngine增加了FriendsController和GroupController屬性,並且將原來的FriendNotifyEnabled屬性和GroupNotifyEnabled屬性轉移到了IFriendsController和IGroupController中。
6.可獨立部署的P2P伺服器
(1)P2P服務端可以獨立部署,也可以整合於Rapid服務端引擎中一起部署。
(2)IRapidServerEngine增加了UseAsP2PServer屬性,用於控制是否整合P2P伺服器。
(3)IRapidPassiveEngine增加了P2PServerAddress用於設定獨立P2P伺服器的地址。
詳情可參見 ESFramework 提示 -- 部署P2P伺服器 。
四.版本說明
本次發布的dll的版本如下:ESFramework 4.0.9.0, ESPlus 3.0.0.0 ,並且發布的所有的程式集都採用了強簽名。
最新版本ESFramework/ESPlus的SDK、協助文檔、demo、已開放的源碼等 都已經更新並放到我們的官網供大家下載試用(http://www.oraycn.com/ESFramework_download.aspx)。
本部落格的《ESFramework開發手冊》系列文章也已經全部更新完畢。新版本更詳細的使用說明可以參見開發手冊相應的文章。
對於從未瞭解過ESFramework的朋友,可以從 ESFramework 開發手冊(00) -- 概述 這篇文章開始。謝謝。
閱讀 更多ESFramework開發手冊系列文章。
----------------------------------------------------------------------------------------------------------------------------------------------- 下載免費版本的ESFramework 以及 demo源碼
關於ESFramework的任何問題,歡迎聯絡我們:
電話:027-87638960
Q Q:372841921
郵件:esframework@oraycn.com