什么是socket呢,了解一下!
我们先来看看百度出来的内容(这段可以略过,反正也看不懂)
socket (计算机专业术语) 编辑 讨论 网络上的两个程序通过一个双向的通信连接实现数据的交换,这个连接的一端称为一个socket。
建立网络通信连接至少要一对端口号(socket)。socket本质是编程接口(API),对TCP/IP的封装,TCP/IP也要提供可供程序员做网络开发所用的接口,这就是Socket编程接口;HTTP是轿车,提供了封装或者显示数据的具体形式;Socket是发动机,提供了网络通信的能力。
Socket的英文原义是“孔”或“插座”。作为BSD
UNIX的进程通信机制,取后一种意思。通常也称作"套接字",用于描述IP地址和端口,是一个通信链的句柄,可以用来实现不同虚拟机或不同计算机之间的通信。在Internet上的主机一般运行了多个服务软件,同时提供几种服务。每种服务都打开一个Socket,并绑定到一个端口上,不同的端口对应于不同的服务。Socket正如其英文原义那样,像一个多孔插座。一台主机犹如布满各种插座的房间,每个插座有一个编号,有的插座提供220伏交流电,
有的提供110伏交流电,有的则提供有线电视节目。 客户软件将插头插到不同编号的插座,就可以得到不同的服务。
是不是有点懵O.O,感到懵的话就往下看,这样了解socket:
灵魂画手来了#_#
上图中,此时小花就代表客户端,系统分配给她的socket号,相当于此时她的电话号码654321,
此时小明代表了服务器,有全局公认的Socket(怎么来的,这里不讲),任何客户端都可以和他建立链接。
既然小明代表了服务器(自带中央空调属性),小明的女性小伙伴,小芳,小红… 只要是知道小明号码的都可以主动打电话给小明(和代表小明的socket号建立链接)
那么问题来了,小明可以主要给小花,小芳等等她的小伙伴主动打电话吗。。。。当然不行,因为这里的小明不是一个人。。。它只是个冰箱哇!!
那么小花可以在给小明打电话的同时给小明的哥哥小华(也是个冰箱)打电话吗,当然不行,因为小花只有一个电话哇(操作系统根据ip分配唯一的一个socket号)
其实说人话就是操作系统根据客户端的ip给客户端分配一个socket号,这样它可以和一个已知socket号的服务器建立连接并进行通信。
对于socket有了一个大概的了解(不求甚解),那么socket是怎样进行通信的呢?
http协议肯定不陌生,其实socket也是一种协议,那么它与http协议有什么不同呢?
还是用小花和小明来打个比方
他们相同的地方就是:小明家里管的严,不能主动给小花打电话。。。
他们不同的地方:
在ajax请求中,小红是个执拗的人,想知道小明一天吃了什么
早上,给小明打电话,问候了小明早上吃什么,小明接电话回复,小红知道了小明早上要吃什么,然后就挂掉了电话。
中午,给小明打电话,问小明中午吃什么,小明接电话回复,小红知道了小明中午要吃什么,然后就挂掉了电话。
晚上,给小明打电话,问小明晚上吃什么,小明接电话回复,小红知道了小明晚上要吃什么,然后就挂掉了电话。
宵夜,给小明打电话,问小明晚上吃什么,小明不在家没人接电话。
五分钟之后。。。再次给小明打电话,问小明宵夜吃什么,小明接电话回复,小红知道了小明宵夜要吃什么,然后就挂掉了电话。
总结一下,就是每次小红想知道关于小明的什么消息,都要主动给小明打电话,小明想完并且回复了小红,然后小红才会挂电话
在socket协议中,小红并不是个执拗的人,想知道小明一天吃了什么
早上,给小明打电话,问候小明,你今天一天要吃什么哇,小明说,我早上要吃豆浆,包子,油条,
中午,小明主动告诉小红,我中午吃了小炒肉,糖醋排骨。
晚上,小明主动告诉小红,我晚上吃了红烧鸡翅,椒盐虾。
宵夜,小明主动告诉小红,我宵夜要吃烤牛肉串,喝雪碧。
小明的内心:一天的时间那么长,我咋知道你会不会睡着啦,或者出门了哇,电话也要耗电的呀,你要是不在的话,我就要挂电话的哇,于是小红和小明约定好每隔一分钟在电话的另一头“嗯”一声, 告诉小明她还在。
总结一下,小红告诉小明,我想知道今天一天在你身上有趣的事情,你发生了什么新鲜事要第一时间告诉我哇,然后小明照做,上面提到的,小红每隔一分钟“嗯”一声,是socket心跳包,用来告诉服务器,客户端还在,避免占用资源。
web socket连接,回调之类的具体代码就不具体实现了,参考API:https://developer.mozilla.org/zh-CN/docs/Web/API/WebSockets_API
对于上面没有解释的很清楚的点,待我了解的更清楚之后,再来补充,未完待续…