• 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

  • 相关阅读:
    python小程序:备份文件
    二叉树非递归后序遍历
    python拷贝文件小程序(windows)
    为什么虚拟 dom 会提高性能?
    shouldComponentUpdate 是做什么的,(react 性能优化是哪个周期函数?)
    react 生命周期函数
    调用 setState 之后发生了什么?
    React 中 keys 的作用是什么?
    Windows下如何更新 node.js
    SVN的Branch和Tag管理
  • 原文地址:https://www.cnblogs.com/zhuweisky/p/2467004.html
Copyright © 2020-2023  润新知