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

实现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

相关文章:

实现rpc通信机制(待定)

一、概述 &#xff08;1&#xff09;rpc&#xff08;remote procedure call, 远程接口调用&#xff09;,就像在本地调用函数一样&#xff0c;是应用组成服务内部分布式的基础功能。应用场景是在内网中的计算&#xff0c;比如&#xff1a;(a) 为上传的一张图片加水印、&#xf…...

STM32--串口函数

USART_GetFlagStatus() 用于获取某个串口的寄存器中的某个标志位的状态&#xff0c;和中断无关。 USART_ClearFlag() 用于清楚串口寄存器中的标志位的状态&#xff0c;和中断无关。 USART_ITConfig() 使能或禁用指定的 USART 中断。 USART_ITConfig(USART1, USART_IT_TXE, …...

Linux跨网络通信中IP与MAC的作用

是的&#xff0c;MAC地址和IP地址分别属于OSI模型的不同层次&#xff0c;并在数据封装过程中被添加到不同的位置&#xff1a; 1. MAC地址&#xff08;数据链路层&#xff09; 作用层级&#xff1a;数据链路层&#xff08;第二层&#xff09;。封装位置&#xff1a;添加到数据链…...

Facebook隐私保护的成与败:一场对用户信任的考验

引言 在这个信息爆炸的时代&#xff0c;Facebook作为全球最大的社交网络平台之一&#xff0c;其隐私保护政策和实践一直是公众关注的焦点。随着数据泄露事件的频发&#xff0c;Facebook在隐私保护方面的成与败&#xff0c;不仅关系到其自身的声誉&#xff0c;更是对用户信任的…...

面试算法刷题3(核心+acm)

102. 二叉树的层序遍历 递归法 核心代码模式 不断递归根节点&#xff0c;根据深度来判断加在哪一层上。 /*** Definition for a binary tree node.* public class TreeNode {* int val;* TreeNode left;* TreeNode right;* TreeNode() {}* TreeNode(in…...

[Java] idea的调试介绍

1. 什么是调试&#xff1f; 调试就是帮助我们去寻找代码中的bug&#xff0c;优化代码的过程。调试对于程序员来说非常重要&#xff0c;能帮助我们更容易去找到代码中的错误&#xff0c;去修复。 2. idea集成开发环境的调试 下面我就介绍下idea集成开发环境下的调试&#xff…...

winrm ‘Protocol‘ object has no attribute ‘run_ps‘

在使用 winrm 库时遇到错误 ‘Protocol’ object has no attribute ‘run_ps’ 通常意味着你正在尝试使用一个不存在的属性或方法。在 Python 中使用 winrm 库时&#xff0c;正确的调用方式应该使用 client 对象来运行 PowerShell 命令&#xff0c;而不是直接在 Protocol 对象上…...

WHAT - CSS 中的 min-width

文章目录 基本语法常见取值使用场景举例min-width: 0为什么 min-width: 0 重要&#xff1f;场景演示提示 注意事项 在 WHAT - CSS 中的 width 中我们已经详细介绍过 width。那为什么 CSS 还要提供一个 min-width&#xff1f; 阅读本文前可先阅读 MDN - min-width。 min-width…...

测试W5500的第2步_使用ioLibrary库创建TCP客户端

ioLibrary库下载地址&#xff1a;文件下载地址:https://gitee.com/wiznet-hk/STM32F10x_W5500_Examples 源文件下载地址:https://gitee.com/wiznet-hk 没有注册的&#xff0c;只能复制粘贴了。 本文介绍了如何初始化STM32的硬件资源&#xff0c;配置W5500的网络参数&#xff…...

深度学习中的正则化方法与卷积神经网络基础

笔记 1 正则化方法 1.1 什么是正则化 防止模型过拟合(训练集效果好, 测试集效果差), 提高模型泛化能力 一种防止过拟合, 提高模型泛化能力的策略 L1正则: 需要通过手动写代码实现 L2正则: SGD(weight_decay) dropout BN 1.2 Dropout正则化 让神经元以p概率随机死亡, 每…...

pg_dump

