【面试官】有没动手实践过WebSocket?

  • 面试官:有了解过WebSocket吗?
  • 面试官:为什么WebSocket可以减少资源消耗?
  • 面试官:有没动手实践过WebSocket?
  • 面试官:那客户端怎么发送消息给服务器?

大家好,我是南哥。

一个Java学习与进阶的领路人,跟着南哥我们一起Java成长。

文章目录

  1. WebSocket概念
    1. WebSocket作用
    2. WebSocket优点
  2. WebSocket实践
    1. 集成WebSocket服务器
    2. 客户端发送消息

1. WebSocket概念

1.1 为什么会出现WebSocket

面试官:有了解过WebSocket吗?

一般的Http请求我们只有主动去请求接口,才能获取到服务器的数据。例如前后端分离的开发场景,自嘲为切图仔的前端大佬找你要一个配置信息的接口,我们后端开发三下两下开发出一个RESTful架构风格的API接口,只有当前端主动请求,后端接口才会响应。

但上文这种基于HTTP的请求-响应模式并不能满足实时数据通信的场景,例如游戏、聊天室等实时业务场景。现在救世主来了,WebSocket作为一款主动推送技术,可以实现服务端主动推送数据给客户端。大家有没听说过全双工、半双工的概念。

全双工通信允许数据同时双向流动,而半双工通信则是数据交替在两个方向上传输,但在任一时刻只能一个方向上有数据流动

HTTP通信协议就是半双工,而数据实时传输需要的是全双工通信机制,WebSocket采用的便是全双工通信。举个微信聊天的例子,企业微信炸锅了,有成百条消息轰炸你手机,要实现这个场景,大家要怎么设计?用iframe、Ajax异步交互技术配合以客户端长轮询不断请求服务器数据也可以实现,但造成的问题是服务器资源的无端消耗,运维大佬直接找到你工位来。显然服务端主动推送数据的WebSocket技术更适合聊天业务场景。

1.2 WebSocket优点

面试官:为什么WebSocket可以减少资源消耗?

大家先看看传统的Ajax长轮询和WebSocket性能上掰手腕谁厉害。在websocket.org网站提供的Use Case C的测试里,客户端轮询频率为10w/s,使用Poling长轮询每秒需要消耗高达665Mbps,而我们的新宠儿WebSocet仅仅只需要花费1.526Mbps,435倍的差距!!

为什么差距会这么大?南哥告诉你,WebSocket技术设计的目的就是要取代轮询技术和Comet技术。Http消息十分冗长和繁琐,一个Http消息就要包含了起始行、消息头、消息体、空行、换行符,其中请求头Header非常冗长,在大量Http请求的场景会占用过多的带宽和服务器资源。

大家看下百度翻译接口的Http请求,拷贝成curl命令是非常冗长的,可用的消息肉眼看过去没多少。

curl ^"https://fanyi.baidu.com/mtpe-individual/multimodal?query=^%^E6^%^B5^%^8B^%^E8^%^AF^%^95&lang=zh2en^" ^
  -H "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7" ^
  -H "Accept-Language: zh-CN,zh;q=0.9" ^
  -H "Cache-Control: max-age=0" ^
  -H "Connection: keep-alive" ^
  -H ^"Cookie: BAIDUID=C8FA8569F446CB3F684CCD2C2B32721E:FG=1; BAIDUID_BFESS=C8FA8569F446CB3F684CCD2C2B32721E:FG=1; ab_sr=1.0.1_NDhjYWQyZmRjOWIwYjI3NTNjMGFiODExZWFiMWU4NTY4MjA2Y2UzNGQwZjJjZjI1OTdlY2JmOThlNzk1ZDAxMDljMTA2NTMxYmNlM1OTQ1MTE0ZTI3Y2M0NTIzMzdkMmU2MGMzMjc1OTRiM2EwNTJQ==; RT=^\^"z=1&dm=baidu.com&si=b9941642-0feb-4402-ac2b-a913a3eef1&ss=ly866fx&sl=4&tt=38d&bcn=https^%^3A^%^2F^%^

剩余60%内容,订阅专栏后可继续查看/也可单篇购买

Java面试突击大厂 文章被收录于专栏

👉以面试官面试的形式,涵盖了你怒怼大厂面试官、拿下大厂面试所需掌握的核心知识、面试重点 👉相信一定对你顺利通关面试、拿到理想Offer有所帮助 👉花费大量精力去制作本专栏,创作不易,各位的支持就是我创作的最大动力

全部评论
我知道你是来看评论的
2 回复 分享
发布于 07-05 22:07 广东

相关推荐

#秋招#大概1小时,20min单选,10min多选,30min大题。单选多选问的一堆偏门八股,基本都不会,靠感觉大概选的,想什么tcp连接数是65536还是65536*65536,这些玩意都靠猜,多选没几个敢肯定的,就记得一个问tcp连列到不存在的ip会咋样--这个应该是同一局域网不发syn,不同网发多次连不上断开。,还有一个问java线程安全的几何,选了.HashTable,ConcurrentHashMap,CopyOnWriteArrayList。还有问voliate作用,那个我没选保证线程安全。其他的都不记得了------(因为不大会看过就忘)大题36分第一大题反转链表给出一个链表按照1 2 3 4 5 6 7...个元素进行分组,然后反转偶数组的例如1 2 3 4 5 6 7 8 9 10,第一组是1 ,第二组是2 ,3,第三组是4 , 5 , 6,第四组7 , 8,9,10.翻转后1,3,2,4,5,6,10,9,8,7.跟leetcode上的反转链表很像,区别就是每组链表数量变成了1,2,3,4.。。个这样 。那么一样做法就好,就是长度差别,核心思路一样。还可以直接用数组接住手动搞就不用烦指来指去的next指针了。第二大题递增特别数字把每两个位上绝对值相差为1的数字称为特殊数字。如123,234,432,434等等。。给出一个low和high,要求输出二者间所有的特别数字。并顺序输出,如low=10,high=100,输出10,12,21,23,32,34......等等。两种解法,一种写一个check判断一个数字是否是特殊的,然后直接暴力每个数字算一遍,简单直白,复杂度O(mn),m为数字长度。另外一种递归,每一为下一位上延伸出下一位为当前位减一,加一两条枝,然后判断是否>9,<0等剪枝。时间复杂度小不少O(9*2^m)(因为要枚举所有数字开头,且n为10^m所以说更快)但是只用了第一种做法就做完了100%,emmm,数据这么友好是我没想到的。第三题直接就是找路径,n*m的方格左上角到右下角一共有多少条可达。emmmmm,这种题不应该是第一题吗。。。。。。直接C(n-1,n+m-2)即可。---(一共走n+m-2步,要么往右要么往下,一共往下n-1步。那么就是高中数学组合数了)或者直接二维dp也行,不过时间复杂度大一点O(n*m),不知道过不过(我直接组合数学算的,要小心中间数字爆int)#我的实习求职记录#qiuzh。
查看1道真题和解析 投递阿里巴巴灵犀互娱等公司10个岗位 我的实习求职记录
点赞 评论 收藏
分享
4 12 评论
分享
牛客网
牛客企业服务