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

Windows配置grpc

Windows配置grpc

  • 方法一
    • 1. 使用git下载grph
      • 下载速度慢可以使用国内镜像
      • 1.1 更新子模块
    • 2. 使用Cmake进行编译
      • 2.1 GUI编译
      • 2.2 命令行直接编译
    • 3. 使用Visual Studio 生成解决方法
  • 方法二
    • 1. 安装 vcpkg
    • 3.配置vckg的环境变量
    • 2. 使用 vcpkg 安装 gRPC
    • 3. 安装 Protobuf
    • 4. 配置 CMake
    • 5. 让 vcpkg 自动集成
    • 6. 编译 gRPC 项目
  • 测试是否安装成功
  • Visual Studio 配置 grpc
    • 第一个grpc demo
      • 1. 创建demo.proto文件,写入一下内容:
      • 2. 编译demo.proto文件,生成的proc.exe生成proto的头文件和源文件
      • 3. 生成grpc类需要的pb文件,因为要序列化数据。
      • 5. 分别建立server和client的项目
      • 4. 将生成的proto的头文件和源文件,grpc类需要的pb文件拷贝到server和client的项目

方法一

1. 使用git下载grph

git clone -b v1.70.0 --recurse-submodules https://github.com/grpc/grpc.git
# 指定版本下载
# git clone -b v1.41.0 https://github.com/grpc/grpc

下载速度慢可以使用国内镜像

git clone --recurse-submodules https://gitclone.com/github.com/grpc/grpc.git

1.1 更新子模块

git submodule update --init --recursive

2. 使用Cmake进行编译

2.1 GUI编译

选自己的vs版本
默认设置 (可修改文件存放位置)
默认设置

2.2 命令行直接编译

mkdir -p cmake/build
cd cmake/build
cmake ../..

3. 使用Visual Studio 生成解决方法

打开项目中
在这里插入图片描述
右击重新生成解决方法
在这里插入图片描述

方法二

1. 安装 vcpkg

git clone https://github.com/microsoft/vcpkg.git
cd vcpkg
bootstrap-vcpkg.bat

3.配置vckg的环境变量

setx Path "%Path%;C:\new_path"

2. 使用 vcpkg 安装 gRPC

vcpkg install grpc:x64-windows

3. 安装 Protobuf

vcpkg install protobuf:x64-windows

4. 配置 CMake

在 CMakeLists.txt 中添加:

find_package(Protobuf REQUIRED)
find_package(gRPC CONFIG REQUIRED)add_executable(my_server server.cpp)
target_link_libraries(my_server PRIVATE gRPC::grpc++ protobuf::libprotobuf)

5. 让 vcpkg 自动集成

vcpkg integrate install

6. 编译 gRPC 项目

mkdir build && cd build
cmake .. -DCMAKE_TOOLCHAIN_FILE=D:/vcpkg/scripts/buildsystems/vcpkg.cmake
# 生成Release版本:cmake --build . --config Release -j 4
cmake --build . 

测试是否安装成功

进入 示例目录 并运行 greeter_server 和 greeter_client:

cd examples/cpp/helloworld

如果你使用 CMake:

mkdir build && cd build
cmake ..
make -j		# 或者使用VS生成解决方法

如果你使用 vcpkg:

mkdir build && cd build
cmake .. -DCMAKE_TOOLCHAIN_FILE=D:/vcpkg/scripts/buildsystems/vcpkg.cmake
# 生成Release版本:cmake --build . --config Release -j 4
cmake --build .		# # 或者使用VS生成解决方法

运行 gRPC 示例

cd Debug
./greeter_server
./greeter_client

Visual Studio 配置 grpc

  1. 配置包含目录
    在这里插入图片描述
  2. 配置库目录
    在这里插入图片描述
  3. 配置依赖项
    在这里插入图片描述
