网络-性能调优

Socket是应⽤用层与TCP/IP协议族通讯的中间软件抽象层,它是⼀一组接⼝口。在设计模式中,Socket其实就是 ⼀一个⻔门⾯面模式,它把复杂的TCP/IP协议族隐藏在Socket接⼝口后⾯面,对⽤用户来讲,⼀一组简单的接⼝口就是所有,让 Socket去组织数据,以符合指定的协议。javascript

⼀一个⽣生活中的场景。你要打电话给⼀一个朋友,先拨号,朋友听到电话铃声后提起电话,这时你和你的朋友就 建⽴立起了链接,就能够讲话了。等交流结束,挂断电话结束这次交谈。html

先从服务器端提及。1>服务器端先初始化Socket,而后与端⼝口绑定(bind),对端⼝口进⾏行监听(listen),调 ⽤用accept阻塞,等待客户端链接。2>在这时若是有个客户端初始化⼀一个Socket,而后链接服务器(connect),3>若是 链接成功,这时客户端与服务器端的链接就建⽴立了。客户端发送数据请求,服务器端接收请求并处理请求,而后链接成功,这时客户端与服务器端的链接就建⽴立了。客户端发送数据请求,服务器端接收请求并处理请求,而后java

arc=send(fd,szText,cnt,0);ios

把回应数据发送给客户端,客户端读取数据,最后关闭链接,⼀一次交互结束。git

在客户端输⼊入服务器端的IP地址和发送的数据,而后按发送按钮,服务器端接收到数据,而后回应客户端。 客户端读取回应的数据,显⽰示在界⾯面上。程序员

在服务器端,主要是启动Socket和监听线程。github

服务器端⼀一直在监听是否有客户端链接,若有链接,处理客户端的请求,给出回应,而后继续监听。编程

客户端:设计模式

苹果iso开发: socket tcp/ip 的通信api

使用方法以下:

一、建立工程。

二、把AsyncSocket添加到项目中。

三、添加CFNetwork.framework到工程中。

四、实现测试类:

#import <UIKit/UIKit.h>

#import "AsyncSocket.h"

@interface iphone_socketViewController : UIViewController {  

   AsyncSocket *asyncSocket; }  

@end

IOS socket基于tcp/udp的通讯

分类: ios开发 2013-12-03 15:10 1399人阅读 评论(0) 收藏 举报

ios通讯socket苹果

网络上已经有编写好的开源类库GCDAsyncSocket 和GCDAsyncUdpSocket  这是GCD版的  比AsyncSocket 和AsyncUdpSocket估计要好用点 用法也很简单,跟http很相似  只要指定服务器的ip和端口 而后再实现各类回调就行,原生态实现正在摸索。。。。。socket 默认状况下就是采用TCP协议,建立以后通讯双方的socket会一直保持链接,除非手动close或由于网络缘由close,因此,此种情况对服务器而 言是有必定资源消耗的,这种模式只适应与对服务器小规模的访问,特别是对于实时性很高的应用,如视频直播、呼叫系统等,而http通常都是短链接的,一次 请求完以后客户端便会于服务端端开链接
   http是凌驾于socket之上的高级协议,而socket是比较底层的通信方式,只是创建了一个链接通道,具体上面传输什么样的数据,按照什么格式传输,须要你本身定义,因此这就须要从新编写定义服务端与客户端的所应遵循的规定,而http已经被前人们定义使用过了


先去github的网站下载最新的包,而后先看看介绍。写的比较详细了

https://github.com/robbiehanson/CocoaAsyncSocket/wiki/Intro_GCDAsyncSocket

网上不少都是老版本的帖子。官方已经推出了GCDAsyncSocket来代替之前老的AsyncSocket。

个人项目是no-ARC的,这个框架只有arc的版本。因此引入GCDAsyncSocket的.h和.m文件后,修改xcode中项目的属性。

 

1)targets中“build settings”中找到Compiler for c/c++/Objective-c的选项。改成Apple LLVM compiler 3.0 只要是3.0或以上就能够

2)在“build phases”中“compile sources”中找到GCDAsyncSocket.m,增长参数-fobj-arc

3)引入GCDAsyncSocket所须要的框架,CFNetwork和security这两个



通信http,TCP/IP与socket之间的区别

一、TCP/IP链接

  手机可以使用联网功能是由于手机底层实现了TCP/IP协议,可使手机终端经过无线网络创建TCP链接。TCP协议能够对上层网络提供接口,使上层网络数据的传输创建在“无差异”的网络之上。创建起一个TCP链接须要通过“三次握手”:

第一次握手:客户端发送syn包(syn=j)到服务器,并进入SYN_SEND状态,等待服务器确认;

 

