距离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的任何问题,欢迎联系我们:
电话:027-87638960
Q Q:372841921