`
lizhuang
  • 浏览: 906527 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

HTTP,Socket,WebSocket异同

阅读更多
参考文章:
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一样的端口。
分享到:
评论

相关推荐

    android socket + websocket 集合demo

    在Android开发中,Socket和WebSocket是两种常用的网络通信技术,它们在实时通信、数据传输等方面发挥着重要作用。本文将深入探讨这两个概念以及如何在Android应用中实现它们。 首先,我们来了解一下Socket。Socket...

    SuperSocket_WebSocket_WebSocket4Net服务器需要的DLL

    基于SuperSocket的服务器 和 客户端程序 所需要的DLL 服务器端<控制台Console程序> (.Net4.0)需要引用 SuperSocket 和 SuperWebSocket -------------------------- 客户端<Unity3D> (.Net3.5) 只需要引用 ...

    .net socket 兼容原生socket和websocket

    一个服务端,同时兼容原生socket和websocket。源代码采用vs2017开发。 这样一个服务端同时连接2种不同客户端。代码仅供参考。有漏洞地方希望指出来,

    delphi websocket 用socket实现

    标题“delphi websocket 用socket实现”表明我们将探讨如何在Delphi中通过Socket来创建WebSocket服务端或客户端。首先,我们需要了解基础的Socket编程概念。Socket是网络通信的基础,它提供了进程间的通信接口。在...

    delphi7 使用socket实现websocket

    既然websocket也是一个socket,那自己解析websocket就可以了。我只实现了握手,数据帧的简单解析。可以进行除汉字外的简单收发。如果你应用不是太深的话没问题的。若是深的话估计这些简单的你都会。。。。

    Socket_WebSocket客户端程序v120.zip

    在"Socket_WebSocket客户端程序v120.zip"中,我们可以推测这是一个使用Socket技术实现的WebSocket客户端程序,版本号为v120。这个程序可能包含了客户端所需的全部功能,如连接到WebSocket服务器、发送和接收数据、...

    Socket_WebSocket客户端程序v120.zip_packsu1_websocket_websocket 客户端_we

    标题中的"Socket_WebSocket客户端程序v120.zip_packsu1_websocket_websocket 客户端_we"表明这是一个关于WebSocket客户端的程序,可能是一个版本号为120的实现,包含了WebSocket协议的实现以及可能与Socket编程相关...

    supersocket.websocket.1.6.6.1.nupkg

    supersocket.websocket.1.6.6.1.nupkg

    Android-AndroidAsync异步SocketHTTP(客户端服务器)WebSocket和socket.io库

    本主题将深入探讨Android中的几种异步网络通信技术,包括AndroidAsync库、Socket、HTTP(客户端与服务器)、WebSocket以及socket.io库。这些技术都是基于非阻塞I/O(Non-blocking I/O,NIO)而非传统的多线程模型,...

    http-websocket代理,实现websocket请求就像操作http请求一样,有使用说明

    总之,“http-websocket代理”是一种简化WebSocket通信的工具,它利用HTTP代理功能为不支持WebSocket的环境提供了兼容性,使得开发者可以更加便捷地在HTTP和WebSocket之间切换,实现高效且灵活的实时通信。...

    简单实现了websocket功能:websocket客户端、winformsocket客户端

    在本项目中,"简单实现了websocket功能:websocket客户端、winformsocket客户端",意味着我们有两个关键部分:WebSocket服务器端和基于WinForm的客户端。 WebSocket客户端通常是一个应用程序,它通过WebSocket协议...

    java 异步http和websocket客户端

    java 异步http和websocket客户端 java 异步http和websocket客户端 java 异步http和websocket客户端 java 异步http和websocket客户端 java 异步http和websocket客户端 java 异步http和websocket客户端 java 异步http...

    c# Socket长连接 短链接 自己封装 通讯

    短连接通常用于一次性传输数据,如HTTP请求,连接建立后立即传输数据并关闭。而长连接则保持一段时间的开放状态,允许多次数据交换,如FTP或HTTPS。在C#中,可以通过设置Socket的KeepAlive属性来维持长连接。 3. **...

    websocket-socket互通实例

    仅限学习使用 此实例:运行demo:websocketForm.exe ...WebSocket4Net.dll log4net.dll日志组件 SuperSocket.*.dll Newtonsoft.Json.dll 使用说明见:https://blog.csdn.net/uaime/article/details/86219042

    WebSocket服务器的.NET实现 SuperWebSocket

    SuperWebSocket是WebSocket协议服务器端的.NET实现. 作为HTML5的一个重要新特性,WebSocket 规范的目标是在浏览器中实现和服务器端双向通信.双向通信可以拓展浏览器上的应用类型,例如实时的数据推送(股票行情),...

    PHP实现socket和websocket

    websocket也是套接字原理,但因为它对客户端和服务端的连接进行了升级,从http协议升级为websocket协议实现了可以从html连接到PHP。写的比较杂,并非是一个完整的项目,只是socket或websocket,不能用来做项目,只能...

    Netty一个端口支持tcp和websocket

    当客户端发送 WebSocket 升级请求时,这个 Handler 会处理 HTTP 协议到 WebSocket 协议的转换。 4. **端口绑定与启动**: 使用 ServerBootstrap 的 `bind` 方法将服务器绑定到指定的端口。一旦成功,Netty 就会在...

    sio_socket, websocket的使用与封装

    `sio_socket`是一个基于WebSocket的库,它为开发者提供了更方便的方式来处理WebSocket连接和通信。这个库可能包含了对WebSocket协议的封装,简化了API,使得在实际项目中集成WebSocket变得更加简单。 在"**sio_...

    python-websocket-socket 消息推送

    Python中的WebSocket和Socket是两种在网络通信中常用的协议,它们在实时数据传输,特别是构建实时交互应用(如在线聊天、股票行情、游戏等)时扮演着重要角色。在本主题中,我们将深入探讨“python-websocket-socket...

Global site tag (gtag.js) - Google Analytics