WebSockets原理,握手和代码实现!用Socket.io制作实时聊天室

作者: 技术蛋老师分类: 计算机技术 发布时间: 2022-06-22 19:05:00 浏览:71442 次

WebSockets原理,握手和代码实现!用Socket.io制作实时聊天室

菜就多练练丷:
up的前端基础知识好深厚, 我天天都在利用框架写页面,调接口,发测试,改bug, 大部分知识都快忘光了。[委屈]

【回复】同,天天写后台,真的很多基础知识越写越忘
【回复】回复 @记得加餐 :现在基本全用框架了,很多人都不晓得底层原理,原生ajax实现都忘了,现在都是axios直接到底[笑哭]
【回复】回复 @记得加餐 :哪个公司不写业务
穆穆穆穆穆kol:
今天下午面试刚好问道轮询问题 回答不出来[大哭]都不知道这个技术

【回复】轮询有些面试官确实喜欢问
我要菌丝:
太棒了,蛋老师终于讲这个了,你要是早一个月讲,我就把ws放在大作业里了。[给心心][给心心][给心心]

【回复】可以放在下个大作业[OK]
我的手机没油了:
请问蛋老师,什么情况下用ws比较好呢?ws本质上是特殊的应用层协议,原来是基于http长轮询的,后来有专门实现的改进对吗。我有个需求,网页提交数据后,服务器是异步处理的,这个处理过程可能持续30秒,这时候需要使用ws来监听来自服务器异步事件的状态吗?还是使用轮询呢?希望整个架构简单抗揍,如果是用ws,会对服务器造成压力吗?服务端已经被集群化了,中间经过了ingress等组件。望解答[微笑]

【回复】http轮询转ws唯独的麻烦就是前端和后端都得重写相应的api,因为相当于是完全换了一种协议。倒是ws一般不会给服务器带来额外压力,反而可以减轻压力,因为面对频繁的轮询时不需要客户端反复发送请求,节约了较长的http头部和可能存在的cookie数据,还减少了无用请求的占用。倒是如果按我理解你描述的那样,只需要提交一次数据,只是服务器需要较长的时间处理,并没有频繁的请求时候,我觉得倒是可以不用改;毕竟一改就要涉及前后端的同时改动和重新测试,是要消耗人力物力的
【回复】直接 http 就好了,服务器和网页代码针对这个特定路由把超时时间设置长点就好了。如果没法或者不方便设置超时时间,也可以采用主动推送的方案。主动推送方案很多,长轮训,server side evebt(sse),websocke
【回复】ws就用做交互型应用,你这个本质上属于产品需求,因为你不明确产品呈现给客户的是怎样的形式。回到你这个问题,这种需求,一般都是前端发起ajax请求,后端异步处理,前端再按一定间隔调 查询接口 就好了。
青铜门前忆起灵:
希望出一期详细讲socket的视频,呜呜呜

【回复】回复 @雪舞丞 :确实太少了,你可以去npm上找一找文档。
【回复】太强了,希望蛋老师哪天可以讲讲jest做测试的事,网上关于jest的太少了
gw小甘:
当我直接通过live serve执行HTML文件的时候,就会出现跨越问题,我自己尝试使用cors模块,但是还是会有这个跨域报错,有没有人了解过这个?

【回复】回复 @gw小甘 :你用live server开的服务和express开的服务都不是一个端口,express如果端口被占用,会自动改变设置的端口,你直接用express的静态文件功能,通过浏览器访问静态文件路径来访问前端界面就行了
【回复】换而言之,或者我开启了一个vue项目使用连接localhost:3000端口好像也一样出现这种问题了
Duo_Mei:
蛋老师,您前端引入的socket.io.js有啥配置码?我是通过cdn引入的socket.js,前端页面启动后,结果后端终端没connection的打印(服务器3000是没问题的)。 (以为liveServer插件启5500端口)我就在前端引入同时配置const socket = io("ws://localhost:3000"),结果也一样。 或者方便给个您前端引入的socket.io.js文件码?

【回复】回复 @NNNNNNNNNNNAAA : 我好像知道原因,我是通过html去打开页面,这样是错的,直接访问http://localhost:3000/就行了,之前是访问这样的页面http://localhost:52330/websocket/socket/index.html。
【回复】回复 @lingyuncelia : node_module下的路径/node_modules/socket.io/client-dist/socket.io.js, 看来源码也是有全局io()。但控制台报“ReferenceError: io is not defined” 我还是采用了cdn引入,控制台无报错,但后端 IO.on("connection",function)该方法也没有触发。 最后去控制台的network 选项中有 socket.io接口报400,脱发中~
【回复】当您实例化socket.io服务器时,它会自动为/socket.io/socket.io.js地址上的客户端文件提供服务,而无需您提供任何内容。
新夕X:
之前写了一个aria2下载器的前端页面,也是用到ws连接的,用JSON-RPC调用的后端接口,我刚好想复习ws,蛋老师就发视频了,太懂我了[嘟嘟][嘟嘟]

拔萝卜嘿呦嘿呦:
嘿嘿今天下午刚刚看了websocket,蛋老师就出来了

【回复】[笑哭][笑哭]怎么大家都是这么心有灵犀
_狸吉:
真好奇蛋老师之前是做什么的?懂的好多啊

【回复】回复 @技术蛋老师 : 什么做的事情?
【回复】回复 @技术蛋老师 : [doge]还的是你
差你一面之缘:
想听spring boot版本的,没学过nodeJS,但勉强能听得懂[酸了]

科技猎手 服务器 浏览器 前端 后端 nodejs http 编程开发 wss 打卡挑战

如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!