以下是 PostgreSQL 中 pg_dump 命令的 核心参数 及 使用示例 的详细说明&#xff1a; 一、核心参数分类及说明 pg_dump 主要用于备份单个数据库&#xff0c;支持多种格式和灵活的控制选项。以下是其关键参数分类&#xff1a; 1. 连接参数 参数说明-h, --hostHOST数据库服务器…...

css使用clip-path属性切割显示可见内容

1. 需求 想要实现一个渐变的箭头Dom&#xff0c;不想使用svg、canvas去画&#xff0c;可以考虑使用css的clip-path属性切割显示内容。 2. 实现 <div class"arrow">箭头 </div>.arrow{width: 200px;height: 60px;background-image: linear-gradient(45…...

系统设计——项目设计经验总结1

摘要 在系统设计的时候&#xff0c;注意域的区分&#xff0c;功能区分、类的区分、方法区分范围和定义。在系统设计的时候的&#xff0c;需要思考类、方法在什么情况下会涉及到修改&#xff0c;遵循记住&#xff1a;一个类应该只有一个原因被修改&#xff01; 当不满足&#x…...

如何在WordPress网站上添加即时聊天功能

在 WordPress 网站上添加即时聊天功能既简单又有益。近年来&#xff0c;即时聊天已经有了长足的发展&#xff0c;融入了强大的交流和自动化功能&#xff0c;类似于流行的人工智能聊天机器人。无论您是想提高销售转化率还是将人工智能整合到客户服务流程中&#xff0c;在 WordPr…...

[luogu12542] [APIO2025] 排列游戏 - 交互 - 博弈 - 分类讨论 - 构造

传送门&#xff1a;https://www.luogu.com.cn/problem/P12542 题目大意&#xff1a;给定一个长为 n n n 的排列和一张 m m m 个点 e e e 条边的简单连通图。每次你可以在图上每个点设置一个 0 ∼ n − 1 0\sim n-1 0∼n−1、两两不同的权值发给交互库&#xff0c;交互库会…...

图像处理基础知识

OpenCV计算机视觉开发实践&#xff1a;基于Qt C - 商品搜索 - 京东 信息是自然界物质运动总体的一个重要方面&#xff0c;人们认识世界和改造世界就是要获得各种各样的图像信息&#xff0c;这些信息是人类获得外界信息的主要来源。大约有70%的信息是通过人眼获得的。近代科学研…...

使用MybatisPlus实现sql日志打印优化

背景&#xff1a; 在排查无忧行后台服务日志时&#xff0c;一个请求可能会包含多个执行的sql&#xff0c;经常会遇到SQL语句与对应参数不连续显示&#xff0c;或者参数较多需要逐个匹配的情况。这种情况下&#xff0c;如果需要还原完整SQL语句就会比较耗时。因此&#xff0c;我…...

HarmonyOS5云服务技术分享--ArkTS开发Node环境

✨ 你好呀&#xff0c;开发者小伙伴们&#xff01;今天我们来聊聊如何在HarmonyOS&#xff08;ArkTS API 9及以上&#xff09;中玩转云函数&#xff0c;特别是结合Node.js和HTTP触发器的开发技巧。文章会手把手带你从零开始&#xff0c;用最接地气的方式探索这个功能&#xff0…...

水利数据采集MCU水资源的智能守护者

水利数据采集仪MCU&#xff0c;堪称水资源的智能守护者&#xff0c;其重要性不言而喻。在水利工程建设和水资源管理领域&#xff0c;MCU数据采集仪扮演着不可或缺的角色。它通过高精度的传感器和先进的微控制器技术&#xff0c;实时监测和采集水流量、水位、水质等关键数据&…...

深度学习之用CelebA_Spoof数据集搭建一个活体检测-用MNN来推理时候如何利用Conan对软件包进行管理

我为什么用Conan 前面的文章&#xff1a;深度学习之用CelebA_Spoof数据集搭建一个活体检测-训练好的模型用MNN来推理有提到怎么使用MNN对训练好的模型进行推理&#xff0c;里面并没有提到我是怎么编译和进行代码依赖包的管理的详细步骤&#xff0c;在这里我是用的是Conan:一个…...

