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

php-golang-rpc jsonrpc和php客户端tivoka/tivoka包实践

golang 代码:

package main

import (

    "fmt"

    "net"

    "net/rpc"

    "net/rpc/jsonrpc"

)

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

}

func main() {

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

    if err != nil {

        panic(err)

    }

    rpc.Register(new(App))

    for {

        conn, err := ln.Accept()

        if err != nil {

            continue

        }

        go func(conn net.Conn) {

            fmt.Println("new client")

            jsonrpc.ServeConn(conn)

        }(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('1.0');
        $request = $connection->sendRequest('App.Hi', array(['name'=>'ceshi222']));
        dd($request->result);

        }

}

错误排查:

on: cannot unmarshal string into Go value of type [1]interface {}

使用jsonrpc的时候报以上两个错误,一个是因为

{
    "id": 1000,
    "method": "Arith.Divide",
    "params": "[{A:9,B:2}]"
}

一个是因为

{
    "id": 1000,
    "method": "Arith.Divide",
    "params": {
        "A": 9,
        "B": 2
    }
}

正确的应该是

 php端需要多加一层数组:

{
    "id": 1000,
    "method": "Arith.Divide",
    "params": [{
        "A": 9,
        "B": 2
    }]
}

 

相关文章:

php-golang-rpc jsonrpc和php客户端tivoka/tivoka包实践

golang 代码&#xff1a; package main import ( "fmt" "net" "net/rpc" "net/rpc/jsonrpc" ) type App struct{} type Res struct { Code int json:"code" Msg string json:"msg" Data any json:"…...

flutter 打包iOS安装包

flutter iOS Xcode打包并导出ipa文件安装包 1、 Xcode配置 1、 启动打包 1、 等待打包 1、 打包完成、准备导出ipa 1、 选择模式 1、 选择配置文件 1、 导出 1、 选择导出位置 1、 得到ipa...

二进制重排

二进制重排作用 二进制重排的主要目的是将连续调用的函数连接到相邻的虚拟内存地址&#xff0c;这样在启动时可以减少缺页中断的发生&#xff0c;提升启动速度。目前网络上关于ios应用启动优化&#xff0c;通过XCode实现的版本比较多。MacOS上的应用也是通过clang进行编译的&am…...

【Linux后端服务器开发】MAC地址与其他重要协议

目录 一、以太网 二、MAC地址 三、MTU 四、ARP协议 五、DNS系统 六、ICMP协议 七、NAT技术 八、代理服务器 一、以太网 “以太网”不是一种具体的网路&#xff0c;而是一种技术标准&#xff1a;既包含了数据链路层的内容&#xff0c;也包含了一些物理层的内容&#xf…...

WebGPU入门

1. 引言 前序博客&#xff1a; CUDA入门WebGPUZKP&#xff1a;客户端证明 WebGPU——Draft 2023.7.17 由苹果、谷歌、Mozilla团队发起&#xff0c;当前处于草稿阶段&#xff0c;旨在成为W3C推荐标准。 WebGPU为 在图形处理单元&#xff08;GPU&#xff09;上执行诸如渲染和…...

React Dva项目中.roadhogrc.mock.js直接自动导入mock目录下所有文件方式

上文 React Dva项目中模仿网络请求数据方法 中&#xff0c;我们书写了Dva项目模拟后端数据的方式 但是 我们.roadhogrc.mock.js中的这个处理其实并不好用 我们还需要一个一个的引入 我们可以直接靠一段代码 import fs from fs; import path from path; const mock {} fs.re…...

跨境独立站如何应对恶意网络爬虫?

目录 跨境出海独立站纷纷成立 爬虫威胁跨境电商生存 如何有效识别爬虫&#xff1f; 技术反爬方案 防爬虫才能保发展 中国出海跨境电商业务&#xff0c;主要选择大平台开设店铺&#xff0c;例如&#xff0c;亚马逊、eBay、Walmart、AliExpress、Zalando等。随着业务的扩大&…...

C# SourceGenerator 源生成器初探

简介 注意&#xff1a; 坑极多。而且截至2023年&#xff0c;这个东西仅仅是半成品 利用SourceGenerator可以在编译结束前生成一些代码参与编译&#xff0c;比如编译时反射之类的&#xff0c;还有模板代码生成都很好用。 演示仓库传送门-Github-yueh0607 使用 1. 创建项目 …...

网络安全/信息安全—学习笔记

一、网络安全是什么 网络安全可以基于攻击和防御视角来分类&#xff0c;我们经常听到的 “红队”、“渗透测试” 等就是研究攻击技术&#xff0c;而“蓝队”、“安全运营”、“安全运维”则研究防御技术。 无论网络、Web、移动、桌面、云等哪个领域&#xff0c;都有攻与防两面…...

【Visual Studio】无法打开包括文件: “dirent.h”: No such file or directory

VS2017/2019 无法打开包括文件: “dirent.h”: No such file or directory 1 “dirent.h”: No such file or directory 在windows下的VS2017/2019编译器中&#xff0c;发现无法打开“dirent.h”&#xff0c;主要是MSVC并没有实现这个头文件&#xff0c;但是在Linux这个头文件…...

asp.net MVC markdown编辑器

在 ASP.NET MVC 中&#xff0c;你可以使用一些第三方 Markdown 编辑器来让用户在网页上方便地编辑和预览 Markdown 内容。这些编辑器通常提供实时预览功能&#xff0c;将 Markdown 文本转换为实时渲染的 HTML&#xff0c;并支持编辑器工具栏来辅助用户编辑。 以下是一些流行的…...

论文浅尝 | 预训练Transformer用于跨领域知识图谱补全

笔记整理&#xff1a;汪俊杰&#xff0c;浙江大学硕士&#xff0c;研究方向为知识图谱 链接&#xff1a;https://arxiv.org/pdf/2303.15682.pdf 动机 传统的直推式(tranductive)或者归纳式(inductive)的知识图谱补全(KGC)模型都关注于域内(in-domain)数据&#xff0c;而比较少关…...

算法工程师-机器学习面试题总结(2)

线性回归 线性回归的基本思想是&#xff1f; 线性回归是一种用于建立和预测变量之间线性关系的统计模型。其基本思想是假设自变量&#xff08;输入&#xff09;和因变量&#xff08;输出&#xff09;之间存在线性关系&#xff0c;通过建立一个线性方程来拟合观测数据&#xff…...

低成本32位单片机空调内风机方案

空调内风机方案主控芯片采用低成本32位单片机MM32SPIN0230&#xff0c;内部集成了具有灵动特色的电机控制功能&#xff1a;高阶4路互补PWM、注入功能的高精度ADC、轨到轨运放、轮询比较器、32位针对霍尔传感器的捕获时钟、以及硬件除法器和DMA等电机算法加速引擎。 该方案具有…...

读发布!设计与部署稳定的分布式系统(第2版)笔记25_互联层之路由和服务

1. 控制请求数量 1.1. 这个世界可以随时摧毁我们的系统 1.1.1. 要么拒绝工作 1.1.2. 要么扩展容量 1.1.3. 没有人会在与世隔绝的环境中使用服务&#xff0c;现在的服务大多必须处理互联网规模的负载 1.2. 系统的每次失效&#xff0c;都源自某个等待队列 1.3. 每个请求都会…...

AI面试官:LINQ和Lambda表达式(二)

AI面试官&#xff1a;LINQ和Lambda表达式&#xff08;二&#xff09; 当面试官面对C#中关于LINQ和Lambda表达式的面试题时&#xff0c;通常会涉及这两个主题的基本概念、用法、实际应用以及与其他相关技术的对比等。以下是一些可能的面试题目&#xff0c;附带简要解答和相关案…...

Mysql原理篇--第二章 索引

文章目录 前言一、mysql的索引是什么&#xff1f;1.1 索引的结构&#xff1a;1.2 b树特性&#xff1a;1.3 b树每个节点的结构&#xff1a;1.4 b树 键值的大小排序&#xff1a;1.4 b树 存储&#xff08;InnoDB&#xff09;&#xff1a; 二、索引类型2.1 主要的索引类型&#xff…...

保姆级系列教程-玩转Fiddler抓包教程(1)-HTTP和HTTPS基础知识

1.简介 有的小伙伴或者童鞋们可能会好奇地问&#xff0c;不是讲解和分享抓包工具了怎么这里开始讲解HTTP和HTTPS协议了。这是因为你对HTTP协议越了解&#xff0c;你就能越掌握Fiddler的使用方法&#xff0c;反过来你越使用Fiddler&#xff0c;就越能帮助你了解HTTP协议。 Fid…...

【iOS】单例、通知、代理

1 单例模式 1.1 什么是单例 单例模式在整个工程中&#xff0c;相当于一个全局变量&#xff0c;就是不论在哪里需要用到这个类的实例变量&#xff0c;都可以通过单例方法来取得&#xff0c;而且一旦你创建了一个单例类&#xff0c;不论你在多少个界面中初始化调用了这个单例方…...

从Vue2到Vue3【五】——新的组件(Fragment、Teleport、Suspense)

系列文章目录 内容链接从Vue2到Vue3【零】Vue3简介从Vue2到Vue3【一】Composition API&#xff08;第一章&#xff09;从Vue2到Vue3【二】Composition API&#xff08;第二章&#xff09;从Vue2到Vue3【三】Composition API&#xff08;第三章&#xff09;从Vue2到Vue3【四】C…...

数字化社交与营销突围:二维彩虹赋能电子名片与私域引流

在移动互联网深度渗透的今天&#xff0c;企业与个人面临的流量竞争日益激烈。传统的社交方式与营销手段正遭遇瓶颈&#xff1a;纸质名片易丢失、信息更新滞后&#xff1b;微信群二维码7天有效期导致流量流失&#xff1b;多平台推广链接分散&#xff0c;难以形成合力。面对这些痛…...

FlowState Lab 保姆级Docker容器化部署与运维实战

FlowState Lab 保姆级Docker容器化部署与运维实战 1. 前言&#xff1a;为什么选择Docker部署FlowState Lab 如果你正在寻找一种简单高效的方式来部署FlowState Lab模型&#xff0c;Docker容器化无疑是最佳选择。想象一下&#xff0c;你花了一周时间在本地调试好的模型&#x…...

MoveIt新手避坑:Gazebo仿真时遇到‘Unable to identify controllers‘报错,检查这个launch文件就对了

MoveIt新手避坑&#xff1a;Gazebo仿真时遇到Unable to identify controllers报错解决方案 当你第一次尝试在Gazebo中运行MoveIt控制机械臂时&#xff0c;看到终端弹出鲜红的报错信息"Unable to identify any set of controllers that can actuate the specified joints&q…...

项目介绍 MATLAB实现基于RRT-Bezier快速搜索随机树算法(RRT)结合贝塞尔曲线拟合(Bezier)进行无人机三维路径规划的详细项目实例(含模型描述及部分示例代码) 还请多多点一下关注 加

MATLAB实现基于RRT-Bezier快速搜索随机树算法&#xff08;RRT&#xff09;结合贝塞尔曲线拟合&#xff08;Bezier&#xff09;进行无人机三维路径规划的详细项目实例 更多详细内容可直接联系博主本人 或者访问对应标题的完整博客或者文档下载页面&#xff08;含完整的程序&a…...

【Linux】新手必看:高频指令实战演练Part One

1. Linux命令行初体验&#xff1a;从零到上手 第一次打开Linux终端时&#xff0c;那种黑底白字的界面确实容易让人发懵。记得我刚开始接触时&#xff0c;连最基本的"怎么退出当前命令"都要百度半天。但别担心&#xff0c;命令行其实就像学骑自行车 - 刚开始摇摇晃晃&…...

FastAPI API版本控制:URI前缀的终极实现指南

FastAPI API版本控制&#xff1a;URI前缀的终极实现指南 【免费下载链接】fastapi FastAPI framework, high performance, easy to learn, fast to code, ready for production 项目地址: https://gitcode.com/GitHub_Trending/fa/fastapi FastAPI是一个高性能、易于学习…...

DEFOM-Stereo vs RAFT-Stereo:双目匹配领域的新旧王者对比实测(附KITTI数据集结果)

DEFOM-Stereo与RAFT-Stereo&#xff1a;双目视觉技术的实战性能解析 在计算机视觉领域&#xff0c;双目立体匹配技术一直是实现三维场景重建和环境感知的核心方法之一。近年来&#xff0c;随着深度学习技术的快速发展&#xff0c;RAFT-Stereo等基于神经网络的双目匹配算法已经展…...

AI 培训报名:主流机构专业度对比分析

引言 随着人工智能技术的快速发展&#xff0c;AI 培训市场也日益火爆。无论是企业还是个人&#xff0c;都希望通过专业的培训来提升对 AI 技术的应用能力。然而&#xff0c;当前 AI 培训市场鱼龙混杂&#xff0c;机构众多&#xff0c;质量参差不齐。企业和个人在选择 AI 培训机…...

手把手教你实现UE4与Vue页面的无缝通信(附完整代码示例)

UE4与Vue深度整合&#xff1a;现代前端框架与游戏引擎的通信实践 在数字内容开发领域&#xff0c;将现代Web技术与游戏引擎结合已成为提升用户体验的重要趋势。本文将深入探讨如何实现Unreal Engine 4与Vue.js框架的高效通信&#xff0c;为开发者提供一套完整的解决方案。 1.…...

开源ERP新选择:Odoo如何助力钢铁冶金企业实现数字化转型

Odoo开源ERP&#xff1a;钢铁冶金企业数字化转型的模块化引擎 钢铁冶金行业正面临前所未有的转型压力——从环保合规到供应链波动&#xff0c;从劳动力成本上升到全球化竞争。在这个背景下&#xff0c;一套既能快速响应业务变化又能控制成本的ERP系统不再是奢侈品&#xff0c;…...