当前位置: 首页 > 科技观察

NetworkGenesis

时间:2023-03-15 01:31:56 科技观察

Day0x00上帝看到了人类制造的各种规格的电脑设备,也设置了一些极其微小的各种网络,但是却无法连接使用。很伤心。晚上,上帝给了WyntonSurf一个梦,告诉他如何在不可靠的网络环境中可靠地传输数据,又给了BobKahn一个梦,告诉他如何给每台主机分配一个“门牌号”。》,如何兼容一个底层协议多样的网络……第二天,温顿·瑟夫和鲍勃·卡恩见面后,交换了一个晚上做的奇怪的梦,感觉这几天一直在思考这个问题。问题解决了,不仅喊道:感谢上帝!于是,TCP/IP诞生了。在TCP/IP的支持下,大家可以跨各个子网互相发送邮件(SMTP),从远程机器下载文件(FTP),并登录远程机器进行操作(Telnet)。人类很高兴。Day0x01上帝看到人类很容易满足,有点失望,直到他注意到一个叫TimBerners-Lee的小伙子。这家伙孜孜不倦地追求一件事:链接每台电脑中的文档晚上,上帝决定故技重施,在梦中告诉蒂姆·伯纳斯-李“超文本”的秘密,并特意让他买一台NeXT电脑作为服务器,因为上帝对被踢出AppleGuy的人感到非常抱歉:史蒂夫乔布斯。蒂姆Berners-Lee醒来时激动得忘了说“感谢上帝!”,立即全身心投入到HTTP协议的制定中。果不其然,他买了一台NeXT电脑,并在上面贴了一张纸:别关了,这是服务器!服务器是一个新事物。当时的电脑性能很低,很难维护几千台电脑。从浏览器连接。更重要的是,人类使用浏览器访问服务器只是为了下载服务器的静态文件供本地阅读,所以TimBerners-Lee将HTTP设计为无状态协议!这严重违背了神的教导。浏览器每次访问服务器上的网页时,都会建立一个TCP连接,数据传输完成后会立即关闭连接。每个请求之间没有关联。上帝有些生气,想要再给蒂姆·伯纳斯·利特一个梦,但转念一想:何必呢,还是让人类醒醒吧!0x02那一天,HTTP传播迅速,在Mosaic、Netscape等浏览。在物联网的推动下,人们纷纷上网。不出所料,Web越来越繁荣,各种网站如雨后春笋般涌现。交互性越来越强,动态越来越高。很少有网站是纯粹用来浏览静态网页的。向上。人类程序员发现TimBerners-Lee发明的HTTP协议真的很笨拙:每次请求都要打开一个连接,用完了就关闭,再打开一个新的连接等待下一个请求。在需要高度交互的系统(如聊天、游戏)中极度浪费。这一次,老天爷找不到做梦的人了,只好为整个W3C网络专家组做梦:省钱,不要浪费,一个TCP连接发送多个HTTP请求!这是保活。程序员们高兴了几天之后,很快就发现,即使是keep-alive,每次HTTP请求都发送HTTPHeader还是很浪费的。更要命的是,TimBerners-Lee设计的HTTP协议,是由浏览器发起请求,服务器响应。既然服务器上的数据发生了变化,如果想主动告诉浏览器怎么办呢?有的程序员想出了一个不断轮询的方法,让浏览器不停地询问服务器数据有没有变化?数据变了吗?老天爷见此情景,忍不住笑了起来:可怜的人类啊,不听老夫的话,自己就要遭殃了!0x03日,上帝给了Sun的GamesGosling一个梦想,让他创造Java。为了推广Java,GamesGosling想出了一个好主意。在浏览器中安装插件,可以通过插件运行Java程序。由于是Java程序,可以直接与服务器建立Socket连接。就此而言,自然是为所欲为。服务器也可以主动向浏览器发送数据,效率极高,完全抛弃了HTTP协议。这是小程序。但是Applet实在是让人失望,再加上各种浏览器不断的坏掉,就会出现这样的情况:或者干脆就是这样:在0x04的那一天,上帝惊奇的发现了Macromedia公司,这家公司创造了一种独特的方式。一种叫做Flash的东西,非常适合制作小动画。(小作品:火柴人格斗)虽然和Applet一样需要在浏览器中安装插件,但是各大“流氓”浏览器都支持。有了插件的支持,浏览器的一切限制都不复存在,Flash也可以直接使用Socket与后端服务器进行双向通信。可惜的是,这个闪电侠并没有坚持多久,尤其是在和上帝最爱的乔布斯打了一架之后,慢慢走上了不归路。后来连乔布斯都被神带走了。天0x05没想到的是,随着Applet和Flash的消亡,JavaScript慢慢发展成为前端之王,称霸浏览器。但是由于HTTP协议的限制,服务器端还是不能直接向浏览器推送数据。人类的不满在慢慢积累:“这个HTTP用起来这么麻烦,能不能让JavaScript直接创建一个Socket来访问服务器,那么HTTP的所有问题就迎刃而解了!”但是天知道,直接在浏览器中使用JavaScript来创建Socket和服务器的双向通信是一件吃力不讨好的事情。例如:1.Socket是一种很“低级”的通信方式,它是基于Stream的,而不是基于消息的。各个应用的通信方必须自定义数据格式来处理粘包和分包的问题。2.如果要实现安全通信,程序员必须实现一套类似Https的机制,对称加密,非对称加密,消息摘要,数字证书……于是上帝又做梦了,这次他找到了MichaelCarter,告诉了他:《你要带领大家在TCP协议的基础上,在应用层实现一套新的协议。像Socket一样,浏览器和服务器可以双向通信;而像HTTP一样,程序员可以方便的使用,不要让程序员处理那些低级的、棘手的棘手问题/安全问题。”MichaelCarter醒来后兴奋不已,他决定将新的协议命名为:websocket!Day0x06上帝的梦想太多了,他决定休息一下,人类也休息一天。这就是星期天的由来。【本文为专栏作家“刘欣”原创稿件,转载请通过作者微信获取授权公众号coderising】点此查看该作者更多好文