Библиотека Golang (или код), необходимая для клиента JSON-RPC2.0 через websocket - PullRequest
3 голосов
/ 19 апреля 2019

Я должен добавить

  1. JSON-RPC2.0
  2. через сетку, на мой
  3. Golang
  4. Клиентский процесс

для связи с другим сервером. К сожалению, ни одно из требований не может быть изменено.

У меня есть библиотеки и примеры кода, которые предлагают части решения, но я не смог собрать все это вместе.

Я посмотрел на Ethereum (не могу найти пример клиента) Ethereum rpc

A stackoverflow вопрос , который набирает tcp.

Этот набирает TCP

net.rpc не 2.0, набирает tcp

через http net / rpc и http

Этот выглядел многообещающе, но я не могу заставить своего клиента работать.

type Params struct {
    Name string `json:"name"`
}

func main() {
    h := NewRPCHandler()
    h.Register("some_handler", dummySuccessHandler)
    ts := http.Server{Handler: h}
    defer ts.Close()
    conn, _, err := websocket.DefaultDialer.Dial("ws://127.0.0.1:8080/ws_rpc", nil)
    if err != nil {
        log.Printf("Error dialing %v", err)
    }

    client := jsonrpc.NewClient(conn.UnderlyingConn())

    par := &Params{"newuser"}
    req, err := json.Marshal(&par)
    if err != nil {
        log.Printf("Bad marshal %#v", err)
    }
    var resp Result
    err = client.Call("some_handler", &req, &resp)

Я пробовал с / без маршалинга, но я цепляюсь за соломинку здесь.

...