Giter VIP home page Giter VIP logo

Comments (1)

elee1766 avatar elee1766 commented on June 19, 2024

example detailing what i cannot figure out how to do

aka, streaming the "result" field of a jsonrpc response.

sometimes these responses can tens of GBS

package main

import (
	"bytes"
	"encoding/json"
	"log"

	"github.com/go-faster/jx"
)

type v struct {
	V string `json:"v"`
}

func main() {

	existingPackage()
	withIoWriter()

}

func existingPackage() {
	val := &v{V: "bar"}
	out := new(bytes.Buffer)
	e := jx.NewStreamingEncoder(out, 4096)

	// CURRENT
	e.Obj(func(e *jx.Encoder) {
		e.Field("jsonrpc", func(e *jx.Encoder) { e.Str("2.0") })
		e.Field("method", func(e *jx.Encoder) { e.Str("method") })
		e.Field("result", func(e *jx.Encoder) {
			// NOTE: in order to encode val, we must first buffer the ENTIRE message
			raw, _ := json.Marshal(val)
			// and pass that in
			e.Raw(raw)
		})
	})
	e.Close()
	ans := out.String()
	log.Println(ans)
	out.Truncate(0)
}
func withIoWriter() {
	val := &v{V: "bar"}
	out := new(bytes.Buffer)
	out.WriteString(`{`)
	out.WriteString(`"jsonrpc":"2.0",`)
	out.WriteString(`"method":"`)
	out.WriteString(`method`)
	out.WriteString(`",`)
	out.WriteString(`"result":`)
	// importantly, this can be streamed directly to network, instead of buffering. also, it adds a newline because it's an encoder, but that is a separate issue :)
	json.NewEncoder(out).Encode(val)
	out.WriteString(`}`)
	ans := out.String()
	log.Println(ans)
	out.Truncate(0)
}

from jx.

Related Issues (10)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.