RakNet--Rackspace interface
![]() |
用编程的方式管理应用服务器 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()方法删除空服务器,以节省服务器花费开销。 |
![]() |
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步