当前位置: 首页 > news >正文

php-golang-jsonrpc2.0 rpc-codec/jsonrpc2和tivoka/tivoka实践

golang代码:

package main

import (

    "context"

    "net"

    "net/rpc"

    "github.com/powerman/rpc-codec/jsonrpc2"

)

type App struct{}

type Res struct {

    Code int    `json:"code"`

    Msg  string `json:"msg"`

    Data any    `json:"data"`

}

func (*App) Hi(mp map[string]any, res *Res) error {

    res.Code = 200

    res.Msg = "成功"

    var rmp = make(map[string]any, 0)

    if v, ok := mp["name"].(string); ok {

        rmp["name"] = "my name is " + v

    } else {

        rmp["name"] = "my name is unknown"

    }

    res.Data = rmp

    return nil

}

type exampleContextKey string

var RemoteAddrContextKey exampleContextKey = "RemoteAddr"

func main() {

    rpc.Register(&App{})

    //Server provide a TCP transport.

    lnTCP, err := net.Listen("tcp", "127.0.0.1:6001")

    if err != nil {

        panic(err)

    }

    defer lnTCP.Close()

    for {

        conn, err := lnTCP.Accept()

        if err != nil {

            return

        }

        ctx := context.WithValue(context.Background(), RemoteAddrContextKey, conn.RemoteAddr())

        go jsonrpc2.ServeConnContext(ctx, conn)

    }

}

/******************************************************/

php代码:

composer require tivoka/tivoka

<?php
namespace app\index\controller;

use app\BaseController;
use think\facade\View;
use Tivoka\Client;

class Index extends BaseController
{
    public function index()
    {
        
        //tcp
        $connection = Client::connect(array('host' => '127.0.0.1', 'port' => 6001));
        $connection->useSpec('2.0');
        $request = $connection->sendRequest('App.Hi', ['name'=>'ceshi222']);
        dd($request->result);

      }

}

 

http://www.lryc.cn/news/98630.html

相关文章:

  • 听力词汇笔记(6级)
  • 【JVM】详细解析java创建对象的具体流程
  • kafka怎么用代码读取数据
  • 网关与路由器的区别
  • 助力工业物联网,工业大数据之工单事实指标需求分析【二十】
  • python_PyQt5开发工具结构基础
  • 【C++】入门基础2
  • Reinforcement Learning with Code 【Chapter 8. Value Funtion Approximation】
  • 常用InnoDB参数介绍
  • 云原生网关部署新范式丨 Higress 发布 1.1 版本,支持脱离 K8s 部署
  • 【通讯录】--C语言
  • 通过两种实现方式理解CANoe TC8 demo是如何判断接收的以太网报文里的字段的
  • Mysql- 存储引擎
  • vite / nuxt3 项目使用define配置/自定义,可以使用process.env.xxx获取的环境变量
  • 在Linux、Ubuntu中跨平台编译ARM(AARCH64)平台的binutils
  • SpringCloudAlibaba微服务实战系列(五)Sentinel1.8.5+Nacos持久化
  • pytest中conftest的用法以及钩子基本使用
  • 数据结构---顺序栈、链栈
  • 我的MacBook Pro:维护心得与实用技巧
  • Higress非K8S安装
  • QT--day4(定时器事件、鼠标事件、键盘事件、绘制事件、实现画板、QT实现TCP服务器)
  • hjm家族信托科技研究报告
  • [SQL挖掘机] - 视图相关操作
  • 【Quartus FPGA】EMIF DDR3 读写带宽测试
  • Flutter:flutter_local_notifications——消息推送的学习
  • Spring AOP (面向切面编程)原理与代理模式—实例演示
  • 什么是SCRUM认证体系 ?
  • DoIP学习笔记系列:(二)VN5620 DoIP测试配置实践笔记
  • Grafana - TDEngine搭建数据监测报警系统
  • ES6基础知识二:ES6中数组新增了哪些扩展?