解决http event stream一直卡到最后一个消息才一次性返回

原创 吴就业 54 0 2024-10-17

本文为博主原创文章,未经博主允许不得转载。

本文链接:https://wujiuye.com/article/7ebb78064716413da421caf6ee7e179e

作者:吴就业
链接:https://wujiuye.com/article/7ebb78064716413da421caf6ee7e179e
来源:吴就业的网络日记
本文为博主原创文章,未经博主允许不得转载。

我在用http event stream实现类似ChatGPT的打字机效果时遇到了这个问题:浏览器打开debug模式,看http event stream请求,EventStream直到最后一个消息发完才一直显示完所有消息。并不是请求失败,也不是没有响应,只是看起来像是卡住了,一直等到响应的数据全部接收完才一次性的回调onmessage方法。

没有什么是抓包分析不能解决的。

通过tcpdump抓包:

tcpdump -i any -w ./tcpdump3000.pcap 'tcp and port 3000'

然后使用ChatTCP工具分析。

开启压缩的http event stream抓包

上图为其中的一个event数据包的截图,可以看到,数据看着像是被加密处理过了。

但是我们没有做到任何的加密功能。唯一解释的通的,就是数据被压缩了。显示的配置关闭压缩后,再重新抓包分析。

关闭压缩的http event stream抓包

可以看到,这次数据包正常了。

所以原因是请求开启了压缩功能,响应的body被压缩了,所以在body没有接收完的情况下,是无法解析body的。我们只需要关闭压缩功能即可,配置compress为false。

如果是Vue3项目这样配置:

module.exports = defineConfig({
    transpileDependencies: true,
    devServer: {
        // 解决http event stream卡到最后一个消息才一次性返回的问题。
        compress: false,
        proxy: {
            '/api': {
                target: 'http://localhost:8090',
                changeOrigin: true
            }
        }
    },
})

如果是next.js项目这样配置:

/** @type {import('next').NextConfig} */
const nextConfig = {
    rewrites: async () => {
        return [
            {
                source: '/api/:path*',
                destination: process.env.PROXY_SERVER,
            },
        ];
    },
    // 解决http event stream卡到最后一个消息才一次性返回的问题。
    compress: false
}
#网络

声明:公众号、CSDN、掘金的曾用名:“Java艺术”,因此您可能看到一些早期的文章的图片有“Java艺术”的水印。

文章推荐

NFS协议RPC通信数据包解码发现头4个字节不知道是什么?

当我们抓包并写代码解码的过程中发现,我们解码每个TCP数据包,无论是rpc请求还是rpc响应,都是要先跳过前四个字节,才是rpc协议的消息id,这样解码才正确,为什么呢?

nfs协议的rpc通信协议

通过开源项目go-nfs-client理解nfsv3的rpc通信协议,从而知道怎么解析抓取的数据包,获取需要的信息。

nfs协议,写文件流程分析

理解nfsv3协议的打开一个文件写和创建一个文件写的流程,以及相关操作的协议的理解、请求和响应的结构体的理解。

tcpdump抓包分析实战-学习网络问题排查必备技能-抓包分析,附多个案例讲解

了解网络协议、学会利用tcpdump抓包,学会利用Wireshark分析数据包,将能帮助我们解决一些仅从客户端日记分析或仅从服务端日记分析无法解决的疑难杂症。本篇结合笔者经历的一些实战案例,带大家掌握网络问题排查必备技能:tcpdump抓包分析。

tcpdump抓包分析实战-客户端接收到网关响应的body是空的

只因请求头deviceId多了一个‘\n’导致,服务端接收到的body是空的。

带宽问题排查实战-记一次线上文件下载慢问题排查

上传的文件是仅办公网络可访问,办法室网络有带宽限制,一个页面加载上百张图片,很容易达到带宽限制,所以出现下载很慢。