Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

【每日一题】- 2019-11-13 - Socket 和 WebSocket #57

Closed
azl397985856 opened this issue Nov 13, 2019 · 1 comment
Closed

【每日一题】- 2019-11-13 - Socket 和 WebSocket #57

azl397985856 opened this issue Nov 13, 2019 · 1 comment
Labels
Daily Question 每日一题 Network 网络

Comments

@azl397985856
Copy link
Owner

Socket是什么, 具体组成是什么?

WebSocket是什么,原理是怎么样的?和Http以及Socket的关系是什么?

@azl397985856 azl397985856 added Daily Question 每日一题 Network 网络 labels Nov 13, 2019
@azl397985856 azl397985856 added this to 待认领 in 每日一题认领区 Nov 13, 2019
@azl397985856
Copy link
Owner Author

Socket

Socket 是一个通信链的句柄,可以用来实现不同虚拟机或不同计算机之间的通信,也可以实现相同主机内的不同进程之间的通讯。

Socket = IP 地址 + 端口 + 协议

IP 地址 + 端口 + 协议 组成一个唯一标识,用来标识一个通信链路。

Socket 其实是对 TCP/IP 进行了高度封装,屏蔽了很多网络细节。这样可以使开发者更好地进行网络编程。其实就是我们写个高度封装内部细节的函数,通过传参来完成指定的行为。
可以这么说,所有的 TCP/UDP 等编程,基本都是按照 Socket 协议标准来进行编程的,换句话说,Socket 是一套标准,就好比 DOM ,所有语言都可以按照 DOM 的接口标准来实现自己的逻辑。
Socket 有自己的原语,开发者可以按照 Socket 的原语在不同语言下的实现方式来进行网络编程。

Web Socket

Websocket只是协议而已

一、WebSocket是HTML5出的东西(协议),也就是说HTTP协议没有变化,或者说没关系,但HTTP是不支持持久连接的(长连接,循环连接的不算)

二丶Websocket是一个持久化的协议

HTTP的生命周期通过Request来界定,也就是一个Request 一个Response,那么在HTTP1.0中,这次HTTP请求就结束了。
Websocket则不是

三,WebSocket具体过程是什么样的?

握手:
GET /chat HTTP/1.1
Host: server.example.com
Upgrade: websocket
Connection: Upgrade
Sec-WebSocket-Key: x3JJHMbDL1EzLkh9GBhXDw==
Sec-WebSocket-Protocol: chat, superchat
Sec-WebSocket-Version: 13
Origin: http://example.com

响应:

HTTP/1.1 101 Switching Protocols
Upgrade: websocket
Connection: Upgrade
Sec-WebSocket-Accept: HSmrc0sMlYUkAGmm5OPpG2HaGWk=
Sec-WebSocket-Protocol: chat

参考: WebSocket 是什么原理?为什么可以实现持久连接? - Ovear的回答 - 知乎 https://www.zhihu.com/question/20215561/answer/40316953

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Daily Question 每日一题 Network 网络
Projects
Development

No branches or pull requests

1 participant