您现在的位置是:休闲 >>正文
socket与websocket区别
休闲3883人已围观
简介Socket和WebSocket,名字看着像兄弟,实际却是两个时代的东西。Socket是操作系统提供的网络编程接口,你写TCP或UDP通信时用的就是它;而WebSocket是应用层协议,跑在HTTP之 ...
Socket和WebSocket,名字看着像兄弟,实际却是两个时代的东西。Socket是操作系统提供的网络编程接口,你写TCP或UDP通信时用的就是它;而WebSocket是应用层协议,跑在HTTP之上的,专门给浏览器和服务器搞实时双向通信用的。这俩根本不在一个层级,硬要比,就像拿“公路”和“快递服务”做对比——前者是基础设施,后者是建立在前者之上的业务模式。
拿个具体场景说事儿。你写个聊天软件,用原生Socket的话,你得自己管连接、分包、粘包、心跳检测,甚至要自己设计消息格式,一套流程下来,代码量不小,但好处是你能把每个字节都捏在手里。可要是放到Web环境里,浏览器压根不让你直接碰Socket——安全策略卡得死死的。这时候WebSocket就登场了,它本质上是HTTP协议的一次升级握手(状态码101),握手成功后,连接就从HTTP协议切换成WebSocket协议,之后两边就能自由地推数据了。
有个细节挺有意思:WebSocket的握手请求里有个`Upgrade: websocket`头,服务器看到这个头才决定要不要切换协议。而普通Socket连接根本不存在“升级”这回事,你创建socket fd的时候,协议类型就定死了。所以你看,WebSocket更像是HTTP的“变种”,而不是Socket的“Web版本”。很多新手被名字误导,以为WebSocket是Socket的封装,其实它俩唯一的共同点就是都叫“socket”而已。
再聊聊使用感受。用原生Socket做长连接,你得自己处理断线重连、半包黏包,还得考虑TCP的Nagle算法和延迟确认对实时性的影响。WebSocket呢,浏览器帮你把这些底层细节全吞了,你只管收发消息就行。但代价是——它只能跑在HTTP/HTTPS之上,而且消息格式有额外开销(每帧最少2字节头),对于高频小消息来说,效率不如裸TCP。
我见过不少团队在物联网项目里纠结选哪个。如果你的设备是嵌入式硬件,直接跟服务器通信,那肯定用原生Socket,因为WebSocket协议栈对MCU来说太重了。但要是做网页版数据看板,需要推送实时行情,WebSocket就是唯一合理的选择——你总不能要求用户装个客户端吧?
还有个容易踩的坑:WebSocket的“连接”是虚拟的,底层其实还是TCP连接。但WebSocket协议里有个关闭帧(close frame),而TCP的关闭是四次挥手。这意味着WebSocket连接关闭时,先发关闭帧,再走TCP的关闭流程,多了一层逻辑。有些程序员用WebSocket时没处理关闭帧,导致服务器端资源没释放干净,连接泄漏——这种问题用原生Socket反而不会遇到,因为close()一调,内核全给你收拾了。
说到底,选哪个不取决于“哪个更好”,而取决于“你在哪一层做开发”。写底层网络库、做游戏服务器,老老实实用Socket;搞Web应用,想快速实现双向通信,WebSocket是正道。别被名字忽悠了,这俩除了共享一个英文单词,技术栈上几乎没有交集。
Tags:
下一篇:漏洞骗子
相关文章
渗透到
休闲凌晨三点十七分,我盯着手机屏幕,拇指在键盘上悬了半秒,还是把那句“在吗”发了出去。消息栏立刻弹出“对方正在输入”,持续了整整四分钟,最后只回过来一个“嗯”。 这个“嗯”字像根细针,扎进我自以为坚固的防 ...
【休闲】
阅读更多中国网络犯罪数据统计
休闲2023年,全国检察机关起诉网络犯罪嫌疑人超过9万人。这个数字背后,是一个个具体的、活生生的人——有被“刷单返利”骗走养老金的退休教师,有因为一条钓鱼链接损失全部积蓄的年轻程序员,也有在暗网倒卖公民个 ...
【休闲】
阅读更多如何从网站上扒视频
休闲打开浏览器开发者工具F12),切到Network标签页,刷新页面,盯着那些不断滚动的请求列表——你要找的那个视频文件,通常藏在名为“media”或“blob”的文件夹里,后缀是.mp4或.m3u8。双 ...
【休闲】
阅读更多