【读书笔记】iOS-深入解剖对等网络
协议本身是一个运行在UDP之上的定制协议。我所以决定使用一个定制协议很简单。首先,当前这个任务看起来足够简单,因此与尝试改进一个现在协议相比,直接构建一个定制协议更为容易。其次,定制协议可以将开销减少至最小并尽可能地提高性能。最后,这本身就是一个很好的教学练习。
TCP是一个流协议,每次查看网页,检查邮件或者下载文件时使用的就是TCP协议。从本质上讲,TCP会在两个计算机之间建立一个双向管道,并尽其所能地掩盖其底层网络的不可靠性和不确定性。
UDP会暴露很多不确定性。它使用一个校验和来确保不会传递被攻破的数据,但它并不会做任何尝试来掩盖出现问题。如果一个路由器决定丢掉一个数据包,那么这个数据永远不会被接收。如果一个较早的数据包被延迟,以至于较晚到达,数据的妆收就会乱序。因此,要由各个应用采取措施对这些问题做出补偿。
但是UDP使用的资源更少,而且能提供更好的性能。本质上TCP是基于连接的,所以,对于应用要通信的每一个远程设备都必须建立并维持连接,而如果计划支持大量此类设备,开销就会非常大。另外,TCP会尝试恢复,但是恢复要花费时间。与之不同,UDP只是跳过丢包,继续发送后续的更新。如果你追求性能,而且能够应对丢失数据,那么UDP是上选。这正是在vocie-over-IP应用,在线游戏以及这个示例工程中使用UDP的原因。
坐标就是32位有符号整数。这有些大材小用,因为iPhone屏幕只有320*480,不过这样可以为将来留出余地。至于颜色,没有必要使用大于单字节的类型来表示各个颜色分量。这样一来,每个分量的取值范围就是0~255,这已经是大多数屏幕所能再现的最大颜色分辨率。
C编译器总是会牺牲空间来换取速度,如果计算机处理的数据是对齐的,处理速度则最快,所谓对齐是指数据所在的内存地址恰好是其大小的倍数。int32_t类型是4字节,所以编译器会尝试使其地址是4的倍数。
前一种体系称为大端字节序,后一种称为小端字节序。目前,Mac中使用的Intel x86 CPU采用小端字节序,iPhone中使用的ARM CPU也是如此。较早的Mac中使用的PowerPC处理器采用大端字节序,一般的,通常会看到不同平中上分别使用不同的字节序。如果使用不正确 字节序读取数据,会得出混乱而且毫无意义的数字,所以,明确字节序非常重要。
实际上,至少还存在另外一种字节序:中间端字节序!在一些较早的,少见的体系结构中,并没有使用前向也没有使用向后顺序,而是采用了一种奇怪的混合顺序,对于事例整数305 419 896,会写为{0x34,0x12,0x78,0x56}.正是由于在这样一些较老的系统上存储字符串”UNIX“时会表示为”NUXI“,所以区别字节序的问题有时称为”NUXI问题"。
参考资料:《精彩iPhone炫酷开发-七位一线高手的编程和设计范例》
【读书笔记】iOS-深入解剖对等网络的更多相关文章
- 【读书笔记】iOS-苹果的网络
一,网络结构. 1,客户端服务器网络结构. 客户端服务器网络结构是一种主从网络结构.服务器是被动的,有点像餐厅的服务员.而客户端是主动的,像在餐厅吃饭的顾客. 2,对等网络结构. 对等网络也叫点对点网 ...
- 读书笔记汇总 --- 用Python写网络爬虫
本系列记录并分享:学习利用Python写网络爬虫的过程. 书目信息 Link 书名: 用Python写网络爬虫 作者: [澳]理查德 劳森(Richard Lawson) 原版名称: web scra ...
- 【读书笔记】iOS-网络-底层网络
在iOS上,有一个库叫做Core Foundation networking或CFNetwork,它是对原始Socket的轻量级封装,不过它很快对于大多数常见场景来说变得非常笨重了.最后,添加了另一层 ...
- 【读书笔记】iOS-网络-保护网络传输
一,验证服务器通信. 二,HTTP认证. 手机银行应用有两种认证模式:标准验证与快速验证.标准验证只是提示用户输入用户名与密码,而快速验证则让用户注册设备,然后使用PIN进行验证,每次验证时无需用户名 ...
- 《UNIX网络编程 卷1:套接字联网API》读书笔记(一):网络编程简介
概述 要编写通过计算机网络通信的程序,首先要确定这些程序相互通信所用的协议.大多数网络是按照划分成客户和服务器来组织的.本章及后续章节的焦点是TCP/IP协议族,也可称为网际协议族.下图为客户与服务器 ...
- [读书笔记]iOS 7 UI设计 对比度
好久没写随笔了,最近在读<iOS 7 byTutorials>,很不错,推荐给大家. 每一个好的程序员也都是一个设计师,不懂设计的程序员不是好的CTO.哈哈,开个小玩笑. iOS 7设计的 ...
- $《第一行代码:Android》读书笔记——第10章 Android网络编程
(一)WebView的用法 1.WebView也是一个普通的控件. 2.常用用法: WebView webView = (WebView)findViewById(R.id.web_view); we ...
- INSPIRED启示录 读书笔记 - 第37章 大众网络服务产品
十大要点 1.可用性:大众网络服务产品必须具备良好的用户体验 2.人物角色:按典型特征将用户分类,抽象出有代表性的用户类型(人物角色) 3.扩展性:应该不间断地考虑扩展性问题,永远留有余地,不到万不得 ...
- 读书笔记-iOS核心动画高级技巧
如果不使用+imageNamed:,那么把整张图片绘制到CGContext可能是最佳的方式了. 这里我们利用了CALayer的KVC来存储和检索任意的值,将图层和索引打标签. 使用KVC打标签
随机推荐
- Scala微服务架构 三
四 Controller层 之前我们已经把基层架构搭建好了,那么要如何使用呢? 首先看看我的Controller层代码 @Singleton class BMAuthController @Injec ...
- WebRTC学习之 Intel® Collaboration Suite for WebRTC源码流程解读
年后回来,因为新项目的需求,开始了解WebRTC相关的知识.目前接触的是Intel® Collaboration Suite for WebRTC.刚开始看SDK发现很多概念是我目前不知道的,于是恶补 ...
- 第二十七节:Java基础面向对象-静态,单例模式,继承详情知识点
前言 Java基础面向对象-静态,单例模式,继承详情知识点.静态-static关键字,static变量,静态代码块,代码块(不加静态),对象创建过程,单例模式,继承. 静态-static关键字 // ...
- Python+Excel+Unittest+HTMLTestRunner实现数据驱动接口自动化测试(二)
因为小白,这2天研究了好久才算是搞好.先附上一个测试完成后邮件的截图: 上一篇有提到: unittest中实际运行了一个接口的很多条用例,而报告中只会有一条记录.这是因为unittest test c ...
- 内存管理-slab[原理]
前言 主要讲解原理,基于2.6.32版本内核源码.本文整体思路:先由简单内存模型逐渐演进到当下通用服务器面对的内存模型,讨论每一个内存模型下slab设计需要解决的问题. 历史简介 linux内核运行需 ...
- 关于vue-router,路由重定向的使用分析
看之前的项目,突然发现一个不算bug的bug,之前也是一直没有想到,现在发现之后越来越觉得有必要改掉, 项目用的是vue做的,自然切换用的就是路由,一级路由包括:首页.记录和个人中心,二级路由是在记录 ...
- 修改centos 7 系统时间
查看当前系统时间 date 修改当前系统时间 date -s "2018-2-22 19:10:30 查看硬件时间 hwclock --show 修改硬件时间 hwclock --set - ...
- .net core build docker image
1.创建.net core web项目 2.添加Dockerfile文件 # 基于microsoft/dotnet:2.1-aspnetcore-runtime构建Docker Image FROM ...
- (剑指Offer)面试题45:圆圈中最后剩下的数字
题目: 0,1,...n-1这n个数字排成一个圆圈,从数字0开始每次从这个圆圈里删除第m个数字,求出这个圆圈里剩下的最后一个数字. 思路: 1.环形链表模拟圆圈 创建一个n个节点的环形链表,然后每次在 ...
- 【Java基本功】一文读懂final关键字的用法
本文主要介绍了final关键字的基本使用方法及原理 final关键字可以修饰类.方法和引用. 修饰类,该类不能被继承.并且这个类的对象在堆中分配内存后地址不可变. 修饰方法,方法不能被子类重写. 修饰 ...