介绍

安装

请参考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很流畅。

一日一点RakNet(3)--介绍的更多相关文章

  1. html5 meta(移动端)介绍及使用

    随着高端手机(Andriod,Iphone,Ipod,WinPhone等)的盛行,移动互联应用开发也越来越受到人们的重视,用html5开发移动应用是最好的选择.然而,每一款手机有不同的分辨率,不同屏幕 ...

  2. Modernizr.js介绍与使用

    Modernizr帮助我们检测浏览器是否实现了某个feature,如果实现了那么开发人员就可以充分利用这个feature做一些工作,反之没有实现开发人员也好提供一个fallback.所以,我们要明白的 ...

  3. AOP 的利器:ASM 3.0 介绍

    引言 什么是 ASM ? ASM 是一个 Java 字节码操控框架.它能被用来动态生成类或者增强既有类的功能.ASM 可以直接产生二进制 class 文件,也可以在类被加载入 Java 虚拟机之前动态 ...

  4. 介绍几个python的音频处理库

    一.eyeD3 直接在google上搜索python mp3 process ,推荐比较多的就是这个第三方库了.先来看看官方介绍吧. About eyeD3 is a Python tool for ...

  5. modernizr.js的介绍和使用

    原文链接:https://www.cnblogs.com/-simon/p/5907053.html Modernizr帮助我们检测浏览器是否实现了某个feature,如果实现了那么开发人员就可以充分 ...

  6. JDBC(1)简单介绍/数据库的连接

    初识JDBC: JDBC是java连接数据库的一个工具,没有这个工具,java将无法和数据库进行连接. JDBC API: JDBC是个“低级”接口,也就是说,他直接用于调用SQL命令. JDBC驱动 ...

  7. iOS开发-应用崩溃日志揭秘(一)

    作为一名应用开发者,你是否有过如下经历? 为确保你的应用正确无误,在将其提交到应用商店之前,你必定进行了大量的测试工作.它在你的设备上也运行得很好,但是,上了应用商店后,还是有用户抱怨会闪退 ! 如果 ...

  8. Node实践之二

    先从一个简单的demo说起,用cmd打开命令提示符,输入echo Hello,大家是不是看到终端上显示出了Hello字样,事实上这就是一个简单的事件. 回到正题,相信提到node.js,免不了让人想起 ...

  9. iOS测试常见崩溃

    什么是崩溃日志,从哪里能得它? iOS设备上的应用闪退时,操作系统会生成一个崩溃报告,也叫崩溃日志,保存在设备上.崩溃日志上有很多有用的信息,包括应用是什么情况下闪退的.通常,上面有每个正在执行线程的 ...

随机推荐

  1. IDEA 内存设置

    -server -Xms2g -Xmx2g -XX:NewRatio=3 -Xss16m -XX:+UseConcMarkSweepGC -XX:+CMSParallelRemarkEnabled - ...

  2. python初学--文件操作、字典

    文件读写 1.先打开文件 2.读取/写入内容 3.保存文件   文件的open模式有三种 1.w 写模式,它是不能读的 只要用w打开文件,文件中的东西都会被清空 w+, 写读模式,只要沾上w 就会清空 ...

  3. Jquery动态添加元素并给元素增加onchange相应

    动态添加元素: $select = $("<select></select>"); $("<option></option> ...

  4. AtomicReference 和 volatile 的区别

    顾名思义,就是不会被打断!!!!!! https://www.cnblogs.com/lpthread/p/3909231.html java.util.concurrent.atomic工具包,支持 ...

  5. hadoop3.1 ha高可用部署

    1.资源角色规划

  6. python在windows下连接mysql数据库

    一,安装MySQL-python python 连接mysql数据库需要 Python interface to Mysql包,包名为 MySQL-python ,PyPI上现在到了1.2.5版本.M ...

  7. LR脚本用户自定义C语言函数

    LR脚本实战:用户自定义C语言函数 Loadrunner可以使用标准C语言的函数,因此我们可以在脚本中编写自己的函数用于调用,把脚本结构化,更好的进行重用. 先看一个例子: Action() { in ...

  8. LoadRunner运行中的mmdrv和mdrv

    在LoadRunner运行脚本过程中,在任务管理器中我们可以看到有一个或多个名为“mmdrv”的进程在运行,与此同时当我们查看LoadRunner\bin目录下的文件时还会看到一个“mdrv.exe” ...

  9. 一款你不容错过的Laravel后台管理扩展包 —— Voyager

    http://laravelacademy.org/post/6401.html  Posted on 2016年11月1日 by  学院君 1.简介 Voyager是一个你不容错过的Laravel后 ...

  10. 捕获浏览器的前进、后退事件 window.onhashchange 并区别于点击链接

    <html> <head> <meta http-equiv="content-type" content="text/html;chars ...