关系经济人类预测化学自然
投稿投诉
自然科学
知识物理
化学生物
地理解释
预测理解
本质社会
人类现象
行为研究
经济政治
心理结构
关系指导
人文遗产

用PHP模仿ChatGPT聊天效果,实现逐字打印返回数据

8月4日 寒霜坞投稿
  最近对ChatGPT里逐字输出的效果很感兴趣,起初以为是接口内容返回之后使用cssjs实现的纯前端效果,深入一调研发现用的是ServerSentEvents(SSE)数据流实现的,看了sse的基本原理之后,就开始上手测试了,结果碰到一个小坑,卡了很久,这里分享一下:
  用thinkPHP实现sse可以这样:
  在控制器方法中侦听事件源,并将数据输出到客户端。以下是输出要实时推送的事件的示例代码:publicfunctionstream(){header(ContentType:texteventstream);header(CacheControl:nocache);header(Connection:keepalive);建立连接后,您可以输出初始化数据到客户端echoevent:sseinitdata:{};flush();监听事件源,并输出实时事件while(true){获取要发送的事件数据dataHelloSSE!;输出事件到客户端echoevent:eventdata:flush();休眠一段时间等待下次事件sleep(1);}}
  上述代码会不断地监听myevent事件源,并将数据HelloSSE!输出到客户端。在每个事件发送之间,脚本会等待一秒钟以模拟实时数据流。
  也可以用thinkPHP的标准返回方法:publicfunctionstream(){responsenewResponse();responseheader(ContentType,texteventstream);responseheader(CacheControl,nocache);responseheader(Connection,keepalive);建立连接后,您可以输出初始化数据到客户端responsedata(event:sseinit);responsedata(data:{});监听事件源,并输出实时事件count0;while(true){获取要发送的事件数据dataHelloSSE!。输出事件到客户端responsedata(event:event);responsedata(data:data);responsesend();休眠一段时间等待下次事件sleep(1);}}
  然后在前端用js接收事件流:varsourcenewEventSource(?phpechourl(stream);?);source。addEventListener(myevent,function(event){console。log(event。data);});
  然后就会发现,并没有期待的效果出现,并且浏览器会报错:
  EventSourcesresponsehasaMIMEtype(texthtml)thatisnottexteventstream。Abortingtheconnection。
  这个问题卡了很久,PHP中已经设置了响应格式为texteventstream,但是浏览器接收到的仍然是texthtml格式,好像responseheader(ContentType,texteventstream);这句代码没有生效一样;
  后来经过多方调查,thinkPHP使用了数据缓冲来输出内容,这会导致有些响应格式没有生效,所以在上面的PHP代码中添加obendflush();解决问题。
  以下是正确的PHP代码示例:publicfunctionstream(){关闭输出缓冲obendflush();header(ContentType:texteventstream);header(CacheControl:nocache);header(Connection:keepalive);建立连接后,您可以输出初始化数据到客户端echoevent:sseinitdata:{};flush();监听事件源,并输出实时事件while(true){获取要发送的事件数据dataHelloSSE!;输出事件到客户端echoevent:eventdata:flush();休眠一段时间等待下次事件sleep(1);}}
投诉 评论 转载