abseil_dll.lib
absl_decode_rust_punycode.lib
absl_demangle_rust.lib
absl_flags_commandlineflag.lib
absl_flags_commandlineflag_internal.lib
absl_flags_config.lib
absl_flags_internal.lib
absl_flags_marshalling.lib
absl_flags_parse.lib
absl_flags_private_handle_accessor.lib
absl_flags_program_name.lib
absl_flags_reflection.lib
absl_flags_usage.lib
absl_flags_usage_internal.lib
absl_log_flags.lib
absl_poison.lib
absl_utf8_for_code_point.lib
cares.lib
address_sorting.lib
gpr.lib
grpc.lib
grpc_authorization_provider.lib
grpc_plugin_support.lib
grpc_unsecure.lib
grpc++.lib
grpc++_alts.lib
grpc++_error_details.lib
grpc++_reflection.lib
grpc++_unsecure.lib
grpcpp_channelz.lib
upb_base_lib.lib
upb_json_lib.lib
upb_mem_lib.lib
upb_message_lib.lib
upb_mini_descriptor_lib.lib
upb_textformat_lib.lib
upb_wire_lib.lib
re2.lib
zlibd.lib
libprotobufd.lib
libprotobuf-lited.lib
libprotocd.lib

第一个grpc demo

1. 创建demo.proto文件,写入一下内容:

syntax = "proto3";
package hello;
service Greeter {rpc SayHello (HelloRequest) returns (HelloReply) {}
}
message HelloRequest {string message = 1;
}
message HelloReply {string message = 1;
}

2. 编译demo.proto文件,生成的proc.exe生成proto的头文件和源文件

protoc  -I="." --grpc_out="." --plugin=protoc-gen-grpc="D:\OpenSource\vcpkg-2025.01.13\packages\grpc_x64-windows\tools\grpc\grpc_cpp_plugin.exe" "demo.proto"

3. 生成grpc类需要的pb文件,因为要序列化数据。

protoc  -I="." --grpc_out="." "demo.proto"

5. 分别建立server和client的项目

server.cpp

#include <iostream>
#include <memory>
#include <string>
#include <grpcpp/grpcpp.h>
#include "D:\Workshops\vs_shop\grpc_learning\demo_server\demo.grpc.pb.h"using grpc::Server;
using grpc::ServerBuilder;
using grpc::ServerContext;
using grpc::Status;
using hello::HelloRequest;
using hello::HelloReply;
using hello::Greeter;
// Logic and data behind the server's behavior.
class GreeterServiceImpl final : public Greeter::Service {Status SayHello(ServerContext* context, const HelloRequest* request,HelloReply* reply) override {std::string prefix("llfc grpc server has received :  ");reply->set_message(prefix + request->message());return Status::OK;}
};
void RunServer() {std::string server_address("127.0.0.1:50051");GreeterServiceImpl service;ServerBuilder builder;// Listen on the given address without any authentication mechanism.// 监听给定的地址builder.AddListeningPort(server_address, grpc::InsecureServerCredentials());// Register "service" as the instance through which we'll communicate with// clients. In this case it corresponds to an *synchronous* service.builder.RegisterService(&service);// Finally assemble the server.std::unique_ptr<Server> server(builder.BuildAndStart());std::cout << "Server listening on " << server_address << std::endl;// Wait for the server to shutdown. Note that some other thread must be// responsible for shutting down the server for this call to ever return.server->Wait();
}
int main(int argc, char** argv) {RunServer();return 0;
}

client.cpp

#include <string>
#include <iostream>
#include <memory>
#include <grpcpp/grpcpp.h>
#include "D:\Workshops\vs_shop\grpc_learning\demo_server\demo.grpc.pb.h"
using grpc::ClientContext;
using grpc::Channel;
using grpc::Status;
using hello::HelloReply;
using hello::HelloRequest;
using hello::Greeter;
// static method : Greeter::NewStub
class FCClient {
public:FCClient(std::shared_ptr<Channel> channel):stub_(Greeter::NewStub(channel)) {}std::string SayHello(std::string name) {ClientContext context;HelloReply reply;HelloRequest request;request.set_message(name);Status status = stub_->SayHello(&context, request, &reply);if (status.ok()) {return reply.message();}else {return "failure " + status.error_message();}}
private:std::unique_ptr<Greeter::Stub> stub_;
};
int main(int argc, char* argv[]) {auto channel = grpc::CreateChannel("127.0.0.1:50051", grpc::InsecureChannelCredentials());FCClient client(channel);// block until get result from RPC serverstd::string result = client.SayHello("hello , llfc.club !");printf("get result [%s]\n", result.c_str());std::getchar();return 0;
}

