chatgpt的流式输出:event-stream,如何使用nginx转发event-stream数据

chatgpt的流式输出使用的是event-stream,如下图:

event-stream和websocket都是用于实现实时通信的技术,那么,两者有什么区别呢:

1、连接方式:event-stream 使用的是 HTTP 协议,并且保持连接始终打开,以便服务器可以随时发送更新的数据给客户端。而 WebSocket 是一种独立的协议,它通过一个特殊的握手过程建立一个全双工的、持久的连接。
2、数据格式:event-stream 使用简单的文本数据格式,每一行包含一个事件类型和数据。而 WebSocket 可以传输任何类型的数据,包括二进制数据,并且支持更多的控制帧和消息类型。
3、双向通信:event-stream 只允许服务器向客户端发送数据,而不能接收来自客户端的数据。而 WebSocket 支持双向通信,即服务器和客户端都可以发送数据给对方。
4、实现复杂性:event-stream 的实现相对简单,只需要在服务器端生成事件数据并在客户端订阅这些事件即可。而 WebSocket 的实现要复杂一些,需要处理握手过程、错误处理、心跳检测等。
5、跨域支持:event-stream 可以使用标准的 CORS 机制来支持跨域请求。而 WebSocket 也有自己的跨域机制,但需要在服务器端进行配置。
6、浏览器兼容性:event-stream 在所有现代浏览器中都得到了很好的支持。而 WebSocket 在较旧的浏览器中可能不被支持,需要使用 polyfill 或者回退到其他技术(如轮询)。


综上所述,event-stream 和 WebSocket 各有优缺点,适用于不同的应用场景。如果你只需要单向通信,并且不需要处理复杂的实时数据,那么 event-stream 可能是一个更好的选择。如果你需要双向通信或者处理大量实时数据,那么 WebSocket 可能更适合你。

如果想用nginx转发event-stream数据,需要在location中增加如下配置:

proxy_http_version 1.1;
proxy_set_header Connection "";
proxy_set_header Host $host;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "Upgrade";
proxy_set_header X-Real_IP $remote_addr;
proxy_set_header X-Forwarded-For $remote_addr:$remote_port;

如下图所示:

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/502289.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

测试基础|如何组织一次有价值的业务巡检

1.背景 随着业务的快速迭代,开发自测需求与QA测试的需求比例相当,对于开发自测的需求,需求质量我们无法把控,并且随着自测需求的增多,QA对业务的熟悉程度也会出现断层; 部分业务整体已趋于稳定&#xff0…

kotlin安卓开发教程视频,2024年Android开发陷入饱和

Android基础 1、什么是ANR 如何避免它? 如果耗时操作需要让用户等待,那么可以在界面上显示进度条。 2、View的绘制流程;自定义View如何考虑机型适配;自定义View的事件 3、分发机制;View和ViewGroup分别有哪些事件分…

【leetcode】随机链表的复制

大家好,我是苏貝,本篇博客带大家刷题,如果你觉得我写的还不错的话,可以给我一个赞👍吗,感谢❤️ 点击查看题目 思路: struct Node* copyRandomList(struct Node* head) {struct Node* curhead;//1.copy原链…

气象数据收集

1、国家气象科学数据中心 预报数据:需要定制,收费10万+ 观测数据:国家气象信息中心-中国气象数据网 (cma.cn)https://data.cma.cn/data/cdcdetail/dataCode/A.0012.0001.html 地面基本气象观测数据 滞后2天 滞后一天 路面数据同化系统,实时 国家气象信息中心-中国气象数…

Mybatis | Mybatis的核心配置

目录: Mybatis的核心配置 :一、MyBatis的 “核心对象”1.1 SqlSessionFactory1.2 SqlSession :SqlSession对象中的操作数据库的方法 :\<T> T selectOne ( String statement )\<T> T selectOne( String statement , Object parameter )\<E> List\<E> se…

msvcp140.dll安装教程_最新msvcp140.dll丢失的解决方法

msvcp140.dll 是一个动态链接库 (DLL) 文件&#xff0c;它是 Microsoft Visual C 运行时库的一部分&#xff0c;特别对应的是 Visual Studio 2015 版本编译的 C 应用程序所需的关键组件。DLL 文件的设计目的是为了实现代码和数据的共享&#xff0c;这样多个应用程序就可以在同一…

无字母数字rce总结(自增、取反、异或、或、临时文件上传)

目录 自增 取反 异或 或 临时文件上传 自增 自 PHP 8.3.0 起&#xff0c;此功能已软弃用 在 PHP 中&#xff0c;可以递增非数字字符串。该字符串必须是字母数字 ASCII 字符串。当到达字母 Z 且递增到下个字母时&#xff0c;将进位到左侧值。例如&#xff0c;$a Z; $a;将…

安达发|可视化APS高级排产系统实现精益制造

精益制造已经成为了一种重要的生产模式&#xff0c;它的目标是通过消除浪费&#xff0c;提高生产效率&#xff0c;以实现更高的质量和更低的成本。而可视化APS高级排产系统则是实现精益制造的重要工具。下面&#xff0c;我将从接单可视化、BOM工艺可视化、计划与排程可视化、制…

数据结构:二叉搜索树(非递归实现)

目录 1、二叉搜索树 2、二叉搜索树的相关操作。 1、查找 2、插入 3、删除 3、代码实现&#xff08;非递归&#xff09; 1、二叉搜索树 二叉搜索树&#xff08;Binary Search Tree&#xff0c;简称BST&#xff09;是一种特殊的二叉树&#xff0c;其中每个节点的值大于其左…

JVM内存回收算法

1.1 引用计数法 每个对象创建的时候&#xff0c;会分配一个引用计数器&#xff0c;当这个对象被引用的时候计数器就加1&#xff0c;当不被引用或者引用失效的时候计数器就会减1。任何时候&#xff0c;对象的引用计数器值为0就说明这个对象不被使用了&#xff0c;就认为是“垃圾…

【python】json转成成yaml中文编码异常显示成:\u5317\u4EAC\u8DEF123\u53F7

姊妹篇&#xff1a;【python】json转成成yaml json数据 {"name": "张三","age": 30,"isMarried": false,"children": [{"name": "小王","age": 5},{"name": "小李",&qu…

2024/2/17打卡DFS---经典n—皇后问题***

注意点&#xff1a; 斜线上不能存放多个皇后&#xff0c;可以用截距表示&#xff0c;因为所有的直线斜率都为-1或者 1 &#xff0c;不会存在截距相同的直线。 截距为负数的直线&#xff0c;可以用nabs(截距&#xff09;处理。 另一种处理截距的方式&#xff1a;&#xff08;更…