深入解剖 G1 收集器的分区模型与调优策略

JVM 垃圾收集系列之三 | 高并发低延迟系统的首选 GC 解法&#xff01; 一、为什么我们需要 G1 垃圾收集器&#xff1f; 在传统 GC&#xff08;如 CMS&#xff09;中&#xff0c;我们常常面临的问题是&#xff1a; GC 停顿不可预测&#xff08;Stop-The-World&#xff09;内存…...

兰亭妙微・UI/UX 设计・全链路开发

【遇见专业设计&#xff0c;共筑卓越产品】 在数字化浪潮中&#xff0c;界面是产品与用户对话的第一窗口。 兰亭妙微&#xff08;蓝蓝设计&#xff09;&#xff0c;自 2008 年深耕 UI/UX 领域&#xff0c;以清华团队为核心&#xff0c;16 年专注软件与互联网产品的界面设计开…...

Babylon.js学习之路《六、材质与纹理:为模型赋予真实的表面效果》

文章目录 1. 引言&#xff1a;材质与纹理的重要性1.1 材质与纹理的核心作用 2. 基础材质&#xff1a;StandardMaterial2.1 材质属性详解2.2 实战&#xff1a;创建金属材质 3. 纹理贴图&#xff1a;从基础到高级3.1 基础纹理映射3.2 多纹理混合技术 4. 高级材质&#xff1a;PBRM…...

飞致云旗下开源项目GitHub Star总数突破150,000个

2025年5月19日&#xff0c;中国领先的开源软件提供商飞致云宣布&#xff0c;其旗下开源项目在代码托管平台GitHub上所获得的Star总数已经超过150,000个。基于在开源领域的长期耕耘和探索&#xff0c;飞致云的开源势能不断增强&#xff0c;获得第一个五万GitHub Star用时89个月&…...

萌新联赛第(三)场

C题 这道题用暴力去写想都不要想&#xff0c;一定超时&#xff0c;于是我们需要优化&#xff0c;下面是思路过程&#xff1a; 如图&#xff0c;本题只需找到x的因数个数和(n-x)的因数个数&#xff0c;这两个相乘&#xff0c;得到的就是对于这个x来说组合的个数&#xff0c;且x…...

cplex12.9 安装教程以及下载

cplex 感觉不是很好找&#xff0c;尤其是教育版&#xff0c;我这里提供一个版本&#xff0c;在下面的图可以看到&#xff0c;不仅可以配置matlab&#xff0c;也可以配置vs,现在拿vs2017来测试一下&#xff0c;具体文件的文件有需要的可以复制下面的链接获取 我用网盘分享了「c…...

Pycharm-jupyternotebook不渲染

解决方案&#xff1a; https://youtrack.jetbrains.com/issue/PY-54244 import plotly.io as pio pio.renderers.default "vscode"...

layui 介绍

layui&#xff08;谐音&#xff1a;类 UI) 是一套开源的 Web UI 解决方案&#xff0c;采用自身经典的模块化规范&#xff0c;并遵循原生 HTML/CSS/JS 的开发方式&#xff0c;极易上手&#xff0c;拿来即用。其风格简约轻盈&#xff0c;而组件优雅丰盈&#xff0c;从源代码到使用…...

大数据相关操作

大数据相关操作 一、环境配置 1、修改主机名 #修改主机名 hostnamectl set-hostname master2、固定IP地址 # 进入修改 sudo vim /etc/netplan/01-network-manager-all.yaml# 修改配置文件 # Let NetworkManager manage all devices on this system network:version: 2rend…...

谷歌宣布推出 Android 的新安全功能,以防止诈骗和盗窃

在上周二的 Android Show 上&#xff0c;也就是Google I/O 开发者大会之前&#xff0c;谷歌宣布了 Android 的全新安全和隐私功能。这些新功能包括对通话、屏幕共享、消息、设备访问和系统级权限的全新保护。谷歌希望通过这些功能保护用户免遭诈骗&#xff0c;在设备被盗或被攻…...

