一日一点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...

一日一点RakNet(40)--Lobby2Client-PS3

Lobby2Client_360插件概览   NP系统的接口,包括信号        PS3 NP系统提供了房间和大厅的概念。Sony也使用NAT穿透架起了自己的主机服务器。通过使用Lobby2...

一日一点RakNet(38)--Lobby2Client PC

大厅服务器   数据库支持好友,房间,邮件,排名和更多功能        大厅服务器是一个提供了PostgreSQL数据库驱动功能的插件,使用数据库可以持久化游戏数据和比赛信息(也即将游戏数...

一日一点RakNet(10)--Startup

启动RakNet   StartupResult RakPeer::Startup( unsigned short maxConnections, SocketDescriptor *socket...

一日一点RakNet(60)--PHP Directory Server(目录服务器)

PHP 目录服务器概述   使用共享的Web主机给出游戏列表        Lightweight数据库插件功能强大,但是它要求一个一台专用的服务器运行RakNet实例。在有些情况下,这个要求...

一日一点RakNet(26)--Preprocessor Directives

预处理指令         在RakNetDefinesOverrides.h文件中定义了下面这些值。在RakNetDefines.h中这些都是作为默认设置。在NativeFeatureInclu...

一日一点RakNet(17)--Reliability Types

可靠性类型:   控制何时如何使用数据包优先级和可靠性类型 // 发送数据的时候,使用这些枚举类型设置数据类型 enum PacketPriority {        // 最高优先级。...

一日一点RakNet(51)--SQLite3LoggerPlugin设置

SQLite3LoggerPlugin设置 概览        RakNet的SQLLite日志系统允许任何支持TCP的系统向远端服务器发送日志。日志自动包含了源文件和行,以及日志发送的时间,发送...

一日一点RakNet(6)--帮助手册

帮助手册   工程设置   在教程中,所有的图片和界面参考的是VS2005,微软版权。同等参数配置你的编译器。 1. 创建Win32控制台工程,将它命名为ChatServer   2. ...

一日一点RakNet(22)--Secure Connections

安全连接   确保网络传输安全        一旦在线游戏达到了一定的流行程度,人们就开始尝试作弊。那么你就需要在游戏层和网络层考虑这个这个作弊或欺骗问题。RakNet通过提供安全连接来处理这些...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:一日一点RakNet(24)--Rackspace Interface
举报原因:
原因补充:

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