第二次握手:服务器收到syn包,必须确认客户的SYN(ack=j+1),同时本身也发送一个SYN包(syn=k),即SYN+ACK包,此时服务器进入SYN_RECV状态;

 

第三次握手:客户端收到服务器的SYN+ACK包,向服务器发送确认包ACK(ack=k+1),此包发送完毕,客户端和服务器进入ESTABLISHED状态,完成三次握手。

 

握手过程当中传送的包里不包含数据,三次握手完毕后,客户端与服务器才正式开始传送数据。理想状态下,TCP链接一旦创建,在通讯双方中的任何一方主动关闭链接以前,TCP 链接都将被一直保持下去。断开链接时服务器和客户端都可以主动发起断开TCP链接的请求,断开过程须要通过“四次握手”(过程就不细写了,就是服务器和客户端交互,最终肯定断开).

 

二、HTTP链接

HTTP协议即超文本传送协议(Hypertext Transfer Protocol ),是Web联网的基础,也是手机联网经常使用的协议之一,HTTP协议是创建在TCP协议之上的一种应用。

HTTP链接最显著的特色是客户端发送的每次请求都须要服务器回送响应,在请求结束后,会主动释放链接。从创建链接到关闭链接的过程称为“一次链接”。

3.1套接字(socket)概念

套接字(socket)是通讯的基石,是支持TCP/IP协议的网络通讯的基本操做单元。它是网络通讯过程当中端点的抽象表示,包含进行网络通讯必须的五种信息:链接使用的协议,本地主机的IP地址,本地进程的协议端口,远地主机的IP地址,远地进程的协议端口。

 

3.2 创建socket链接

 创建Socket链接至少须要一对套接字,其中一个运行于客户端,称为ClientSocket ,另外一个运行于服务器端,称为ServerSocket 。

 

套接字之间的链接过程分为三个步骤:服务器监听,客户端请求,链接确认。

服务器监听:服务器端套接字并不定位具体的客户端套接字,而是处于等待链接的状态,实时监控网络状态,等待客户端的链接请求。

 

 

 

客户端请求:指客户端的套接字提出链接请求,要链接的目标是服务器端的套接字。为此,客户端的套接字必须首先描述它要链接的服务器的套接字,指出服务器端套接字的地址和端口号,而后就向服务器端套接字提出链接请求。

 

链接确认:当服务器端套接字监听到或者说接收到客户端套接字的链接请求时,就响应客户端套接字的请求,创建一个新的线程,把服务器端套接字的描述发给客户端,一旦客户端确认了此描述,双方就正式创建链接。而服务器端套接字继续处于监听状态,继续接收其余客户端套接字的链接请求。

 

四、SOCKET链接与TCP/IP链接

建立Socket链接时,能够指定使用的传输层协议,Socket能够支持不一样的传输层协议(TCP或UDP),当使用TCP协议进行链接时,该Socket链接就是一个TCP链接。

 
五、Socket链接与HTTP链接

不少状况下,须要服务器端主动向客户端推送数据,保持客户端与服务器数据的实时与同步。此时若双方创建的是Socket链接,服务器就能够直接将数据传送给客户端;若双方创建的是HTTP链接,则服务器须要等到客户端发送一次请求后才能将数据传回给客户端,所以,客户端定时向服务器端发送链接请求,不只能够保持在线,同时也是在“询问”服务器是否有新的数据,若是有就将数据传给客户端。

 

http协议是应用层的协义 

一个是发动机(Socket),提供了网络通讯的能力 
一个是轿车(Http),提供了具体的方式 

 

两个计算机之间的交流无非是两个端口之间的数据通讯,具体的数据会以什么样的形式展示`是以不一样的应用层协议来定义的`如HTTP`FTP`... 

socket是对端口通讯开发的工具,它要更底层一些 .

 

get和post这是http协议的两种方法,另外还有head, delete等
这两种方法有本质的区别,get只有一个流,参数附加在url后,大小个数有严格限制且只能是字符串。post的参数是经过另外的流传递的,不经过url,因此能够很大,也能够传递二进制数据,如文件的上传。
在servlet开发中,

