ESFramework 使用技巧 -- 部署P2P服务器

      可靠的P2P通信功能是ESFramework/ESPlus提供的一个基础而又强大的功能,ESFramework 开发手册(04) -- 可靠的P2P详细描述了在客户端如何使用框架提供的这一武器。本文我们则将介绍的重点放到P2P服务端。

      P2P服务器用于协助客户端之间创建P2P通道。在ESPlus3.0以前的版本中,P2P服务器是集成在服务端Rapid引擎中的。在2012.04.23最新发布的3.0版本中,这种模式依然被支持,而且,ESPlus又提供了另外一种部署模型:独立部署P2P服务器。

一.集成部署P2P服务器

1.服务端IRapidServerEngine有一个UseAsP2PServer属性,用于指示服务端是否同时作为P2P服务器运行。如果将该属性设置为true,然后启动服务端,P2P服务器就会被集成在服务端中同时运行起来。

2.集成启动的P2P服务器监听的UDP端口号为当前IRapidServerEngine监听的TCP端口号加1。比如:IRapidServerEngine监听的TCP端口号为4530(通过其Initialize方法初始化时设定),则P2P服务器监听的UDP端口就是4531。如果是服务端使用框架内置的MainServerForm作为主界面显示,将会看到:

     

3.如果服务端集成启动了P2P服务器,那么客户端不再需要设置IRapidPassiveEngine的P2PServerAddress属性了。 客户端将在登录服务端时,发现如果服务端已经集成了P2P服务器,则会自动与集成的P2P服务器建立联系。

4.如果服务端集成启动了P2P服务器,客户端仍然可以设置IRapidPassiveEngine的P2PServerAddress属性。比如,直接将P2PServerAddress设置为集成P2P服务器的地址:

  rapidPassiveEngine.P2PServerAddress = new AgileIPE("192.168.0.98", 4531);

      这种情况下,客户端还是会使用服务端集成的P2P服务器。但是,如果将P2PServerAddress设置为其它地址:

  rapidPassiveEngine.P2PServerAddress = new AgileIPE("192.168.0.100", 4500);

       那么,客户端就不会再使用服务端集成的P2P服务器,而是转向使用监听在192.168.0.100的4500端口的P2P服务器了,这种情况,就像是使用独立部署的P2P服务器一样了。 

 

二.独立部署P2P服务器

       我们提供了可独立启动的P2P服务器exe,运行后,显示的界面如下所示: 

               

1.配置文件     

      可以通过配置文件修改要监听的端口号等信息。xml配置文件内容如下所示:

复制代码
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<appSettings>
<add key="Port" value="9901"/>
<add key="MaxLengthOfUserID" value="11"/>
<add key="SecurityLogEnabled" value="false"/>
</appSettings>
</configuration>
复制代码

      Port设定要监听的UDP端口。

      MaxLengthOfUserID用于设定UserID的最大长度。由于P2P服务器内部使用的仍然是ESFramework极其消息协议格式,所以MaxLengthOfUserID的值必需与客户端的设定完全一致。(可以参考ESFramework 开发手册(02) -- 基础功能与状态通知) 

      SecurityLogEnabled用于设定是否开启日志记录。

 2.界面显示

      P2P服务器的界面除了显示监听的UDP端口号之外,还显示了UDP Session会话的个数,以及线程池中可用的空闲线程的个数。

      客户端登录时,会与P2P服务器建立UDP Session,完成了必要的通信之后,客户端会主动关闭这个Session。会话个数表示的是当前还未关闭的Session的数量,而不是当前已启动的客户端的数量。

      会话个数的值与RapidServerEngine服务端的在线人数的值几乎是没有必然的联系的。

3.如何部署

      首先,我们将服务端的IRapidServerEngine的UseAsP2PServer属性设为false,表示将要使用独立部署的P2P服务器。

      其次,启动P2P服务器。我们可以把P2P服务器部署到不同于RapidServerEngine服务端所在的服务器上。

      最后,将客户端IRapidPassiveEngine的P2PServerAddress属性设置为P2P服务器的地址就可以了。

      由于P2P服务器消耗的资源非常的小,对服务器配置的要求不是很高。所以,多个RapidServerEngine服务端可以共享一个P2P服务器。特别是在ESPlatform群集中,我们可以部署许多个应用服务器,但是只要部署一个P2P服务器就可以了。 

 

三.禁用P2P

      我们只要将服务端的IRapidServerEngine的UseAsP2PServer属性设为false,并将客户端IRapidPassiveEngine的P2PServerAddress属性设置为null,就表示禁用P2P。这样,客户端IRapidPassiveEngine初始化完成后,其P2PController属性的值将为null。

 

四.下载

       ESFramework P2P 服务器

 

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

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

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

关于ESFramework的任何问题,欢迎联系我们: 

电话:027-87638960 

Q Q:372841921 

 

posted on 2012-04-23 11:55  傲瑞中国  阅读(1475)  评论(0编辑  收藏  举报

导航