Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

272
Views
Implemente el cliente RPC Node.js con el servidor escrito

Implementé el servidor RPC usando Go. Ahora, quiero escribir el cliente usando Node.js, ¿cómo puedo hacer una llamada RPC desde el cliente Node.js a un servidor Go?

Aquí está el código del servidor escrito en Go.

server.go

 package main type HelloService struct{} func (p *HelloService) Hello(request string, reply *string) error { *reply = "Hello " + request return nil } func main() { rpc.RegisterName("HelloService", new(HelloService)) // run rpc on port 1234 listener, err := net.Listen("tcp", ":1234") if err != nil { log.Fatal("ListenTCP error: ", err) } // use for-while for serve client for { conn, err := listener.Accept() log.Println("New connection: ", conn) if err != nil { log.Fatal("Accept error: ", err) } go rpc.ServeConn(conn) } }
over 4 years ago · Santiago Trujillo
1 answers
Answer question

0

El paquete net/rpc usa encoding/gob como formato de conexión predeterminado. Es un formato de serialización binaria específico de Go que es eficiente, pero, en la práctica, solo es útil cuando se comunica entre aplicaciones de Go.

Sin embargo, net/rpc admite el uso de diferentes códecs para (des) serializar datos y el paquete net/rpc/jsonrpc proporciona una implementación de códec compatible con JSON-RPC 1.0.

Aquí hay un ejemplo de su uso, junto con un cliente Node.js que utiliza el paquete jayson (nada en particular, solo el primero con el que me topé que admite JSON-RPC 1.0):

server.go

 package main import ( "log" "net" "net/rpc" "net/rpc/jsonrpc" ) type HelloService struct{} func (p *HelloService) Hello(request string, reply *string) error { *reply = "Hello " + request return nil } func main() { rpc.RegisterName("HelloService", new(HelloService)) listener, err := net.Listen("tcp", ":1234") if err != nil { log.Fatal("ListenTCP error: ", err) } for { conn, err := listener.Accept() if err != nil { log.Fatal("Accept error: ", err) } log.Printf("New connection: %+v\n", conn.RemoteAddr()) go jsonrpc.ServeConn(conn) } }

client.js

 const jayson = require("jayson"); const client = jayson.client.tcp({ host: "172.17.0.2", port: "1234", version: 1, }); client.request("HelloService.Hello", ["chuckx"], (err, response) => { if (err) throw err; if (response.error) throw response.error; console.log("response:", response.result); });

Producción

Servidor
 $ go run server.go 2021/03/12 06:46:21 New connection: 172.17.0.3:51016
Cliente
 $ node client.js response: Hello chuckx

Tenga en cuenta que el paquete net/rpc ya no acepta nuevas funciones, por lo que es mejor que use algo como gRPC para obtener más funciones y una mejor compatibilidad entre idiomas.

over 4 years ago · Santiago Trujillo Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!