TCP/IPHttpSocket的区别

  经过初步的了解,我知道IP协议对应于网络层,TCP协议对应于传输层,而HTTP协议对应于应用层,

 

  而咱们平时说的最多的socket是什么呢,实际上socket是对TCP/IP协议的封装,Socket自己并非协议,而是一个调用接口(API)。

  经过Socket,咱们才能使用TCP/IP协议。

  实际上,Socket跟TCP/IP协议没有必然的联系。

  Socket编程接口在设计的时候,就但愿也能适应其余的网络协议。

  因此说,Socket的出现只是使得程序员更方便地使用TCP/IP协议栈而已,是对TCP/IP协议的抽象,

  从而造成了咱们知道的一些最基本的函数接口,好比create、listen、connect、accept、send、read和write等等。

  网络有一段关于socket和TCP/IP协议关系的说法比较容易理解:

  “TCP/IP只是一个协议栈,就像操做系统的运行机制同样,必需要具体实现,同时还要提供对外的操做接口。

 

  CSDN上有个比较形象的描述:HTTP是轿车,提供了封装或者显示数据的具体形式;Socket是发动机,提供了网络通讯的能力。

  实际上,传输层的TCP是基于网络层的IP协议的,而应用层的HTTP协议又是基于传输层的TCP协议的,而Socket自己不算是协议,就像上面所说,它只是提供了一个针对TCP或

  套接字之间的链接过程分为三个步骤:服务器监听,客户端请求,链接确认。

  一、服务器监听:服务器端套接字并不定位具体的客户端套接字,而是处于等待链接的状态,实时监控网络状态,等待客户端的链接请求。

  二、客户端请求:指客户端的套接字提出链接请求,要链接的目标是服务器端的套接字。

  为此,客户端的套接字必须首先描述它要链接的服务器的套接字,指出服务器端套接字的地址和端口号,而后就向服务器端套接字提出链接请求。

  三、链接确认:当服务器端套接字监听到或者说接收到客户端套接字的链接请求时,就响应客户端套接字的请求,创建一个新的线程,把服务器端套接字的描述发给客户端,一旦客户端确认了此描述,双方就正式创建链接。

  而服务器端套接字继续处于监听状态,继续接收其余客户端套接字的链接请求。

  3、HTTP连接的特色

  HTTP协议即超文本传送协议(Hypertext Transfer Protocol ),是Web联

  4、TCP和UDP的区别(考得最多。。快被考烂了我以为- -\\)

  一、TCP是面向连接的,虽说网络的不安全不稳定特性决定了多少次握手都不能保证链接的可靠性,但TCP的三次握手在最低限度上(实际上也很大程度上保证了)保证了链接的可靠性;

  而UDP不是面向链接的,UDP传送数据前并不与对方创建链接,对接收到的数据也不发送确认信号,发送端不知道数据是否会正确接收,固然也不用重发,因此说UDP是无链接的、不可靠的一种数据传输协议。

  二、也正因为1所说的特色,使得UDP的开销更小数据传输速率更高,由于没必要进行收发数据的确认,因此UDP的实时性更好。

  知道了TCP和UDP的区别,就不难理解为什么采用TCP传输协议的MSN比采用UDP的QQ传输文件慢了,但并不能说QQ的通讯是不安全的,

  由于程序员能够手动对UDP的数据收发进行验证,好比发送方对每一个数据包进行编号而后由接收方进行验证啊什么的,

  即便是这样,UDP由于在底层协议的封装上没有采用相似TCP的“三次握手”而实现了TCP所没法达到的传输效率。

iOS应用是很是注重用户体验的,不光是要求界面设计合理美观,也要求各类UI的反应灵敏,我相信你们对那种一拖就卡卡卡的 TableView 应用没什么好印象。还记得12306么,那个速度,相信你们都受不了。为了提升 iOS 的运行速度,下面我将抛砖引玉介绍一些我实践过的用来提供iOS程序运行效率的方法,与你们分享,但愿能获得更多的反馈和建议。

1,计算代码运行时间:相信数据,不要太相信感受。

2,善用性能分析工具。

不要使用太多的Xib  xib编译速度慢,有个将xib转化为代码的过程

5.  对于 TableView重用 cell;减小 cell 初始化的工做量,延迟装载;

6. 在线程中使用 autoreleasepool

7,将一些不过重要的任务放在 idle 时运行。

8,不要在 viewWillAppear 中作费时的操做。

9,使用多线程来延迟加载资源。占位,异步,主线程

10  利用 cache 空间换时间cache 是一种常见的空间换时间的提供性能的收到,能够用在至关多的场合。

 

 

iOS6,7的时间

1.按照传统  新版IOS会随着新版IOS设备一块儿出现,也就是下个月发布的全新iphone,可是在6月苹果召开大会的时候已经放出了ios6的bate版,若是你有开发者帐号,即可以更新到最新的测试版,若是没有下个月也势必能够等到正式版IOS6

