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

实现rpc通信机制(待定)

一、概述

(1)rpc(remote procedure call, 远程接口调用),就像在本地调用函数一样,是应用组成服务内部分布式的基础功能。应用场景是在内网中的计算,比如:(a) 为上传的一张图片加水印、(b)在一款即时通讯软件内如想知道某个账户是否上线的状态、(c)查询端口是否可用、(d)查询防火墙的规则是否可用、(e)判断一个进程是否运行、使用的内存多大.....。

(2)rpc和http在使用中有什么区别和共同点?

答:共同点:两者都是用于2台机器间通信的,都是用于建立应用层偏业务的功能。

不同点:rpc更倾向于对内,内部的服务,书写风格是函数调用风格;http更倾向于客户端请求,适用在手机app或者浏览器请求服务端,对外的功能,由于有https多了层加密所以书写风格适合对外。rpc是一函数风格去调用,http是需要内部封装http请。

(3)市面上rpc的开源方案很多,比如百度的brpc,搜狗的zrpc,腾讯的Tars,淘宝的krpc,为什么不用现成的,而还要自己造rpc?

答:有可能实际需求只是其中很小的功能,但用开源rpc(a)学习成本高,有技术问题也不方便修改;(b)由于是自己的内部业务,只需要结合自己的功能,也不需要很全面的开源方案;

在server端实现类似函数
int  abc(int a){int c = a + 1;return c;
}在客户端可以直接用此函数
int main(){int ff = add(3);
}

备注

(1)size_t total_sent = send(...) 和 int total_sent = send(...) 的区别在于 变量类型 以及它们对返回值的处理影响?

答:size_t: 是无符号整型,用于表示大小或计数。通常用于表示非负数,例如数组的大小、内存的字节数等。int: 是有符号整型,可以表示正数、负数或零。通常用于表达普通整数。

(2)memset(变量名称, 0, (length + 1)) 与 ret = recv(connfd, 变量名称, length, 0)

(3)为什么对于字符串的copy不是每一次都考虑“\0”?比如

char *zrpc_method_zcat(char * a, char* b, char *c){char* str = (char *)malloc(strlen(a) + strlen(b) + strlen(c) + 1);strcpy(str, a);memcpy(str + strlen(a), b, strlen(b));memcpy(str + strlen(a) + strlen(b), c, strlen(c))
}

其中的strcpy()和memcpy()都没有复制“\0”。

答:字符串只要在结尾加“\0”就可以了,所以malloc()分配内存的时候 "+ 1",而中间位置不需要有“\0”。

(4)这个结构体占据多少字节?

#include<string.h>
#include <stdio.h>struct zrpc_func {char *method;char *params[16];char *types[16];int count;
};int main() {printf("Size of struct: %zu bytes\n", sizeof(struct zrpc_func));return 0;
}

(假设 64 位系统)

成员类型大小(字节)说明
methodchar*8指针(64 位系统)
paramschar*[16]16 × 8 = 12816 个指针,每个 8 字节
typeschar*[16]16 × 8 = 12816 个指针,每个 8 字节
countint4普通 int 类型

三、报错信息

(a)编译报错信息

出现“未找到.h头文件”

解决:找到含有头文件的文件夹路径,flag是“-I”,比如

gcc -o xxx xxx.c -I ./core/

出现“未定义undefine”

解决:这是没找到链接,所以先找到文件夹路径,然后是加上具体的链接名称flag是“-L”和“-lxxx”,比如

gcc -o xxx xxx.c -I ./core/  -L ./  -lxxx -lpthread -ldl

http://www.xdnf.cn/news/7617.html

相关文章:

  • R语言空间分析实战:地理加权回归联合主成份与判别分析破解空间异质性难题
  • 封装POD与PinMap文件总结学习-20250516
  • Go 语言简介
  • 操作系统的基础概念
  • 初步认识HarmonyOS NEXT端云一体化开发
  • AbMole| Phorbol 12-myristate 13-acetate(CAS号16561-29-8;目录号M4647)
  • vue+threeJs 生成烟花效果
  • PEFT简介及微调大模型DeepSeek-R1-Distill-Qwen-1.5B
  • 【css知识】flex-grow: 1
  • LibreHardwareMonitor:.Net开发的开源硬件监控项目
  • 中国机加工的市场概况及冷镦技术对于机加工替代的趋势
  • 如何在 Windows 11/10 PC 上擦除外部硬盘驱动
  • 什么叫生成式人工智能?职业技能的范式转移与能力重构
  • HarmonyOS5云服务技术分享--云存储SDK文章整理
  • 2025年 全国青少年信息素养大赛 算法创意挑战赛C++ 初中组 初赛真题
  • 94.LabelGrid 的遍历与属性编辑 Maui例子 C#例子
  • BioID技术:探索蛋白质相互作用的新方法
  • Java 05正则表达式
  • Linux中FTP服务命令使用与NFS服务
  • JavaScript的Button的contentItem属性
  • 企业建私有云,选择K8S方案会怎么样?
  • [洛谷刷题12]
  • COMSOL软件入门
  • 《棒球知识百科》亚冬会有哪些国家参加·棒球1号位
  • 后期:daplink
  • 基于CNN的猫狗识别(自定义Resnet-18模型)
  • 生产消费者模型 读写者模型
  • 学术前沿!IEEE PRMVAI 2025多模态深度学习研讨会来袭
  • 19 C 语言位运算、赋值、条件、逗号运算符详解:涵盖运算符优先级与复杂表达式计算过程分析
  • OpenCV CUDA 模块特征检测与描述------在GPU上执行特征描述符匹配的类cv::cuda::DescriptorMatcher