4. 将生成的proto的头文件和源文件,grpc类需要的pb文件拷贝到server和client的项目

server项目
在这里插入图片描述
client的项目
在这里插入图片描述

相关文章:

Windows配置grpc

Windows配置grpc 方法一1. 使用git下载grph下载速度慢可以使用国内镜像1.1 更新子模块 2. 使用Cmake进行编译2.1 GUI编译2.2 命令行直接编译 3. 使用Visual Studio 生成解决方法 方法二1. 安装 vcpkg3.配置vckg的环境变量2. 使用 vcpkg 安装 gRPC3. 安装 Protobuf4. 配置 CMake…...

【学习笔记】深入理解Java虚拟机学习笔记——第2章 Java内存区域与内存溢出异常

第2章 Java内存区域与内存溢出异常 2.1 概述 略 2.2 运行时数据区域 2.2.1 程序计数器 线程私有&#xff0c;记录执行的字节码位置 2.2.2 Java 虚拟机栈 线程私有&#xff0c;存储一个一个的栈帧&#xff0c;通过栈帧的出入栈来控制方法执行。 -栈帧&#xff1a;对应一个…...

数字智慧方案6189丨智慧应急综合解决方案(46页PPT)(文末有下载方式)

资料解读&#xff1a;智慧应急综合解决方案 详细资料请看本解读文章的最后内容。 在当前社会环境下&#xff0c;应急管理的重要性愈发凸显。国务院发布的《“十四五” 国家应急体系规划》以及 “十四五” 智慧应急专项规划&#xff0c;明确了应急管理体系建设的方向和重点&…...

解决 3D Gaussian Splatting 中 SIBR 可视化组件报错 uv_mesh.vert 缺失问题【2025最新版!】

一、&#x1f4cc; 引言 在使用 3D Gaussian Splatting&#xff08;3DGS&#xff09;进行三维重建和可视化的过程&#xff0c;SIBR_gaussianViewer_app 是一款官方推荐的本地可视化工具&#xff0c;允许我们在 GPU 上实时浏览重建结果。然而&#xff0c;许多用户在启动该工具时…...

见多识广4:Buffer与Cache,神经网络加速器的Buffer

目录 前言传统意义上的Buffer与Cache一言以蔽之定义与主要功能BufferCache 数据存储策略二者对比 神经网络加速器的bufferInput BufferWeight BufferOutput Buffer与传统buffer的核心区别总结 前言 知识主要由Qwen和Kimi提供&#xff0c;我主要做笔记。 参考文献&#xff1a; …...

微服务中组件扫描(ComponentScan)的工作原理

微服务中组件扫描(ComponentScan)的工作原理 你的问题涉及到Spring框架中ComponentScan的工作原理以及Maven依赖管理的影响。我来解释为什么能够扫描到common模块的bean而扫描不到其他模块的bean。 根本原因 关键在于**类路径(Classpath)**的包含情况&#xff1a; Maven依赖…...

C++之类和对象基础

⾯向对象三⼤特性&#xff1a;封装、继承、多态 类和对象 一.类的定义1. 类的定义格式2.类域 二.实例化1.对象2.对象的大小 三.this指针 在 C 的世界里&#xff0c;类和对象构成了面向对象编程&#xff08;Object-Oriented Programming&#xff0c;OOP&#xff09;的核心框架&…...

【DIY小记】新手小白超频遇到黑屏问题解决分享

最近玩FPS游戏的时候&#xff0c;发现以前一顿操作超频之后的电脑&#xff0c;有一定概率会出问题。具体表现比如一种是&#xff0c;电脑显示器直接黑屏&#xff0c;所有键盘交互没有响应&#xff0c;只能直接重启电脑&#xff0c;还有一种是偶现卡顿&#xff0c;直接死机或者卡…...

虚幻引擎 IK Retargeter 编辑器界面解析

我来为您详细解释这段关于虚幻引擎IK Retargeter编辑器界面的文本&#xff0c;它描述了动画重定向系统的核心组件和工作原理。 Retarget Phases (重定向阶段) 这部分介绍了动画重定向过程中的三个关键计算阶段&#xff0c;每个阶段都可以单独启用或禁用&#xff0c;这对于调试…...

