一日一点RakNet(3)--介绍
介绍
安装
请参考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)--介绍的更多相关文章
- html5 meta(移动端)介绍及使用
随着高端手机(Andriod,Iphone,Ipod,WinPhone等)的盛行,移动互联应用开发也越来越受到人们的重视,用html5开发移动应用是最好的选择.然而,每一款手机有不同的分辨率,不同屏幕 ...
- Modernizr.js介绍与使用
Modernizr帮助我们检测浏览器是否实现了某个feature,如果实现了那么开发人员就可以充分利用这个feature做一些工作,反之没有实现开发人员也好提供一个fallback.所以,我们要明白的 ...
- AOP 的利器:ASM 3.0 介绍
引言 什么是 ASM ? ASM 是一个 Java 字节码操控框架.它能被用来动态生成类或者增强既有类的功能.ASM 可以直接产生二进制 class 文件,也可以在类被加载入 Java 虚拟机之前动态 ...
- 介绍几个python的音频处理库
一.eyeD3 直接在google上搜索python mp3 process ,推荐比较多的就是这个第三方库了.先来看看官方介绍吧. About eyeD3 is a Python tool for ...
- modernizr.js的介绍和使用
原文链接:https://www.cnblogs.com/-simon/p/5907053.html Modernizr帮助我们检测浏览器是否实现了某个feature,如果实现了那么开发人员就可以充分 ...
- JDBC(1)简单介绍/数据库的连接
初识JDBC: JDBC是java连接数据库的一个工具,没有这个工具,java将无法和数据库进行连接. JDBC API: JDBC是个“低级”接口,也就是说,他直接用于调用SQL命令. JDBC驱动 ...
- iOS开发-应用崩溃日志揭秘(一)
作为一名应用开发者,你是否有过如下经历? 为确保你的应用正确无误,在将其提交到应用商店之前,你必定进行了大量的测试工作.它在你的设备上也运行得很好,但是,上了应用商店后,还是有用户抱怨会闪退 ! 如果 ...
- Node实践之二
先从一个简单的demo说起,用cmd打开命令提示符,输入echo Hello,大家是不是看到终端上显示出了Hello字样,事实上这就是一个简单的事件. 回到正题,相信提到node.js,免不了让人想起 ...
- iOS测试常见崩溃
什么是崩溃日志,从哪里能得它? iOS设备上的应用闪退时,操作系统会生成一个崩溃报告,也叫崩溃日志,保存在设备上.崩溃日志上有很多有用的信息,包括应用是什么情况下闪退的.通常,上面有每个正在执行线程的 ...
随机推荐
- [总结]可重用cell的定义方式
1.简介 为了提高tableview中cell的加载速度通常可以使用cell重用的方式来实现,即我们向上拖动cell的时候,上部份消失的cell可以重复的被下部分出现的cell重用. 2.说明 一般c ...
- ORACLE导入Excel数据
首先建好一个和Excel表字段对应字段的表,然后 select t.* from 表名 t for update; 点击这个锁子,打开它 粘贴,然后 再提交事务即可
- 数字签名(以ActiveXDemo为例)
1.创建Install.inf文件和run.bat Install.inf: [version] signature="$CHICAGO$" AdvancedINF=2.0 [Se ...
- MYSQL表中向SET类型的字段插入值时值之间不能有空格
MYSQL 中有一种数据类型是 SET,首先我们查看一个包含 SET 类型字段的表结构: 接下来我们向表中插入数据: 按照上面的语句插入数据发现报错了,于是去掉了插入值之间的空格,然后插入成功:
- Mysql 数据库学习笔记03 存储过程
一.存储过程:如下 通过 out .inout 将结果输出,可以输出多个值. * 调用存储过程: call 存储名称(参数1,参数2,...); 如指定参数不符合要求,返回 Emp ...
- Linux Python apache的cgi配置
一.找到安装Apache的目录/usr/local/apache2/conf,并对httpd.conf配置文件进行修改 1.加载cgi模块 去掉注释: LoadModule cgid_module m ...
- DateTimeToUnix/UnixToDateTime 对接时间转换
问题,通过毫秒数来解析出时间:(很多对接的时候经常需要用到) <?php $MyJson = '{"jingdong_vas_subscribe_get_responce": ...
- 并发容器ConcurrentHashMap与synchronized联合使用达到线程安全
http://blog.csdn.net/yansong_8686/article/details/50664338 map.put(KEY, map.get(KEY) + 1); 实际上并不是原子操 ...
- hive的窗口函数1
Hive中提供了越来越多的分析函数,用于完成负责的统计分析.抽时间将所有的分析窗口函数理一遍,将陆续发布.今天先看几个基础的,SUM.AVG.MIN.MAX.用于实现分组内所有和连续累积的统计. 1. ...
- 【转载】关于Python的Mixin模式
本博按: mixin是看起来是多继承的一种,但是,这种继承并不作为父类存在,而是增加功能到子类中. 像C或C++这类语言都支持多重继承,一个子类可以有多个父类,这样的设计常被人诟病.因为继承应该是个” ...