WSL虚拟机整体迁移教程(如何将WSL从C盘迁移到其他盘)

文章目录 WSL虚拟机迁移教程一、查看当前主机的子系统二、导出 WSL 子系统三、将打包好的文件发送给另一个人四、在另一台机器导入并恢复子系统五、附加命令六、注意事项和导出文件信息6.1 注意事项6.2 导出文件信息使用 wsl --export 命令导出整个 WSL 子系统时&#xff0c;它…...

汽车区域电子电气架构(Zonal E/E)的统一

我是穿拖鞋的汉子&#xff0c;魔都中坚持长期主义的汽车电子工程师。 老规矩&#xff0c;分享一段喜欢的文字&#xff0c;避免自己成为高知识低文化的工程师&#xff1a; 钝感力的“钝”&#xff0c;不是木讷、迟钝&#xff0c;而是直面困境的韧劲和耐力&#xff0c;是面对外界…...

开源一个记账软件,支持docker一键部署

欢迎来到我的博客&#xff0c;代码的世界里&#xff0c;每一行都是一个故事 &#x1f38f;&#xff1a;你只管努力&#xff0c;剩下的交给时间 &#x1f3e0; &#xff1a;小破站 开源一个记账软件&#xff0c;支持docker一键部署 项目简介功能特性技术栈快速开始环境要求运行步…...

新能源汽车焊接智能节气阀

在新能源汽车产业迅猛发展的浪潮中&#xff0c;制造工艺的优劣直接关系到车辆的性能、安全与市场竞争力。焊接&#xff0c;作为新能源汽车生产流程里的关键一环&#xff0c;无论是构建车身框架&#xff0c;还是连接电池模组&#xff0c;其质量的好坏都起着决定性作用。而在焊接…...

React 第四十四节Router中 usefetcher的使用详解及注意事项

前言 useFetcher 是 React Router 中一个强大的钩子&#xff0c;用于在不触发页面导航的情况下执行数据加载&#xff08;GET&#xff09;或提交&#xff08;POST&#xff09;。 一、useFetcher 应用场景&#xff1a; 1、后台数据预加载&#xff08;如鼠标悬停时加载数据&…...

33、魔法防御术——React 19 安全攻防实战

一、奥术护盾&#xff08;基础防御&#xff09; 1. 敏感数据加密术 // cryptoUtils.js - 数据加密工具export const encrypt (data) > {// 实际项目应使用Web Crypto API或crypto-jsreturn btoa(encodeURIComponent(data));};​export const decrypt (data) > {try {…...

NVM 安装与配置指南

简介 Node Version Manager&#xff08;NVM&#xff09;是一个常用的 Node.js 版本管理工具&#xff0c;可用于在开发过程中方便地切换不同版本的 Node.js。通过 NVM&#xff0c;用户可以根据项目需求选择不同的 Node.js 版本&#xff0c;而无需手动安装和卸载多个版本的 Node…...

SpringMVC04所有注解按照使用位置划分| 按照使用层级划分(业务层、视图层、控制层)

目录 一、所有注解按照使用位置划分&#xff08;类、方法、参数&#xff09; 1. 类级别注解 2. 方法级别注解 3. 参数级别注解 4. 字段/返回值注解 二、按照使用层级划分&#xff08;业务层、视图层、控制层&#xff09; 1、控制层&#xff08;Controller Layer&#x…...

【数据库】-1 mysql 的安装

文章目录 1、mysql数据库1.1 mysql数据库的简要介绍 2、mysql数据库的安装2.1 centos安装2.2 ubuntu安装 1、mysql数据库 1.1 mysql数据库的简要介绍 MySQL是一种开源的关系型数据库管理系统&#xff08;RDBMS&#xff09;&#xff0c;由瑞典MySQL AB公司开发&#xff0c;目前…...

MySQL与Redis一致性问题分析

一、一致性问题概述 1.1 什么是一致性问题&#xff1f; 在数据库-缓存架构中&#xff0c;当MySQL中的数据&#xff08;最新值&#xff09;与Redis缓存中的数据&#xff08;缓存旧值&#xff09;出现差异时&#xff0c;由于程序总是优先读取Redis缓存&#xff0c;就会导致应用…...

