ESFramework FAQ -- ESFramework 常见问题解答

  关于在使用通信框架ESFramework过程中遇到的常见问题,我们做了一个整理总结,并给出了解决问题的步骤或方案,大家可以按照指定的步骤发现和解决问题。

一. 常用网络检测命令

1. Ping -- 网络是否连通?延迟有多大?网络抖动情况如何?

    如: ping 192.168.0.123 -t

2. telnet -- tcp 端口能连上?

    如: telnet  192.168.0.123 4530 

3. tracert -- 当到服务器的网络不顺畅时,可发现路由上是哪些节点“卡”?

     如: tracert -d 192.168.0.123

4.  如何查看局域网中的电脑对外的公网IP地址?

     在浏览器中打开网址 www.whereismyip.com , 页面将显示当前电脑的对外IP。

5.  如何让Windows 服务器允许 ping?

     如果服务器禁止了ping,可按如下操作:控制面板->Windows防火墙->高级->ICMP->设置->将"允许传入回显请求"项勾上。

 

二. 常见异常信息解决

1. IRapidPassiveEngine 的 Initialize 方法抛出异常:Timeout waiting for reply !

(1)客户端和服务端的UserID的最大长度是否一致。可查找 GlobalUtil 的 SetMaxLengthOfUserID 静态方法。

(2)ping一下服务器,看到服务器的网络情况如何。  

(3)如果使用的是ESFramework的试用版本,则检查SDK是否已经过期。

2. ICustomizeOutter的Query方法抛出异常:There is an exception occured when {0} handing the query of {1}.

(1)该异常说明Query请求的处理方(可能是服务器或另一个在线客户端)在处理该请求时出现了异常,可以查看处理方的ESF日志来得到异常的详细信息。 

(2)异常信息中的第一个占位符{0}的值,是处理方的UserID。如果是"_0",则表示是服务端。

(3)异常信息中的第二个占位符{1}的值,是自定义请求信息的类型,对应Query方法中的informationType参数。 

3. ICustomizeOutter的Query方法抛出异常:Timeout waiting for reply !

(1)该异常含义是等待Query的处理回复超时。 

(2)超时的常见原因有如下两个:Query请求的处理方处理该请求使用了太多的时间;或者,网络缓慢,而且回复的数据量太大,需要很长的传送时间。 

(3)解决方案:

        a. 优化请求处理的流程与算法,加快请求处理速度。 

        b. 将等待回复的最大超时设置得大一些。(对应IRapidPassiveEngine的WaitResponseTimeoutInSecs属性,默认值为30秒)。

        c. 使请求的数据和回复的数据都尽可能地小。

        d. 如果c无法做到,则建议不要使用同步调用机制Query,改用SendBlob方法,请求信息和/或回复信息使用SendBlob进行发送(内部使用分块发送机制)。 

4. ICustomizeOutter的Query方法抛出异常:Network connection is disconnected !

(1)该异常含义是等待Query回复的过程中,与服务器的TCP连接断开了。 

(2)TCP连接断开虽说大部分是网络原因,但是,要注意,在网络不是很顺畅时,一次性发送比较大块的数据,可能会导致TCP连接断开

(3)为了防止(2)的情况出现,对于请求信息或回复信息的数据较大(比如超过4k)的情况,那么Query就不再适合,建议改用SendBlob方法(内部使用分块发送机制)。 

三. 疑问解答

1. IRapidPassiveEngine 与服务端的连接断开后,一直没有自动重连成功的原因有哪些?

(1)与服务器之间的网络是否已经恢复?

(2)IRapidPassiveEngine 的 AutoReconnect 属性是否为false? 

(3)当前客户端是否是被挤掉线(即在其它地方登录了同一个帐号,会触发IBasicOutter的BeingPushedOut事件)?如果是被挤掉线的,则不会自动重连。

(4) 当前客户端是否是被踢掉线的(会触发IBasicOutter的BeingKickedOut事件)?如果是被踢掉线的,则不会自动重连。

(5) 是否在重连时,服务端验证其帐号密码失败了?(IRapidPassiveEngine 的 RelogonCompleted 事件的 LogonResponse 参数会反应出来) 

