首页 > 编程语言 >用php实现stream模式

用php实现stream模式

时间:2023-05-02 21:44:22浏览次数:34  
标签:handle stream 模式 header json reader post php

首先是前端的代码是:

var url = "https://www.example.com";
fetch(url, {
    method: 'POST',
    headers: {
        'Content-Type': 'application/json'
    },
    body: JSON.stringify(requestData),
}).then(response => {
    const reader = response.body.getReader();
    return new ReadableStream({
        start(controller2) {
            function push() {
                reader.read().then(({
                    value,
                    done
                }) => {
                    if (done) {
                        controller2.close();
                        return;
                    }
                    controller2.enqueue(value);
                    push();
                })
            }
            push();
        }
    });
}).then(str	const reader = stream.getReader();
    reader.read().then(function processResult(result) {
        if (result.done) {
        	console.log("finish");
            return;
        }
        const chunk = decoder.decode(result.value, {
            stream: true
        });
        console.log(chunk);
        return reader.read().then(processResult);
    });
}).catch(error => console.error(`Error fetching stream: 

 PHP端代码是:

    public function stream_gpt()
    {
        if (ob_get_level() > 0) {
            ob_end_clean(); 
        }
        header('Content-Type: text/event-stream');
        header('Cache-Control: no-cache');
        header('Connection: keep-alive');
        header('X-Accel-Buffering: no');
        echo "XXXX";
        flush();

        die();
    }

 PHP通过stream调用远端服务

        $post_params = input();    
        $opts = array(
            'http' => array(
                'method'  => 'POST',
                'header'  => 'Content-type: application/json',
                'content' => json_encode($post_params)
            ),
        );
        $context = stream_context_create($opts);

        $remoteUrl = 'https://www.example.com';
        $handle = fopen($remoteUrl, 'r', false, $context);

        while (!feof($handle)) {
            echo fgets($handle,4);
            flush();
        }
        fclose($handle);

 如果出现错误“422 unprocessable entity”,应该是post json的参数格式不对造成的,请调整http post的content参数,应该是string(json)格式

标签:handle,stream,模式,header,json,reader,post,php
From: https://www.cnblogs.com/jpeanut/p/17368321.html

相关文章

  • PHP: mysql 5.7 and php 5.6 导入记事本编号查询不了和中文乱码问题
    --https://dev.mysql.com/doc/refman/8.0/en/charset-database.htmlshowvariableslike"character_set_%";CREATEDATABASE`geovindu`CHARACTERSETutf8COLLATEutf8_general_ci;--mysql官方说明文档才知道原来MySQL8.0已经已经把默认字符集升级成ut8mb4了,和5.0有区......
  • PHP use 动态类
    本文主要和大家分享PHP新特性use加强使用,从同一namespace导入的类、函数和常量现在可以通过单个use语句一次性导入了。<?php//PHP7之前版本用法<?phpusesome\namespace\ClassA;usesome\namespace\ClassB;usesome\namespace\ClassCasC;usefunctionsome\name......
  • unity发布到4399的webgl模式问题:FRAMEWORK.JS中的WEBREQUEST_SEND括号内的函数(不能有
    在发布4399的时候,之前遇到过这个问题,解决方法当然就是删除这个函数啦。步骤也很简单,但是刚开始摸不着头脑搞了好久,最后发现发布的时候有个加密选项,选择不加密,后面build的文件里面就可以进行打开修改,按照要求修改函数即可。......
  • Java的stream操作
    Java中的stream只需告诉做什么,而不用管怎么做1.创建流1.1从数组创建流1.1.1Arrays提供String[]names={"nick","jack","michael","jone","jane"};//Arrays提供的返回流的接口Stream<String>stream=Arrays.stream(strs);查看Array......
  • Codeforces 1229B Kamil and Making a Stream
    \(\gcd\)一个性质:对于正整数\(x\),重复\(x\leftarrow\gcd(x,i)\)(\(i\ge0\))直到\(x=1\),\(x\)出现的值个数上限为\(\log_2(x)+1\)证明:考虑到\(x\)是逐渐变小,则在\(x\)变小的情况下,对于\(x=\prod_{i=1}^kp_i^{c_i}\)(\(p_i\\operatorname{为质数}\))中的\(c_i\)......
  • 洛谷 P6938 - [ICPC2017 WF]Son of Pipe Stream(网络流)
    见过的最怪的网络流题,没有之一。首先新建超级源点,向\(1,2\)各连\(\infty\)的边。设最大流为\(A\),那么显然最优方案中flutter和water流量之和为\(A\)。先分析一波答案函数。显然,最终答案关于flutter的流量\(x\)的函数\(f(x)=x^a(A-x)^{1-a}\)。求导得\(f'(x)=ax^......
  • upstream指令参数
    max_conns限制每台server的连接数,用于保护避免过载起限流作用测试参考配置如下:#worker进程设置1个,便于测试观察成功的连接数worker_process1;upstreamtomcats{server192.168.206.129:8080max_conns=2;server192.168.206.130:8080max_conns=2;......
  • Android换肤白天/夜间模式的框架
    Android换肤/夜间模式的Android框架,配合theme和换肤控件框架可以做到无缝切换换肤(无需重启应用和当前页面)。ThisframeworkofAndroidappsupportmultipletheme(suchasday/nightmode)andneedn’tfinishcurrentapplicationorcurrentactivity.......
  • 【web 开发基础】PHP自定义回调函数之call_user_func_array()
    前言从上一篇文章中我们了解到,回调函数是将一个函数作为参数传递到调用的函数中。如果在函数的格式说明中出现callback类型的参数,则该函数就是回调函数。虽然可以使用变量函数去声明自己的回调函数,不过我们通常大多还是会通过借助 call_user_func_array() 函数去实现。通过借助......
  • MySQL Workbench和phpMyAdmin
    MySQLWorkbench是MySQL官方提供的一款开源的图形化管理工具,可以用于设计、开发、管理和维护MySQL数据库。MySQLWorkbench提供了一个集成开发环境(IDE),其中包含多个工具和功能,包括:1.数据建模工具:可以用于设计数据库模型、创建和编辑表、定义列、设置约束等。2.SQL编辑器:可以用......