iOS6新特性

    每次ios大版本的更新,都会带来一些新的东西,对开发者来讲,有利有弊。 好处是,新增了不少新的属性,控件和api,开发者权限更大了,能够轻松实现更多的功能。弊端在于,可能废除了一些旧的api接口,须要作更多的适配和兼 容。经过本身开发过程当中的一些经验,查阅ios6 SDK以及参考网上一些文档。 总结了下面这些关于ios6系统的新特性,方便你们在后续开发过程当中进行对比参考。

  关于内存警告

  ios6中废除了viewDidUnload,viewWillUnload这两个系统回调, 收到内存警告时在didReceiveMemoryWarning中进行相关的处理。

  关于屏幕旋转

一样ios6 废除了shouldAutorotateToInterfaceOrientation这个旋转屏幕的设置接口。 必须在两个新接口中设置旋转属性:shouldAutorotate

supportedInterfaceOrientations

收到旋转事件后的处理,一样在willRotateToInterfaceOrientation,和didRotateFromInterfaceOrientation中进行。

  UISwitch

ios6下,新增了如下几个属性,能够设置开关的颜色以及背景图

@property ( nonatomic ,  retain ) UIColor*tintColor;

@property ( nonatomic ,  retain ) UIColor*thumbTintColor;

@property ( nonatomic ,  retain ) UIImage*onImage;

@property ( nonatomic ,  retain )UIImage *offImage;

  UINavigationBar

ios6新增了,设置阴影图片的属性

@property ( nonatomic , retain ) UIImage*shadowImage;

UIImage

能够在ios6下设置图片的scale比例尺寸了

+ (UIImage *)imageWithData:(NSData *)data scale:(CGFloat)scale;

- ( id )initWithData:(NSData *)data scale:(CGFloat)scale;

  UIRefreshControl

以前苹果官方是没有现成的下拉刷新的控件,都是本身实现或者使用比较成熟的开源库。  此次,ios6 苹果加入了UIRefreshControl,配合UITableView直接实现下拉刷新。可是为了保证兼容性, 仍是不推荐目前使用这个控件。 

UICollectionView

全新的集合控件, 应用场景有相似照片墙,瀑布流等。Github里以前已经有不少开源库实现了这个控件的功能。

iOS7新特性

全新UI设计
iOS7最大的变化莫过于UI设计,也许你会说UI设计“这是设计师大大们应该关注的事情,不关开发者的事,咱们只须要替换图片就好了”。那你就错了。 UI的变化必然带来使用习惯和方式的转变,如何运用iOS7的UI,如何是本身的应用更切合新的系统,都是须要考虑的事情。另外值得注意的是,使用 iOS7 SDK(如今只有Xcode5预览版提供)打包的应用在iOS7上运行时将会自动使用iOS7的新界面,因此原有应用可能须要对新界面进行重大调整。具体 的iOS7中所使用的UI元素的人际交互界面文档,能够从这里找到(应该是须要开发者帐号才能看)。

简单总结来讲,以如今上手体验看来新的UI变化改进有以下几点:

1.状态栏,导航栏和应用实际展现内容再也不界限:系统自带的应用都再也不区分状态栏和navigation bar,而是用统一的颜色力求简洁。这也算是一种趋势。

2.BarItem的按钮所有文字化:这点作的至关坚定,全部的导航和工具条按钮都取消了拟物化,原来的文字(好比“Edit”,“Done”之类)改成了简单的文字,原来的图标(好比新建或者删除)也作了简化。

3.程序打开加入了动画:从主界面到图标所在位置的一个放大,同时显示应用的载入界面。

春风又绿加州岸,物是人非又一年。WWDC 2013 keynote落下帷幕,新的iOS开发旅程也由此开启。在iOS7界面重大变革的背后,开发者们须要知道的又有哪些呢。同去年同样,我会先简单纵览地介 绍iOS7中我我的认为开发者须要着重关注和学习的内容,以后再陆续对本身感兴趣章节进行探索。计划继承相似WWDC2012的笔记的形式,但愿国内开发 者有所帮助。

 

 

最后
固然还有一些其余小改动,包括MessageUI里添加了附件按钮,Xcode开始支持模块了等等。完整的iOS7新特性列表能够在这里找到(暂时应该也 须要开发者帐号)。最后一个好消息是,苹果放慢了废弃API的速度,这个版本并无特别重要的API被标为DeprecatedCheers
 

虽然ARC是与iOS5一同推出,可是因为ARC的实现机制是在编译期完成,因此使用ARC以后App仍然能够支持iOS4.3。稍微须要注意的是,若是 要在ARC开启的状况下支持iOS4.3,须要将weak关键字换成 __unsafe_unretained,另外还有一些细节须要处理,在这里我就不展开说了。

相关文章
相关标签/搜索