相约安徽向春而行江淮侨乡六家畈度假区业态走向成熟大皖新闻讯不出合肥就能看海的地方,想必你一定听过,那就是位于合肥巢湖东北岸的红石咀,然而世人只知红石咀,却不知在波澜壮阔的巢湖之滨,有一处风景秀美、古色古香的江淮侨乡,名叫六家……腾讯音乐上市以来首度营收下滑降本增效利润大增,AICG布局能华夏时报(www。chinatimes。net。cn)记者于玉金北京报道在用户总市场天花板之下,腾讯音乐(HK:01698)也出现了上市以来的首次营收下滑。3月21日港股……暗黑破坏神4公测开启暴雪战网转国际服全流程教学暴雪为玩家们带来好消息:暗黑4国际服公测即将到来,将在3月25日面向所有玩家开启。由于很多玩家只玩过战网国服,没接触过战网国际服,询问战网转国际服方法,想转去国际服参与暗黑4的……用PHP模仿ChatGPT聊天效果,实现逐字打印返回数据最近对ChatGPT里逐字输出的效果很感兴趣,起初以为是接口内容返回之后使用cssjs实现的纯前端效果,深入一调研发现用的是ServerSentEvents(SSE)数据流实现……最贵的女人Themostexpensivewoman一个不物质的女人才是最贵的女人,她要的东西反而少有人给的起。她追求的是精神层面的富足,打动她的是好的人品正的三观温文尔雅的言谈举止,这个人需要彬彬有礼做人谦卑做事稳重。能让她高……执法必严瑞典电信巨头爱立信又双叒叕被美国罚款了美国司法部门的长臂管辖制度规定不管世界上任何国家的公司,只要在美国有商业活动,这家公司在全世界任何国家的行为都要接受美国司法部门的监管。在这个法律框架之下,美国认为瑞典电信巨头……世界排名最受欢迎的十大运动,你最爱的运动上榜了吗?运动,是一个极富魅力的词,它使人们精神振奋,情绪激昂。每当运动员们跑在跑道上的时候,背景似乎总凝结着一种温柔的金色,为跑道镀上了一层永不褪色的金光,运动是生命之本,健康是生活源……中国碳材料领域重大突破吉大揭开非晶态钻石神秘面纱【侨报网综合讯】近日,吉林大学超硬材料中国国家重点实验室刘冰冰教授研究团队在新型非晶碳材料领域取得重大进展。该团队采用自主发展的大腔体压机超高压关键技术,首次成功实现了毫米级近……适用于GalaxyA545G的SmartView钱包式保护套IT之家3月4日消息,三星马其顿官网已经上线了适用于GalaxyA545G的SmartView钱包式保护套。此前消息称,该机将于今年3月15日发布。这款保护套官方名称为S……得了5个总冠军了吗?输邓肯2次,输库里的勇士3次,毫无统治力詹姆斯的确了不起,但和乔丹比,还差很多。90年代起乔丹的比赛,现在看詹姆斯?詹姆斯和乔丹的差距扣篮谁都会,拿个扣篮冠军看看,迈克尔乔丹好像拿了2个扣篮冠军。防守谁都……荣耀30系列等6款机型开启鸿蒙HarmonyOS3Beta版IT之家2月22日消息,荣耀老款机型终于盼来了鸿蒙HarmonyOS3的内测。华为今日发布公告,荣耀30系列等多款手机今日起开启HarmonyOS3Beta版尝鲜招募,截止3月……孩子玩蛋仔派对充值四千多,家长质疑一键登录!公司回应近日,王先生向南都记者报料称,孩子在华为手机玩一款名为蛋仔派对的游戏时充值了4000余元,但游戏并未经过成人认证就自动完成了实名认证,怀疑游戏直接获取了手机系统账号。对此,游戏……
春节不打烊多家快递公司高薪留人学校的造句用学校的造句大全狼爪冲锋衣尺码怎么选时间可以同时双向流逝吗?冻梨的功效作用有什么冻梨可以治咳嗽吗小米汽车落户经开区预计2024年首车下线睡莲字作文做什么运动可以瘦屁股雾霾天有哪些呼吸道护理方法燕麦这样吃减肥效果最好尼康日本产线将全部停工尼康相机日本造恐即将终结换色大法好!PS5将推出五种新颜色手柄也将同步上市
柿子树冬季怎样修剪9点1氪丨微信试行1065工作制58同城回应柬埔寨血奴案大众女生腰酸疼的主要原因俏皮雷语几小句一盆成田园一木入山林凤姐是个通情达理的人?人流和药流的区别是什么呢?红楼梦的文化背景是满是汉如何成为一个行业的顶尖专家热议聚热点网 身体有点浮肿怎么回事鲢鱼和鳙鱼是同一种鱼吗,有什么区别跟金城武都配一脸的周冬雨,为何搭档许凯演千古玦尘却翻车了

友情链接:中准网聚热点快百科快传网快生活快软网快好知文好找菏泽德阳山西湖州宝鸡上海茂名内江三亚信阳长春北海西安安徽黄石烟台沧州湛江肇庆鹤壁六安韶关成都钦州