uc系统中常用命令、标准C库函数和系统调用

目录 一、常用命令 env echo $name 键值 export name unset name gcc -c xxx.c ar 命令 ar -r libxxx.a xxx1.o xxx2.o gcc -c -fpic xxx.c gcc -shared -fpic xxx1.c xxx2.c -o libxxx.so kill [-信号] PID kill -l 软链接&#xff1a;ln -s xxx yyy 硬链接&…...

OpenHarmony - 驱动使用指南,HDF驱动开发流程

OpenHarmony - HDF驱动开发流程 概述 HDF&#xff08;Hardware Driver Foundation&#xff09;驱动框架&#xff0c;为驱动开发者提供驱动框架能力&#xff0c;包括驱动加载、驱动服务管理、驱动消息机制和配置管理。并以组件化驱动模型作为核心设计思路&#xff0c;让驱动开发…...

C++负载均衡远程调用学习之UDP SERVER功能

目录 1.LARSV0.9-配置功能 2.LARSV0.10-upd-server的实现 3.LARSV0.10-udp-client的实现 1.LARSV0.9-配置功能 2.LARSV0.10-upd-server的实现 3.LARSV0.10-udp-client的实现...

word交叉引用图片、表格——只引用编号的处理方法

交叉引用图片/表格 在“引用”选项卡上的“题注”组中&#xff0c;单击“插入题注”。勾选【从题注中排除标签】。在文中插入题注。 【注 意】 这时候插入的题注只有编号项了。然后手动打上标签【TABLE】&#xff0c;并在标签和编号项之间加上【样式分隔符&#xff0c;AltCt…...

平台介绍-开放API接口-鉴权

平台的理念是一个组织内部只建一套系统。但是现实情况是&#xff0c;组织内部已经建立了很多系统&#xff0c;是不能一次性替代的&#xff0c;只能先搭起平台&#xff0c;然后逐步开始替换。这样就不可避免的存在其他系统和平台进行交互的问题。 平台为此设计了开放API接口。其…...

【Bootstrap V4系列】 学习入门教程之 组件-警告框(Alert)

Bootstrap V4 学习入门教程之 组件-警告框&#xff08;Alert&#xff09; 警告框&#xff08;Alert&#xff09;一、示例二、链接的颜色三、添加其它内容四、关闭警告框 通过 JavaScript 触发行为触发器本组件所暴露的事件 警告框&#xff08;Alert&#xff09; 通过精炼且灵活…...

【服务器通信-socket】——int socket(int domain, int type, int protocol);

#include <sys/types.h> #include <sys/socket.h> int socket(int domain, int type, int protocol); domain: AF_INET 这是大多数用来产生socket的协议&#xff0c;使用TCP或UDP来传输&#xff0c;用IPv4的地址 AF_INET6 与上面类似&#xff0c;不过是来用IPv6的地…...

洛谷P1014(Cantor 表[NOIP 1999 普及组])题解

题目大意&#xff1a;求Cantor表&#xff08;按照Z字形排列&#xff08;如第一项是1/1&#xff0c;然后是1/2&#xff0c;2/1&#xff0c;3/1&#xff0c;2/2&#xff09;&#xff09;的第N项。 那么&#xff0c;我们需要找出Cantor表的排列规律。根据题目中的Z字形描述&#x…...

【愚公系列】《Manus极简入门》012-自我认知顾问:“内在探索向导”

&#x1f31f;【技术大咖愚公搬代码&#xff1a;全栈专家的成长之路&#xff0c;你关注的宝藏博主在这里&#xff01;】&#x1f31f; &#x1f4e3;开发者圈持续输出高质量干货的"愚公精神"践行者——全网百万开发者都在追更的顶级技术博主&#xff01; &#x1f…...

密码学_加密

目录 密码学 01 密码基础进制与计量 02 加解密基操 替换 移位 编码 编码 置换 移位 加解密强度 03 对称加密算法(私钥) 工作过程 缺陷 对称加密算法列举&#xff1f; DES DES算法架构 DES分组加密公式 DES中ECB-CBC两种加密方式 3DES 由于DES密钥太短&#xf…...