2. 向对方发送自定义信息,对方没有进入ICustomizeHandler的HandleInformation方法?

(1)发送自定义信息时,传入的对方的UserID参数的值是否正确?必须要与对方的登录帐号完全一致(严格区分大小写的)。

(2)自定义信息处理器(ICustomizeHandler)的实例是否注入到了Rapid引擎?

(3)如果处理器是实现的 IIntegratedCustomizeHandler 接口,那么,查看其CanHandle方法的实现,看发送的信息的类型是否在其处理范围内?  

3. 客户端引擎IRapidPassiveEngine 初始化时,serverIP这个参数能使用域名吗?

方案:先将域名转换成IP,然后再传给Initialize方法。System.Net 命名空间下有个Dns类,它的GetHostAddresses方法就可以将域名转换成 IP。 

四. 故障排查

1. 服务端性能瓶颈,该如何排查?

2. 服务器端口telnet失败,该如何定位问题?

3. 客户端批量心跳超时掉线,是什么原因? 

五. 综合

1. asp.net 网站如何与 ESFramework 服务端集成?

         比如,当通过网站注册了一个新会员时,需要告诉ESFramework的服务端这一信息。那么,通常的解决方案是:

(1)ESFramework 服务端发布一个Remoting服务,该服务暴露一个接口方法用于接收会员注册的通知。

(2)当网站这边注册一个会员成功的时候,网站就主动调用ESFramework服务端暴露的Remoting方法通知它。

        我们还有一个复杂一点的B/S网站与ESPlatform群集平台集成的例子,可以参见《ESPlatform 群集平台(02) -- 从外部访问群集 》的文末。

2.  如何为基于ESFramework开发的程序增加新的客户端类型(如iOS、android等)?

         如果希望为已经开发好的基于ESFramework的系统增加其它类型的客户端,那么需要做到两点:

(1)根据客户端的平台类型,选择ESFramework的对应版本。

         比如,新增的客户端类型是android,那么,在开发android客户端时,就要基于ESFramework的andorid版本来进行。

(2)新的客户端要遵循应用层的消息的协议格式。

        一般情况下,基于ESFramework开发的应用(如OrayTalkGG等)的内部消息也是使用ESFramework提供的紧凑的序列化器来进行序列化和反序列化的。这时,情况就容易一些了,我们有提供了一个小工具,可以根据协议类的定义,自动生成对应的协议格式。具体可参见:ESFramework 使用技巧 -- 协议格式自动生成器(跨平台开发小工具)

3. 如何让 ESFramework 同时支持带 SSL 的 WebSocket ?

(1)现已部署的基于ESFramework的服务端程序(A服务)不需要做任何修改。

(2)添加一个支持 SSL 的 Nginx Server 作为代理(B服务),配置该服务器,将请求转发到上述的真正的A服务的端口上。(如何配置Nginx服务器,可参见这里。)

(3)如果一个客户端是普通的WebSocket,则还是直接连A服务;如果一个客户端是带SSL的WebSocket,则连接B服务。

 

 

上一篇:ESFramework 开发手册与使用技巧

-----------------------------------------------------------------------------------------------------------------------------------------------   

下载免费版本的ESFramework 以及 demo源码  

阅读 更多ESFramework开发手册系列文章

Q Q:168757008

官网:www.oraycn.com

导航

首页

官方网站

立即咨询 

站内搜索

ESFramework 通信框架

详细说明

SDK下载

ESFramework FAQ

版本变更记录

OMCS 语音视频框架

详细说明

SDK下载

OMCS FAQ

版本变更记录

OrayTalk 企业即时通讯系统

详细说明

客户端下载

傲瑞实用组件

SDK下载

NPush 消息推送组件

StriveEngine 轻量级的通信引擎

MFile 语音视频录制组件

MCapture 语音视频采集组件

MPlayer 语音视频播放组件

OAUS 自动升级系统

傲瑞组件 FAQ

授权

授权流程

产品授权说明

产品选购指南

授权SDK使用说明

其它

SDK使用技巧

联系我们

电话:027-87638960

Q Q:168757008

邮件:master@oraycn.com