ESPlus 3.0 正式发布!

 距离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)的功能。

(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的任何问题,欢迎联系我们:

电话:027-87638960

Q Q:372841921

posted @ 2012-04-23 20:00  zhuweisky  阅读(2505)  评论(0编辑  收藏  举报