w317汽车维修预约服务系统设计与实现

&#x1f64a;作者简介&#xff1a;多年一线开发工作经验&#xff0c;原创团队&#xff0c;分享技术代码帮助学生学习&#xff0c;独立完成自己的网站项目。 代码可以查看文章末尾⬇️联系方式获取&#xff0c;记得注明来意哦~&#x1f339;赠送计算机毕业设计600个选题excel文…...

云盘系统设计

需求背景 网盘面向大量C端用户 1000w用户 DAU 20% 每天10次 QPS: 1000w * 0.2 * 10 / 100k 500 峰值估计&#xff1a;500 * 5 2500 功能需求 支持上传&#xff0c;下载&#xff0c;多端共同在线编辑&#xff0c;数据冲突处理 非功能需求 1.latency 20s左右 2.可用性与…...

西电雨课堂《知识产权法》课后作业答案

目录 第 1 章 1.1 课后作业 1.2 课后作业 第 2 章 2.1 课后作业 2.2 课后作业 2.3 课后作业 2.4 课后作业 2.5 课后作业 2.6 课后作业 2.7 课后作业 2.8 课后作业 2.9 课后作业 2.10 课后作业 第 3 章 3.1 课后作业 3.2 课后作业 3.3 课后作业 3…...

通信协议记录仪-产品规格书