Xshell传输文件

新建文件 点击新建 完善主机地址 然后输入我们的远端服务器的SSH协议 一般的是这样的ssh -p 44562 rootregion-1.autodl.com 由于Xshell比较特殊我们输入ssh rootregion-1.autodl.com 44562这样的形式 然后输入服务器的密码即可...

怎样用 esProc 为大主子表关联提速

类似订单和明细表这样的主子表关联比较常见&#xff0c;在 SQL 中&#xff0c;这种关联用 JOIN 实现&#xff0c;在两个表都很大的情况下&#xff0c;常常出现计算速度非常慢的现象。 如果预先将主子表都按照主键有序存储&#xff0c;就可以使用归并算法实现关联。这种算法只需…...

打卡day31

文件的规范拆分和写法 知识点回顾 规范的文件命名规范的文件夹管理机器学习项目的拆分编码格式和类型注解 作业&#xff1a;尝试针对之前的心脏病项目&#xff0c;准备拆分的项目文件&#xff0c;思考下哪些部分可以未来复用。 导入依赖库 # 忽视警告 import warnings warn…...

编译原理的部分概念

解释程序&#xff1a;边解释边执行&#xff1a;不断读取源程序的语句&#xff0c;解释语句&#xff0c;读取此语句需要的数据&#xff0c;根据执行结果读取下一条语句&#xff0c;继续解释执行&#xff0c;直到返回结果。 编译程序&#xff1a;将源程序完整地转换成机器语言程…...

Java中字符串(String类)的常用方法

以下是Java中字符串&#xff08;String类&#xff09;的常用方法分类详解&#xff0c;包含核心方法说明和示例代码&#xff1a; 一、字符串基础信息 方法说明示例输出length()返回字符串长度"Hello".length()5isEmpty()判断字符串是否为空&#xff08;长度是否为0&a…...

什么是 ERP,中国企业如何科学应用 ERP

中国企业在引入 ERP 系统过程中&#xff0c;常因盲目跟风大型企业选型、忽视自身业务适配性&#xff0c;导致系统功能过剩、实施成本高企、员工接受度低等问题&#xff0c;最终造成项目成功率不足 10%。因此&#xff0c;理性认知 ERP 的价值定位与本土化实施路径&#xff0c;成…...

使用SQLite Expert个人版VACUUM功能修复数据库

使用SQLite Expert个人版VACUUM功能修复数据库 一、SQLite Expert工具简介 SQLite Expert 是一款功能强大的SQLite数据库管理工具&#xff0c;分为免费的个人版&#xff08;Personal Edition&#xff09;和收费的专业版&#xff08;Professional Edition&#xff09;。其核心功…...

同源策略深度防御指南:CSP 高级应用与企业微信全场景适配(含 report-uri 实战)

一、CSP 核心指令权威解析与企业微信适配 内容安全策略&#xff08;CSP&#xff09;通过Content-Security-Policy响应头实现资源加载的细粒度控制&#xff0c;其核心指令与企业微信场景强相关&#xff1a; 1.1 frame-ancestors&#xff1a;iframe 嵌入源控制 权威规范&#…...

【AGI】大模型微调技术-四大微调框架

【AGI】大模型微调技术-四大微调框架 &#xff08;1&#xff09;微调基础概念介绍1.1 微调基本概念1.2 全量微调与高效微调1.3 模型微调的优劣势分析1.4 高效微调与LoRA、QLoRA &#xff08;2&#xff09;高效微调的应用场景&#xff08;3&#xff09;流微调工具介绍3.1 unslot…...

小白编程学习之巧解「消失的数字」

一、引言&#xff1a;一个看似简单的「找不同」问题 今天遇到一道有趣的算法题&#xff1a;给定一个含 n 个整数的数组 nums&#xff0c;其中每个元素都在 [1, n] 范围内&#xff0c;要求找出所有在 [1, n] 中但未出现在数组中的数字。 这让我想起小时候玩的「找错题」游戏 —…...