美文网首页
go 解释get stream流式数据

go 解释get stream流式数据

作者: hugoren | 来源:发表于2019-10-15 11:37 被阅读0次

代码

func ReqStream(url string) {

    client := &http.Client{}
    request, err := http.NewRequest("GET", url, nil)
    if err != nil {
        fmt.Println(err)
    }
    //设置request的header
    request.Header.Set("Content-Type", "text/event-stream")
    request.Header.Set("Accept-Charset", "utf-8")
    request.Header.Set("Connection", "keep-alive")
    response, err := client.Do(request)
    if err != nil {
        fmt.Println(err)
        return
    }
    //defer response.Body.Close()

    if response.StatusCode == 200 {
        buf := make([]byte, 4096)
        for {
            n, err:= response.Body.Read(buf)
            if err != nil || n == 0{
                fmt.Println("出现错误")
                //break
            }
            result := string(buf[:n])
            print(result)
        }
    }
}

效果

[图片上传中...(image.png-9f576e-1571110481788-0)]

改进

这样写,没有解决类似的粘包的问题,需优化。

func StreamLine(url string){
    resp, err := http.Get(url)
    if err != nil {
        fmt.Println(err)
    }
    reader := bufio.NewReader(resp.Body)
    for {
        line, err := reader.ReadBytes('\n')
        if err != nil {
            fmt.Println(err)
        }
        data := string(line)
        match, _ := regexp.MatchString("data", data)
        if match {
            data_slice := string([]byte(data)[6:])
            fmt.Println(data_slice)
        }

    }
}

#### 对比评论
go 天生的高并发,速度快,相对py相对,同样一个stream请求,py就简单多了

def get_stream(url):
    result = requests.get(url, stream=True)
    while 1:
        for chunk in result.iter_content(1024):
            print(chunk)

参考:
https://blog.csdn.net/Hello_Ray/article/details/93332867

https://stackoverflow.com/questions/22108519/how-do-i-read-a-streaming-response-body-using-golangs-net-http-package

相关文章

  • go 解释get stream流式数据

    代码 效果 [图片上传中...(image.png-9f576e-1571110481788-0)] 改进 这样写...

  • 三,Lambda表达式入门--Stream流的创建方式及常用方法

    一,Stream流式处理: Stream流式处理是建立在lambda基础上的多数据处理技术 stream对集合数据...

  • node - 流 浅析

    概念 流(stream)是 Node.js 中处理流式数据的抽象接口。 stream 模块用于构建实现了流接口的对...

  • node之stream - 流

    流(stream)是Nodejs中出处理流式数据的抽象接口。stream模块提供了一些API,用于构建实现了流接口...

  • Stream流

    流式思想 Stream流的简单尝试 传统for循环遍历的方法 Steam流的方式 获取stream流 stream...

  • C++ Socket编程步骤

    1.sockets(套接字)编程有三种流式套接字(SOCK_STREAM),数据报套接字(SOCK_DGRAM),...

  • Java8-Stream流式计算

    什么是Stream流式计算 大数据:存储 + 计算 集合、MySQL 本质就是存储东西的; 计算都应该交给流来操作...

  • JDK 1.8 新特性学习(Stream)

    Stream实现了对数据源的流式处理,它可以并行操作,提高数据处理效率。 什么是流 流不是集合,它不对数据做保存,...

  • 3.1 Go操作MySQL数据库

    3.1 Go操作MySQL数据库 安装go操作MySQL的驱动go get -u -v github.com/go...

  • stream system-stream 101

    术语:什么是流(stream) 流式系统:面向无限数据集设计的一种数据处理引擎。这里讨论到数据的两种本身属性:基数...

网友评论

      本文标题:go 解释get stream流式数据

      本文链接:https://www.haomeiwen.com/subject/rrajmctx.html