以下是为 ​​通信协议记录仪(ProtoLogger Pro)​​ 的​​详细产品规格书​​,覆盖 ​​技术细节、场景需求、竞品差异化​​,确保可作为产品开发、市场营销及竞品分析的核心依据。 ​​通信协议记录仪产品规格书​​ ​​产品名称​​:ProtoLogger Pro(中文名称:蹲守…...

订单系统冷热分离方案:优化性能与降低存储成本

随着时间推移&#xff0c;订单数据不断积累。在电商平台或者服务型应用中&#xff0c;订单数据是核心数据之一。然而&#xff0c;随着数据量的增长&#xff0c;如何高效存储、管理和查询这些数据成为了系统架构设计的重要问题。在大多数情况下&#xff0c;订单数据的处理不仅涉…...

数据结构学习笔记

第 1 章 绪论 【考纲内容】 &#xff08;一&#xff09;数据结构的基本概念 &#xff08;二&#xff09;算法的基本概念 算法的时间复杂度和空间复杂度 【知识框架】 【复习提示】 本章内容是数据结构概述&#xff0c;并不在考研大纲中。读者可通过对本章的学习&#xff0c;初步…...

读懂 Vue3 路由:从入门到实战

在构建现代化单页应用&#xff08;SPA&#xff09;时&#xff0c;Vue3 凭借其简洁高效的特性成为众多开发者的首选。 而 Vue3 路由&#xff08;Vue Router&#xff09;则是 Vue3 生态中不可或缺的一部分&#xff0c;它就像是单页应用的 “导航地图”&#xff0c;帮助用户在不同…...

Aws S3上传优化

上传大约 3.4GB 的 JSON 文件&#xff0c;zip算法压缩后约为 395MB&#xff0c;上传至 S3 效率优化&#xff0c;有一些优化方案可以提高上传速率。下面是几种可能的优化方式&#xff0c;包括选择压缩算法、调整上传方式、以及其他可能的方案。 方案 1. 选择更好的压缩算法 压…...

Python 数据智能实战 (8):基于LLM的个性化营销文案

写在前面 —— 告别群发轰炸,拥抱精准沟通:用 LLM 为你的用户量身定制营销信息 在前面的篇章中,我们学习了如何利用 LLM 增强用户理解(智能分群)、挖掘商品关联(语义购物篮)、提升预测精度(融合文本特征的流失预警)。我们不断地从数据中提取更深层次的洞察。 然而,…...

html:table表格

表格代码示例&#xff1a; <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>Title</title> </head> <body><!-- 标准表格。 --><table border"5"cellspacing&qu…...

2.maven 手动安装 jar包

1.背景 有的时候&#xff0c;maven仓库无法下载&#xff0c;可以手动安装。本文以pentaho-aggdesigner-algorithm-5.1.5-jhyde.jar为例。 2.预先准备 下载文件到本地指定位置。 2.1.安装pom mvn install:install-file \-Dfile/home/wind/tmp/pentaho-aggdesigner-5.1.5-jh…...

C++ unordered_set unordered_map

上篇文章我们讲解了哈希表的实现&#xff0c;这节尝试使用哈希表来封装unordered_set/map 1. unordered_set/map的框架 封装的过程实际上与set/map类似&#xff0c;在unordered_set/map层传递一个仿函数&#xff0c;用于取出key值 由于我们平常使用的都是unordered_set/map&…...

第37课 绘制原理图——放置离页连接符

什么是离页连接符&#xff1f; 前边我们介绍了网络标签&#xff08;Net Lable&#xff09;&#xff0c;可以让两根导线“隔空相连”&#xff0c;使原理图更加清爽简洁。 但是网络标签的使用也具有一定的局限性&#xff0c;对于两张不同Sheet上的导线&#xff0c;网络标签就不…...

< 自用文 Texas style Smoker > 美式德克萨斯烟熏炉 从设计到实现 (第一部分:烹饪室与燃烧室)

原因&#xff1a; 没钱还馋&#xff01; 但有手艺。 预计目标&#xff1a; 常见的两种偏置式烟熏炉&#xff08;Offset Smoker&#xff09; 左边边是标准偏置式&#xff08;Standard Offset&#xff09;&#xff0c;右边是反向流动式&#xff08;Reverse Flow Offset&#x…...

【现代深度学习技术】现代循环神经网络03:深度循环神经网络

【作者主页】Francek Chen 【专栏介绍】 ⌈ ⌈ ⌈PyTorch深度学习 ⌋ ⌋ ⌋ 深度学习 (DL, Deep Learning) 特指基于深层神经网络模型和方法的机器学习。它是在统计机器学习、人工神经网络等算法模型基础上&#xff0c;结合当代大数据和大算力的发展而发展出来的。深度学习最重…...

AimRT从入门到精通 - 03Channel发布者和订阅者

刚接触AimRT的小伙伴可能会疑惑&#xff0c;这个Channel和RPC&#xff08;后面讲的&#xff09;到底是什么呢&#xff1f; 但是当我们接触了之后&#xff0c;就会发现&#xff0c;其本质类似ROS的Topic通信&#xff01;&#xff08;其本质基于发布订阅模型&#xff09; 接下来…...

MySQL初阶:数据库基础,数据库和表操作,数据库中的数据类型

1.数据库基础 数据库是一个客户端——服务器结构的程序。 服务器是真正的主体&#xff0c;负责保存和管理数据&#xff0c;数据都存储在硬盘上 数据库处理的主要内容是数据的存储&#xff0c;查找&#xff0c;修改&#xff0c;排序&#xff0c;统计等。 关系型数据库&#…...

AI 驱动的智能交通系统:从拥堵到流畅的未来出行

最近研学过程中发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击链接跳转到网站人工智能及编程语言学习教程。读者们可以通过里面的文章详细了解一下人工智能及其编程等教程和学习方法。下面开始对正文内容的…...

Python清空Word段落样式的方法

在 Python 中&#xff0c;你可以使用 python-docx 库来操作 Word 文档&#xff0c;包括清空段落样式。以下是几种清空段落样式的方法&#xff1a; 方法一&#xff1a;直接设置段落样式为"Normal" from docx import Documentdoc Document(your_document.docx) # 打…...

[javaEE]网络编程

目录 socket对tcp ServerSocket ServerSocket 构造方法&#xff1a; ServerSocket 方法&#xff1a; socket 实现回显服务器和客户端 由于我们之前已经写多了socket对udq的实现&#xff0c;所以我们这节&#xff0c;主要将重心放在Tcp之上 socket对tcp ServerS…...

组件通信-mitt

mitt&#xff1a;与消息订阅与发布&#xff08;pubsub&#xff09;功能类似&#xff0c;可以实现任意组件间通信。 第一步&#xff1a;安装mitt npm i mitt 第二步&#xff1a;新建文件&#xff1a;src\utils\emitter.ts // 引入mitt import mitt from "mitt"; //调…...

微软发布了最新的开源推理模型套件“Phi-4-Reasoning

每周跟踪AI热点新闻动向和震撼发展 想要探索生成式人工智能的前沿进展吗&#xff1f;订阅我们的简报&#xff0c;深入解析最新的技术突破、实际应用案例和未来的趋势。与全球数同行一同&#xff0c;从行业内部的深度分析和实用指南中受益。不要错过这个机会&#xff0c;成为AI领…...

Socat 用法详解:网络安全中的瑞士军刀

Socat 用法详解&#xff1a;网络安全中的强大工具 引言 socat&#xff08;SOcket CAT&#xff09;是一款功能强大的命令行工具&#xff0c;被誉为“网络瑞士军刀”&#xff0c;广泛应用于数据传输、端口转发和网络调试等场景。它支持多种协议和数据通道&#xff08;如文件、管…...

精益数据分析(36/126):SaaS商业模式的指标动态与实践案例

精益数据分析&#xff08;36/126&#xff09;&#xff1a;SaaS商业模式的指标动态与实践案例 在创业与数据分析的学习道路上&#xff0c;我们不断探索各种商业模式的核心要点。今天&#xff0c;依旧怀揣着和大家共同进步的想法&#xff0c;深入研读《精益数据分析》中SaaS商业…...

2.LED灯的控制和按键检测

目录 STM32F103的GPIO口 GPIO口的作用 GPIO口的工作模式 input输入检测 -- 向内检测 output控制输出 -- 向外输出 寄存器 寄存器地址的确定 配置GPIO口的工作模式 时钟的开启和关闭 软件编程驱动 LED 灯 硬件 软件 软件编程驱动 KEY 按键 硬件 软件 按键消抖 代码 STM32F…...

架构师面试(三十八):注册中心架构模式

题目 在微服务系统中&#xff0c;当服务达到一定数量时&#xff0c;通常需要引入【注册中心】组件&#xff0c;以方便服务发现。 大家有没有思考过&#xff0c;注册中心存在的最根本的原因是什么呢&#xff1f;注册中心在企业中的最佳实践是怎样的&#xff1f;注册中心的服务…...

Go-web开发之帖子功能

帖子功能 route.go r.Use(middleware.JWTAuthMiddleware()){r.POST("/post", controller.CreatePostHandler)r.GET("/post/:id", controller.GetPostDetailHandler)}post.go 定义帖子结构 type Post struct {Id int64 json:"id" …...

MYSQL-设计表

一.范式 数据库的范式是⼀组规则。在设计关系数据库时&#xff0c;遵从不同的规范要求&#xff0c;设计出合理的关系型数 据库&#xff0c;这些不同的规范要求被称为不同的范式。 关系数据库有六种范式&#xff1a;第⼀范式&#xff08;1NF&#xff09;、第⼆范式&#xff08;…...

动态思维——AI与思维模型【91】

一、定义 动态思维思维模型是一种强调在思考问题和分析情况时&#xff0c;充分考虑到事物的变化性、发展性和相互关联性&#xff0c;不局限于静态的、孤立的视角&#xff0c;而是以发展变化的眼光看待事物&#xff0c;能够根据不同时间、环境和条件的变化&#xff0c;灵活调整…...

文献阅读篇#7:5月一区好文阅读,BFA-YOLO,用于建筑信息建模!(下)

期刊简介&#xff1a;《Advanced Engineering Informatics》创刊于2002年&#xff0c;由Elsevier Ltd出版商出版&#xff0c;出版周期Quarterly。该刊已被SCIE数据库收录&#xff0c;在中科院最新升级版分区表中&#xff0c;该刊分区信息为大类学科工程技术1区&#xff0c;2023…...

【Linux网络编程】http协议的状态码,常见请求方法以及cookie-session

本文专栏&#xff1a;Linux网络编程 目录 一&#xff0c;状态码 重定向状态码 1&#xff0c;永久重定向&#xff08;301 Moved Permanently&#xff09; 2&#xff0c;临时重定向&#xff08;302 Found&#xff09; 二&#xff0c;常见请求方法 1&#xff0c;HTTP常见Hea…...