socket简述

                                                                      确实查看了网络文章,如有侵权,可联系我,马上删

1、什么是socket

在计算机通信领域,socket 被翻译为“套接字”,它是计算机之间进行通信一种约定或一种方式。通过 socket 这种约定,一台计算机可以接收其他计算机的数据,也可以向其他计算机发送数据,和http,dubbo一样,是一个约定协议。与http,dubbo不同的是,socket是长连接

那啥叫长连接呢??

传统的http请求,随着服务端返回给客户端消息,两者之间的关联就消失了,所以服务端想要主要联系客户端就得靠轮询的方式,但是这种轮询比较耗费性能,既耗费客户端的性能,又耗费服务器资源,于是就有了长连接的概念。

socket 的典型应用就是 Web 服务器和浏览器:浏览器获取用户输入的 URL,向服务器发起请求,服务器分析接收到的 URL,将对应的网页内容返回给浏览器,浏览器再经过解析和渲染,就将文字、图片、视频等元素呈现给用户。这也是使你能看到的我的文章的方式,点个赞啊?

通过 socket() 函数来创建一个网络连接,或者说打开一个网络文件,socket() 的返回值就是文件描述符

socket两种经典数据传输方式

以下两种你直接可以理解为“送的快”和“质量好

1、流格式套接字(sock_stream)

流格式套接字(Stream Sockets)也叫“面向连接的套接字”

流格式套接字像是流水线一个优秀的员工,一定要检查作业。100个数据绝不给你99个,也不错加替换,尽量保证产品到每一个厂家都是放心的。

SOCK_STREAM 有以下几个特征:

  • 数据在传输过程中不会消失;
  • 数据是按照顺序传输的;
  • 数据的发送和接收不是同步的(有的教程也称“不存在数据边界”)

为什么流格式套接字可以达到高质量的数据传输呢?这是因为它使用了 TCP 协议(The Transmission Control Protocol,传输控制协议),TCP 协议会控制你的数据按照顺序到达并且没有错误。

你也许见过 TCP,是因为你经常听说“TCP/IP”。TCP 用来确保数据的正确性,IP(Internet Protocol,网络协议)用来控制数据如何从源头到达目的地,也就是常说的“路由”。 

流格式套接字的内部有一个缓冲区(也就是字符数组),通过 socket 传输的数据将保存到这个缓冲区。接收端在收到数据后并不一定立即读取,只要数据不超过缓冲区的容量,接收端有可能在缓冲区被填满以后一次性地读取,也可能分成好几次读取。

也就是说,不管数据分几次传送过来,接收端只需要根据自己的要求读取,不用非得在数据到达时立即读取。传送端有自己的节奏,接收端也有自己的节奏,它们是不一致的。

2、数据报格式套接字(SOCK_DGRAM)

数据报格式套接字(Datagram Sockets)也叫“无连接的套接字”,在代码中使用 SOCK_DGRAM 表示。

他就像外卖小哥(抱歉,可能比喻不恰当,外卖要是没送到客户就投诉了,外卖小哥又得快又得好,太辛苦了。。。很谢谢这些人),外卖小哥跑快递,但质量又不一定完全保证或者没有流水线工人质量靠谱

。。。。。。抱歉,这例子不太好,反正就理解为速度有了,质量少了

可以将 SOCK_DGRAM 有以下特征:

  • 强调快速传输而非传输顺序;
  • 传输的数据可能丢失也可能损毁;
  • 限制每次传输的数据大小;
  • 数据的发送和接收是同步的(有的教程也称“存在数据边界”)。

数据报套接字也使用 IP 协议作路由,但是不用 TCP 协议,而是使用 UDP 协议

QQ 视频聊天和语音聊天就使用 SOCK_DGRAM 来传输数据,因为首先要保证通信的效率,尽量减小延迟,而数据的正确性是次要的,即使丢失很小的一部分数据,视频和音频也可以正常解析,最多出现噪点或杂音,不会对通信质量有实质的影响。

虽然质量会有所影响,总体差别不大,意外情况其实是比较少的(还拿快递举例子,哈哈哈哈。就是外卖小哥不小心自己把外卖吃了或者自己弄洒了也少)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值