经过我的实验+百度学习
我发现ACwing的私聊功能和代码提交功能的实现原理应该是websocket
下面开始我的推理过程
有一天我闲来无事,于是想知道ACwing聊天室的实现原理
根据我上次查看洛谷私聊功能,洛谷是通过post实现的
于是我猜测ACwing的实现机制应该也是如此
但是我对我的小号发送了多条消息,我没有拦截到任何post请求
事情开始不对劲起来。。。。。。
于是我开始百度web聊天室的实现方法
百度到了很多发法,其中洛谷用的方法就是AJAX轮询(即用post每隔一会儿询问服务器是否有消息)
而ACwing应该是用的 flah socket 或 web socket 或 其他
鉴于我的电脑没有 flah 而可以运行聊天室,直接排除 flsh socket
我再排除 websocket
百度 websocket 的实现,如下图
然后想办法拦截 webcocket
于是又依靠百度,只需要找到开始建立连接的http请求即可通过谷歌浏览器的开发者工具查看
Firefox开发者工具只能看到建立websocket连接的两个http数据包,没看到怎么查看具体传输内容,Chrome开发者工具Frames选项卡可以 -------百度
如上个百度出来的东西,火狐虽然也可以看到http连接,但看不到数据传输的过程
(于是放弃我的火狐浏览器,转用谷歌【本人用火狐主要是看上了管理者工具是中文哒】)
updata 2021.1.12 11:12:我发现火狐好像也可以用!!!百度又骗我
于是我再几十个请求中找到了socket连接的请求,
再用我的小号发信息,果然,收到数据了
如下图
绿色的是我发给服务器的
白色的是服务器发给我的
客户端每隔一端时间就会给服务器发送消息(即使你没有发消息)
根据上次python通过socket实现局域网聊天室的经验,我觉得这应该是保活信息
长连接保活的方式通常是采用应用层心跳,通过心跳包的超时和其他条件(网络切换)来执行重连操作。心跳一般是指某端(绝大多数情况下是客户端)每隔一定时间向对端发送自定义指令,以判断双方是否存活,因其按照一定间隔发送,类似于心跳,故被称为心跳指令。
至此,已经可以得出结论
(研究了好久QWQ)
tql
心跳指令 这个名字好有意思啊
QWQ正在研究更有意思的