介绍
安装
请参考Compiler Setup页,有什么问题在这块有解答。如果有额外的问题参考FAQ,http://www.jenkinssoftware.com,或者邮件联系我们。高级用户可以直接跳转到Code tutorial。初学者或想要多了解点RakNet的请继续阅读。
API描述
RakNet致力于网络和网络相关服务的游戏引擎。不仅包含了网络通信,也包括游戏级别复制,补丁升级,NAT穿透,和语音聊天。RakNet可以用于任何的应用,且可以与其他任何使用了RakNet的系统通信,不论它们位于同一个计算机,跨LAN,或跨Internet。尽管RakNet可以用于任何的网络应用,但是它主要致力于在线游戏,实现了网络游戏的共同功能需求;为了方便在线游戏编程提供了一些额外的功能。
网络101
游戏网络连接通常有两种类别:端到端模式和服务器/服务器模式。每一种模式以各种不同的方式和各种协议实现。然而,RakNet支持任意拓扑。
一般来讲,具有最好网络连接的最快的计算机应该充当服务器,其他的计算机作为客户端。
尽管有许多类型的编码数据包的方法,它们或者按照UDP数据包或者按照TCP数据包。TCP用于传输文件非常好,但是不太适合于游戏。使用TCP常常有延迟(导致游戏有很大延迟),并且是以流的形式到达,而不是数据包(这样你必须实现你自己的分包机制)。UDP包就比较好了,UDP包立即发送,并且是以包的形式发送,可以很容易区分数据。然而,额外的灵活性却带来了各种问题:
1. UDP包并不保证到达。你可能可以接收到所有发送的数据包,或者一个也接收不到,或发送数据包的一部分。
2. UDP数据包不保证按序到达。这在编程游戏时是很大的问题。例如你可能会在接收到一个坦克生成的消息之前,接收到一条坦克损毁的消息。
3. UDP数据包保证到达的正确性,但是并不能保证到达的数据不受黑客篡改。
4. UDP包并不需要接受连接。起初这个听起来还不错哦,但是当你意识到没有连接的保护时,游戏很容易遭到黑客时,就不会这么想了。例如,如果你有一个消息“Give such and such invulnerability”,黑客可以复制这条消息,每次在他们想要不受伤害时,可以将这条消息发送服务器。
5. UDP传输没有提供流控制或聚合,那可能过度发送复制件,不能有效数据发送。
RakNet如何帮助解决这些问题?
在最底层,RakNet’s 的端到端类,RakPeerInterface在UDP数据包之上提供了一层,透明地处理这些问题。使得编程者可以集中精力于游戏而不是通信引擎。
1. RakNet可以自动重发没有到达的数据
2. RakNet可以有效地自动排序到达的失序数据包。
3. RakNet可以保护传输的数据,如果数据遭到篡改,可以通知编程人员。
4. RakNet提供了一个快速,简单,连接层,它阻塞了未授权的传输。
5. RakNet透明地处理网络问题,例如流控制和聚合。
当然了,如果RakNet没能够很有效的处理这些问题,例如发送大量数据,使用阻塞操作上锁,或让RakNet很难利用这些优势,它也不会有如此多的应用。幸好情况不是这样的。
与其他的网络API不同:
1. RakNet在发送的数据中加入的控制数据非常少。
2. RakNet不会导致你不适用的功能的额外消耗。
3. RakNet有即时的连接与断开连接。
4. RakNet并不会假设网络是可靠的。RakNet会很好地处理连接问题,而不是仅仅阻塞,上锁或崩溃。
5. RakNet已经成功地用于很多游戏。事实证明它很好用。
6. RakNet很容易使用。
7. RakNet的文档很全面。每一个头文件有每一个类和函数的文档。也有Doxygen参考手册和HTML帮助文档。
RakNet可以为我们做哪些工作?
RakNet工作在字节流一层,带宽是很有效的,但是在你拥有较大控制权时,也要付出时间消耗的代价。RakNet提供了许多功能使得网络更加容易,包括远程调用,BitStream类,和自动对象同步。
大多数的游戏共享一组共同的功能,例如设置游戏玩家限制,密码生成,以及统计数据。RakNet博鳌扩所有这些功能,且又其他额外的功能。如果游戏需要使用RakNet,要检查RakNet还没有集成到你的游戏中。
最后,RakNet包含了一小组程序需要与你的游戏连接工作,例如主服务器或实时语音。
如下列出了一些你在RakNet之外可以做的一些工作:
1. 实现低带宽语音通信
2. 运行一个主服务器用于玩家寻找网络上的游戏。
3. 使用远程功能调用,允许你用变量参数调用其他计算机上的函数。
4. 获得统计数据,例如ping,包丢失,发送字节数,接收字节数,发送数据包,接收到的数据包数量,或其他更多的数据。
5. 每个数据包中可选的时间戳可以让你十分准确地知道一个动作是多长时间以前在另外的一个系统上执行的,尽管ping很流畅。