- 浏览: 887095 次
- 性别:
- 来自: 上海
文章分类
- 全部博客 (466)
- iPhone, iOS , Objective-c (155)
- 数据库 (20)
- 设计模式 (5)
- 第三方包管理,cocoapod (2)
- 版本管理, SVN, Subversion, Git (1)
- Google, Android, Java (14)
- Wordpress (1)
- 职业素养 (3)
- 版本管理,git (3)
- 前端小技巧 (2)
- flash (1)
- javascript (5)
- Ruby (0)
- 编程语言 (1)
- 网络常识 (1)
- 找到生活好感觉 (5)
- 产品经理 (1)
- markdown (1)
- 云服务器 (1)
- iPhone (116)
- iOS (116)
- Objective-c (116)
- 学习技巧 (2)
- Google (5)
- Android (6)
- Java (21)
- python (1)
- sqlite (3)
- node.js (2)
- mongodb (2)
- 学习技巧,阅读 (2)
- 软件测试 (3)
- 架构设计 (2)
- 设计 (1)
- Spring framework (3)
- junit (1)
- Linux (2)
- 软件 (1)
- Struts2 (1)
- 版本管理 (3)
- SVN (3)
- Subversion (3)
- Git (3)
- mysql (5)
- quartz (1)
- 无关技术 (1)
- 前端 (1)
- Redis (1)
- 产品管理 (0)
- 计算机常识 (1)
- 计算机科学 (0)
- swift (1)
- 服务器 (2)
- 搜索 (1)
- Scala (1)
- J2EE (1)
- maven (1)
- 前端css (1)
- 英语 (1)
- 消息队列 (1)
- kafka (0)
- apache kafka (4)
- netbeans (1)
- IDE (2)
- 歌词 (1)
- 过滤器实现 (1)
- linux vim vi (1)
- jmeter (1)
- springcloud (1)
最新评论
-
hujingnemo:
不知道为什么打不开
CHM如何改编字体大小 -
weiboyuan:
求答案 weiboyuanios@163.com
iOS软件工程师面试题(高级) -
xueji5368:
这个现在已经广泛使用了嘛!
RoboGuice入门 -
Yao__Shun__Yu:
...
CHM如何改编字体大小 -
353144886:
非常之详细 美女求认识
sqlite数据类型 datetime处理
参考文章:
http://abbshr.github.io/2013/11/05/new46.html
http://www.zhihu.com/question/20215561 等
首先,
HTTP WEBSCOKET SCOKET是三个网络协议,http网络协议目前最新版本为1.1 相关的API有HTML5等,使用httprequest httpresponse来收发数据,数据采用应答式,即客户端主动向服务端发送数据请求,服务端返回数据,应答结束,连接结束。当然可以使用keep-alive的应答模式,但是即使在这种模式中也是通过客户端ajax,comet(还没研究)等技术来实现,本质上服务端还是无法主动向客户端发送数据。(而且目前的web server中普遍有timeout的概念如apache2.0为15s 2.2为5s timeout后会断开keep-alive的连接)
socket基于TCP/IP的网络协议,数据以数据包package的形式传递,多用于桌面程序中,比较成熟,应用广泛,基于transport layer数据传递。
数据接收过程中以package的形式传递,接收的时候不保证一次接收到想要的数据长度,需要循环接收知道数据完整,常用的函数:
socket("ip","port")
bind()
send()
recv()
read()
write()等
websocket是html5中提供的api 基本原理是在http协议层上实现了tcp通信(可双向收发信息,和http有本质的不同html5的新东西嘛,不过底层实现的原理还没有研究呢)。
和http的区别在于真正实现了双向收发数据(一个是application layer 一个是 TCP layer),但是是为了解决浏览器和web server通信不能使用tcp来实现而出现了,因此为了兼容在websocket和web server进行handshake的时候使用了http协议(只有这一个地方使用了http协议,之后数据交互使用的是tcp协议),和普通http不同的是协议中发送的数据为:
upgrade : websocket 明确告诉服务器使用升级版本协议websocket如果服务器不支持会返回错误 ,支持则连接创建成功(这个要说明的是websocket的连接需要客户端服务器同时支持否则无法成功连接)
client:
Upgrade: websocket
Connection: Upgrade
Sec-WebSocket-Key: ************==
Sec-WebSocket-Version: **
server:
Upgrade:websocket
Connnection: Upgrade
Sec-WebSocket-Accept: ******************
和socket不同的是首先websocket是为了解决browser和web server的数据传输而产生的,因此为了兼容使用了http协议的handshake,其次数据传输使用了frame格式的数据 区别于socket的package数据包的格式,如
下面就是一个Frame:(以bit为单位表示)
0 1 2 3
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-------+-+-------------+-------------------------------+
|F|R|R|R| opcode|M| Payload len | Extended payload length |
|I|S|S|S| (4) |A| (7) | (16/64) |
|N|V|V|V| |S| | (if payload len==126/127) |
| |1|2|3| |K| | |
+-+-+-+-+-------+-+-------------+ - - - - - - - - - - - - - - - +
| Extended payload length continued, if payload len == 127 |
+ - - - - - - - - - - - - - - - +-------------------------------+
| |Masking-key, if MASK set to 1 |
+-------------------------------+-------------------------------+
| Masking-key (continued) | Payload Data |
+-------------------------------- - - - - - - - - - - - - - - - +
: Payload Data continued ... :
+ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +
| Payload Data continued ... |
+---------------------------------------------------------------+
三者都是基于TCP协议的,socket TCP协议 websocket HTTP + TCP协议 HTTP TCP协议(HTTP通信本质上是server开启了一个TCP连接来处理HTTP请求,keep-alive的原理就是开启并保持一个持久了tcp channel来处理多个HTTP请求,非keep-alive则是处理完一个http请求后tcp channel 随之关闭)。
另外,websocket(ws)使用端口80(http) websocket security(wws)443(https)使用HTTP一样的端口。
http://abbshr.github.io/2013/11/05/new46.html
http://www.zhihu.com/question/20215561 等
首先,
HTTP WEBSCOKET SCOKET是三个网络协议,http网络协议目前最新版本为1.1 相关的API有HTML5等,使用httprequest httpresponse来收发数据,数据采用应答式,即客户端主动向服务端发送数据请求,服务端返回数据,应答结束,连接结束。当然可以使用keep-alive的应答模式,但是即使在这种模式中也是通过客户端ajax,comet(还没研究)等技术来实现,本质上服务端还是无法主动向客户端发送数据。(而且目前的web server中普遍有timeout的概念如apache2.0为15s 2.2为5s timeout后会断开keep-alive的连接)
socket基于TCP/IP的网络协议,数据以数据包package的形式传递,多用于桌面程序中,比较成熟,应用广泛,基于transport layer数据传递。
数据接收过程中以package的形式传递,接收的时候不保证一次接收到想要的数据长度,需要循环接收知道数据完整,常用的函数:
socket("ip","port")
bind()
send()
recv()
read()
write()等
websocket是html5中提供的api 基本原理是在http协议层上实现了tcp通信(可双向收发信息,和http有本质的不同html5的新东西嘛,不过底层实现的原理还没有研究呢)。
和http的区别在于真正实现了双向收发数据(一个是application layer 一个是 TCP layer),但是是为了解决浏览器和web server通信不能使用tcp来实现而出现了,因此为了兼容在websocket和web server进行handshake的时候使用了http协议(只有这一个地方使用了http协议,之后数据交互使用的是tcp协议),和普通http不同的是协议中发送的数据为:
upgrade : websocket 明确告诉服务器使用升级版本协议websocket如果服务器不支持会返回错误 ,支持则连接创建成功(这个要说明的是websocket的连接需要客户端服务器同时支持否则无法成功连接)
client:
Upgrade: websocket
Connection: Upgrade
Sec-WebSocket-Key: ************==
Sec-WebSocket-Version: **
server:
Upgrade:websocket
Connnection: Upgrade
Sec-WebSocket-Accept: ******************
和socket不同的是首先websocket是为了解决browser和web server的数据传输而产生的,因此为了兼容使用了http协议的handshake,其次数据传输使用了frame格式的数据 区别于socket的package数据包的格式,如
下面就是一个Frame:(以bit为单位表示)
0 1 2 3
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-------+-+-------------+-------------------------------+
|F|R|R|R| opcode|M| Payload len | Extended payload length |
|I|S|S|S| (4) |A| (7) | (16/64) |
|N|V|V|V| |S| | (if payload len==126/127) |
| |1|2|3| |K| | |
+-+-+-+-+-------+-+-------------+ - - - - - - - - - - - - - - - +
| Extended payload length continued, if payload len == 127 |
+ - - - - - - - - - - - - - - - +-------------------------------+
| |Masking-key, if MASK set to 1 |
+-------------------------------+-------------------------------+
| Masking-key (continued) | Payload Data |
+-------------------------------- - - - - - - - - - - - - - - - +
: Payload Data continued ... :
+ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +
| Payload Data continued ... |
+---------------------------------------------------------------+
三者都是基于TCP协议的,socket TCP协议 websocket HTTP + TCP协议 HTTP TCP协议(HTTP通信本质上是server开启了一个TCP连接来处理HTTP请求,keep-alive的原理就是开启并保持一个持久了tcp channel来处理多个HTTP请求,非keep-alive则是处理完一个http请求后tcp channel 随之关闭)。
另外,websocket(ws)使用端口80(http) websocket security(wws)443(https)使用HTTP一样的端口。
发表评论
-
UIImage变为NSData并进行压缩
2014-05-19 20:23 1874//sdk中提供了方法可以直接调用 UIImage *im ... -
update cocapods
2014-05-17 22:27 768早上更新cocoapod依赖库,发现更新到32.1版本,早先的 ... -
iOS发送短信息代码实例
2014-05-16 18:15 2630#import <MessageUI/Message ... -
DISPATCH TIMER
2014-05-14 16:12 674/* __block void (^callback) ... -
UITextField左边显示图片
2014-05-13 18:08 1107The overlay view displayed on t ... -
iOS调用系统打电话,发短信功能
2014-05-11 15:48 2054先介绍一种最简单的方法: 调用打电话功能 [[UIAppl ... -
iOS面试题
2014-05-09 16:10 10421.写一下UIButton与UITableView的层级结构 ... -
socket二进制报文
2014-05-09 15:18 1246里面有帧头 字符串UTF-8 中间用0隔开 又一个字符串 ... -
将网站添加到桌面的方法
2014-05-08 14:25 1623<link href="http://www. ... -
iPhone通讯录联系人操作大全
2014-05-07 10:29 14031.需要引入AddressBook.framework框架 2 ... -
sqlite获取最新插入的rowid
2014-05-07 09:59 1478除了 last_insert_rowid select max ... -
号码归属地查询,拨打电话
2014-05-06 15:07 796在程序内调用拨打电话的方法,[[UIApplication s ... -
iOS时间合并
2014-04-28 17:55 1021合并同一时间的课程,同一时间可能有多个课程,比如13:30-1 ... -
vCard通讯录格式说明
2014-04-28 16:47 2437原帖:http://freesoftman.iteye.com ... -
UISearchBar背景色全套解决方案
2014-04-25 09:36 7392os系统升级到7.1后,原来在7.0下显示正常的UISearc ... -
升级XCode5.1.1遇到的奇葩问题NSString,NSObjectRuntime.h报错,Foundation找不到
2014-04-24 11:19 856升级XCode5.1.1遇到的奇葩问题NSString,NSO ... -
将NSString转为NSArray
2014-04-22 16:52 6230// Your JSON data: NSString *c ... -
另外一种NSData转为NSString的方法
2014-04-22 15:40 1167If the data is not null-termina ... -
push隐藏UINavigtaionBar和UITabbar
2014-04-17 15:20 1045[self.navigationController setN ... -
数据库SQL
2014-04-11 13:31 8651、说明:创建数据库 CREATE DATABASE data ...
相关推荐
android socket + websocket 集合demo
基于SuperSocket的服务器 和 客户端程序 所需要的DLL 服务器端<控制台Console程序> (.Net4.0)需要引用 SuperSocket 和 SuperWebSocket -------------------------- 客户端<Unity3D> (.Net3.5) 只需要引用 ...
一个服务端,同时兼容原生socket和websocket。源代码采用vs2017开发。 这样一个服务端同时连接2种不同客户端。代码仅供参考。有漏洞地方希望指出来,
Socket_WebSocket客户端程序v120.zip
supersocket.websocket.1.6.6.1.nupkg
java 异步http和websocket客户端 java 异步http和websocket客户端 java 异步http和websocket客户端 java 异步http和websocket客户端 java 异步http和websocket客户端 java 异步http和websocket客户端 java 异步http...
既然websocket也是一个socket,那自己解析websocket就可以了。我只实现了握手,数据帧的简单解析。可以进行除汉字外的简单收发。如果你应用不是太深的话没问题的。若是深的话估计这些简单的你都会。。。。
仅限学习使用 此实例:运行demo:websocketForm.exe ...WebSocket4Net.dll log4net.dll日志组件 SuperSocket.*.dll Newtonsoft.Json.dll 使用说明见:https://blog.csdn.net/uaime/article/details/86219042
websocket服务端程序,实现与html5通讯
websocket也是套接字原理,但因为它对客户端和服务端的连接进行了升级,从http协议升级为websocket协议实现了可以从html连接到PHP。写的比较杂,并非是一个完整的项目,只是socket或websocket,不能用来做项目,只能...
Cocos Creator的Http、WebSocket、SocketIO用法的demo,仅供学习使用
同一个端口支持tcp和websocket 这样就不需要开两个端口了
delphi websocket 用socket实现
利用C++ SOCKET编程,自我实现的一个websocket服务器,能够比较好的移植,没有使用开源库
所传文档为MFC的SOCKET协议与HTML5里的WEBSOCKET协议之间的通信连接,发送和读写都没有什么问题,另外附带有一个C#的websocket库,库不是开源的,网上也有详细介绍,如果想用C++这块的可以看看,有什么问题可以直接...
异步Socket,HTTP(客户端 服务器),WebSocket,和socket.io库。基于NIO而不是线程。
Websocket-Arduino, a websocket implementation for Arduino Copyright 2011 Per Ejeklint Based on previous implementations by Copyright 2010 Ben Swanson and Copyright 2010 Randall Brewer and Copyright ...
sio_socket, websocket的使用与封装
Socket通讯,长连接短链接,包分 包头、指令、内容 包头一般2-4个字节 表示包的长度,指令2个字节 表示做什么操作,内容是具体数据