当前位置: 首页 > 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…...

springboot 百货中心供应链管理系统小程序

一、前言 随着我国经济迅速发展&#xff0c;人们对手机的需求越来越大&#xff0c;各种手机软件也都在被广泛应用&#xff0c;但是对于手机进行数据信息管理&#xff0c;对于手机的各种软件也是备受用户的喜爱&#xff0c;百货中心供应链管理系统被用户普遍使用&#xff0c;为方…...

mongodb源码分析session执行handleRequest命令find过程

mongo/transport/service_state_machine.cpp已经分析startSession创建ASIOSession过程&#xff0c;并且验证connection是否超过限制ASIOSession和connection是循环接受客户端命令&#xff0c;把数据流转换成Message&#xff0c;状态转变流程是&#xff1a;State::Created 》 St…...

在四层代理中还原真实客户端ngx_stream_realip_module

一、模块原理与价值 PROXY Protocol 回溯 第三方负载均衡&#xff08;如 HAProxy、AWS NLB、阿里 SLB&#xff09;发起上游连接时&#xff0c;将真实客户端 IP/Port 写入 PROXY Protocol v1/v2 头。Stream 层接收到头部后&#xff0c;ngx_stream_realip_module 从中提取原始信息…...

江苏艾立泰跨国资源接力:废料变黄金的绿色供应链革命

在华东塑料包装行业面临限塑令深度调整的背景下&#xff0c;江苏艾立泰以一场跨国资源接力的创新实践&#xff0c;重新定义了绿色供应链的边界。 跨国回收网络&#xff1a;废料变黄金的全球棋局 艾立泰在欧洲、东南亚建立再生塑料回收点&#xff0c;将海外废弃包装箱通过标准…...

SpringBoot+uniapp 的 Champion 俱乐部微信小程序设计与实现,论文初版实现

摘要 本论文旨在设计并实现基于 SpringBoot 和 uniapp 的 Champion 俱乐部微信小程序&#xff0c;以满足俱乐部线上活动推广、会员管理、社交互动等需求。通过 SpringBoot 搭建后端服务&#xff0c;提供稳定高效的数据处理与业务逻辑支持&#xff1b;利用 uniapp 实现跨平台前…...

Rust 异步编程

Rust 异步编程 引言 Rust 是一种系统编程语言,以其高性能、安全性以及零成本抽象而著称。在多核处理器成为主流的今天,异步编程成为了一种提高应用性能、优化资源利用的有效手段。本文将深入探讨 Rust 异步编程的核心概念、常用库以及最佳实践。 异步编程基础 什么是异步…...

鱼香ros docker配置镜像报错:https://registry-1.docker.io/v2/

使用鱼香ros一件安装docker时的https://registry-1.docker.io/v2/问题 一键安装指令 wget http://fishros.com/install -O fishros && . fishros出现问题&#xff1a;docker pull 失败 网络不同&#xff0c;需要使用镜像源 按照如下步骤操作 sudo vi /etc/docker/dae…...

汇编常见指令

汇编常见指令 一、数据传送指令 指令功能示例说明MOV数据传送MOV EAX, 10将立即数 10 送入 EAXMOV [EBX], EAX将 EAX 值存入 EBX 指向的内存LEA加载有效地址LEA EAX, [EBX4]将 EBX4 的地址存入 EAX&#xff08;不访问内存&#xff09;XCHG交换数据XCHG EAX, EBX交换 EAX 和 EB…...

多模态大语言模型arxiv论文略读(108)

CROME: Cross-Modal Adapters for Efficient Multimodal LLM ➡️ 论文标题&#xff1a;CROME: Cross-Modal Adapters for Efficient Multimodal LLM ➡️ 论文作者&#xff1a;Sayna Ebrahimi, Sercan O. Arik, Tejas Nama, Tomas Pfister ➡️ 研究机构: Google Cloud AI Re…...

Java 二维码

Java 二维码 **技术&#xff1a;**谷歌 ZXing 实现 首先添加依赖 <!-- 二维码依赖 --><dependency><groupId>com.google.zxing</groupId><artifactId>core</artifactId><version>3.5.1</version></dependency><de…...