一日一点RakNet(24)--Rackspace Interface

翻译 2012年03月21日 17:47:55
 

Rakspace 云服务器API的C++接口

 

用编程的方式管理应用服务器

       Rakspace提供了基于API的HTTPS,具体的API信息可以在连接中找到(http://docs.rackspacecloud.com/servers/api/v1.0/cs-devguide-20110112.pdf)。使用TCPInterface时,RakNet支持HTTPS,编译时需要将RakNetDefines.h中的OPEN_SSL_CLIENT_SUPPORT定义为1。

 

设置:

#include "Rackspace.h"

#include "TCPInterface.h"

RakNet::Rackspace rackspaceApi;

RakNet::TCPInterface tcpInterface;

RakNet::RackspaceEventCallback_Default callback;

tcpInterface.Start(0, 0, 1);

rackspaceAPI.Authenticate(&tcpInterface, "myAuthURL", "myRackspaceUsername", "myRackspaceAPIKey");

while (1)

{

       for(RakNet::Packet *packet=tcpInterface.Receive(); packet; tcpInterface.DeallocatePacket(packet), packet=tcpInterface.Receive())

       rackspaceApi.OnReceive(packet);

       rackspaceApi.OnClosedConnection(tcpInterface.HasLostConnection());

}

 

       前面三行分别创建了一个TCPInstance实例,Rackspace实例,以及Rackspace的事件处理器。第四行启动了TCPInterface类,那么可以初始化对外的连接。调用Authenticate()方法,日志记录在Rackspace(这块不知道这么翻译合适不合适,我不太理解这块的代码),存储一个密钥用于下面一系列的操作。了解Authenticate()函数的参数更多内容参考Rackspace.h的注释。在内部循环中的两行给Rakspace类传递连接事件。

       假设验证成功,Authenticate会返回一些除了UNASSIGNED_SYSTEM_ADDRESS值以外的其他值,以表明连接完成。那么之后要获取回调函数OnAuthenticationResult,这个回调处理设置给RET_Success_204的事件类型。这完成之后,你可以调用Rackspace类给出的函数方法。

       如果连接立即关闭,没有来自服务器的任何响应,那你可能是在编译时忘记了将RakNetDefines.h或RakNetDefinesOverrides.h中的OPEN_SSL_CLIENT_SUPPORT设置为1。

 

列出镜像的例子:

rackspaceApi.ListImages();

       等待回调OnListImagesResult(RackspaceEventType eventType, const char * htmlAdditonalInfo)

       正如在devguide中描述的一样,回调会返回HTML事件码,200, 203, 400, 500, 503, 401, 400,或413。200和203表示成功。事件码会在eventType参数中返回。真正的HTML信息会在htmlAdditionalInfo变量中。例子输出:

HTTP/1.1 200 OK

Server: Apache-Coyote/1.1
vary: Accept, Accept-Encoding, X-Auth-Token

Last-Modified: Tue, 29 Mar 2011 22:41:36 GMT

X-PURGE-KEY: /570016/images

Cache-Control: s-maxage=1800

Content-Type: application/xml

Content-Length: 1334

Date: Sat, 02 Apr 2011 15:15:19 GMT

X-Varnish: 601046147

Age: 0

Via: 1.1 varnish

Connection: keep-alive

 

<?xml version="1.0" encoding="UTF-8" standalone="yes"?><images xmlns="http://doc
s.rackspacecloud.com/servers/api/v1.0"><image name="Windows Server 2008 R2 x64 -
MSSQL2K8R2" id="58"/><image name="Fedora 14" id="71"/><image name="Red Hat Enterprise Linux 5.5" id="62"/><image name="Windows Server 2003 R2 SP2 x86" id="29"/
><image name="Oracle EL Server Release 5 Update 4" id="40"/><image name="Windows
Server 2003 R2 SP2 x64" id="23"/><image name="Gentoo 10.1" id="19"/><image name
="Windows Server 2008 SP2 x86" id="31"/><image name="Windows Server 2008 SP2 x64
- MSSQL2K8R2" id="57"/><image name="Ubuntu 9.10 (karmic)" id="14362"/><image na
me="Ubuntu 10.04 LTS (lucid)" id="49"/><image name="Arch 2010.05" id="55"/><imag
e name="Oracle EL JeOS Release 5 Update 3" id="41"/><image name="Ubuntu 8.04.2 L
TS (hardy)" id="10"/><image name="CentOS 5.4" id="187811"/><image name="Fedora 1
3" id="53"/><image name="Windows Server 2008 SP2 x64" id="24"/><image name="Cent
OS 5.5" id="51"/><image name="Ubuntu 10.10 (maverick)" id="69"/><image name="Win
dows Server 2008 R2 x64" id="28"/><image name="Windows Server 2008 SP2 x86 - MSS
QL2K8R2" id="56"/><image name="Red Hat Enterprise Linux 5.4" id="14"/><image nam
e="Debian 5.0 (lenny)" id="4"/><image name="Ubuntu256MBBigPacketTest" id="943818
4"/><image name="RakNet-setup" id="9019637"/></images>

       RakNet不能帮你解析XML。如果你自己没有XML解析器,你可以在DependentExtenstions\XML下找到一个XML解析器。

      

执行用户命令:

       Rackspace提供了一个XML模式,这个模式带有API的操作和参数的列表。有一些命令比Rackspace类提供的命令要复杂。对于这些命令,可以直接调用Rackspace::AddOperaton()。例如,如下是一个创建服务器的命令:

RakNet::RakString xml("<?xml version=\"1.0\" encoding=\"UTF-8\"?>"

"<server xmlns=\"http://docs.rackspacecloud.com/servers/api/v1.0\" name=\"%s\" imageId=\"%s\" flavorId=\"%s\">" "</server>" , name.C_String(), imageId.C_String(), flavorId.C_String());
AddOperation(RO_CREATE_SERVER, "POST", "servers", xml);

       例如,可以扩展XML支持加载一个镜像文件

 

使用RakNet进行服务器管理的例子:

       重新启动崩溃的服务器 — 运行一个主服务器来监控其他的服务器。主服务器可以使用一个固定IP地址,或者可以使用DynDNS(这个也是一个C++ DynDNS类,位于/Source目录下)。当你启动一个Rackspace服务器时,让Rackspace服务器连接到主服务器。如果主服务器在某一点得到了ID_CONNECTON_LOST,让主服务器调用Rackspace::RebootServer,重新启动这个崩溃的服务器。

       匹配能力 – 再次运行一个主服务器,使用CloudServer和CloudClient插件,通知主服务器每一个Rackspace服务器当前连接的负载。如果所有的服务器都满了或者接近要满了。使用Rackspace::CreateServer基于你应用程序的系统镜像创建新的服务器实例。相似地,如果服务器完全是空的,没有玩家在该服务器上登录,可以使用Rackspace::DeleteServer()方法删除空服务器,以节省服务器花费开销。

 

By 北洋小郭

转载请注明出处,切勿用于商业。谢谢!

 

 

一日一点RakNet(5)--详细实现

详细实现 实现        实现RakNet你所要做的就是在程序中获得一个RakPeer的实例。        有一些头问价是你必须需要的: 头文件 #include "MessageId...
  • xiao_0429
  • xiao_0429
  • 2012年02月20日 22:23
  • 5878

一日一点RakNet(12)--Creating Packets

创建数据包   如何将游戏数据编码到数据包中        运行RakNet的系统,事实上所有在因特网上的系统,都是通过人们所熟知的数据包进行通信。或更加准确点在UDP下,它用的是数据报。每一个...
  • xiao_0429
  • xiao_0429
  • 2012年03月04日 15:03
  • 2219

一日一点RakNet(11)--Connecting

连接到其他的系统   寻找连接目标   有5个方式来发现要连接到的系统:        1. 直接输入IP地址(这个广为人知)。        2. LAN广播        3. 使用...
  • xiao_0429
  • xiao_0429
  • 2012年03月02日 13:32
  • 3006

一日一点RakNet(2)--多人游戏组件

多人游戏组件 组成多人游戏的主要系统        多人使得游戏比单人游戏需要更多系统或者额外设计考虑。按照如下的类别进行列举,带着这些问题解决的方法,以及每一个系统的优缺点。尽管在每个部分的结尾...
  • xiao_0429
  • xiao_0429
  • 2012年02月18日 09:33
  • 5358

RakNet学习(23) -- Rackspace Interface

Rakspace 云服务器API的C++接口   用编程的方式管理应用服务器        Rakspace提供了基于API的HTTPS,具体的API信息可以在连接中找到(http:...
  • ykr168age
  • ykr168age
  • 2014年11月02日 16:52
  • 359

一日一点RakNet(1)--RakNet

首先,将参考手册的首页翻译一下,作为学习大纲,放到此处!  一日一点RakNet(1)--RakNet 介绍 参考手册更新于2011/7/7。当前版本信息见readme.txt RakNe...
  • FlyingRoc0209
  • FlyingRoc0209
  • 2016年08月29日 15:49
  • 277

一日一点RakNet(30)--Interface 2插件

Interface2 插件   插件Interface2 概述         PluginInterface2.h是与RakNet一起工作的一个类接口,提供了一些自动功能,也即在消息到达用户之...
  • xiao_0429
  • xiao_0429
  • 2012年04月03日 13:36
  • 740

一日一点RakNet(21)--Statistics

统计   如何读取RakNet的统计数据,以及如何解析统计数据        统计数据对于在线的游戏非常重要,因为它可以让你看到你游戏的传输瓶颈在什么地方。关于统计功能,RakNet提供了结构体...
  • xiao_0429
  • xiao_0429
  • 2012年03月17日 17:18
  • 972

一日一点RakNet(31)--Autopatcher

Autopatcher   自动补丁系统        Autopatcher是一个用于管理两个或多个系统之间丢失的或者改变的文件,在他们之间对不同的文件进行复制。这个插件可以处理传输文件,可以...
  • xiao_0429
  • xiao_0429
  • 2012年04月04日 18:50
  • 1770

一日一点RakNet(10)--Startup

启动RakNet   StartupResult RakPeer::Startup( unsigned short maxConnections, SocketDescriptor *socket...
  • xiao_0429
  • xiao_0429
  • 2012年02月28日 10:44
  • 2069
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:一日一点RakNet(24)--Rackspace Interface
举报原因:
原因补充:

(最多只允许输入30个字)