【GoTeams】-5:引入Docker
本文目录
- 1. Dokcer-compose
- 回顾下Docker知识
- 编写docker-compose.yaml
- 运行docker
- 2. 部署go服务
- 编写dockerfile
1. Dokcer-compose
这里简单先用一下win版本的Docker,后期开发好了部署的时候再移植到服务器下进行docker部署。
输入命令docker-compose version
就可以看到已经装好的docker版本了,顺便装一个dockerdesktop。
回顾下Docker知识
Docker 是一个开源的应用容器引擎,它通过容器技术来实现轻量级的虚拟化。容器允许开发者将应用及其所有依赖包打包到一个可移植的容器中,以便在任何环境中一致地运行。
Docker Compose 是 Docker 官方提供的一个工具,用于定义和运行多容器的 Docker 应用。通过 Compose
,用户可以使用 YAML 文件来定义多个 Docker 容器的服务、网络、存储卷等配置,并通过一个命令(docker-compose up
)启动所有定义好的服务。
Dockerfile 是用来构建 Docker 镜像的文件,包含创建镜像的步骤和指令,可以与 Docker Compose 配合使用,在 Compose 中定义服务时使用自定义的 Docker 镜像。
编写docker-compose.yaml
目前需要部署Mysql、Redis、Etcd、User、Api服务,所以需要编写一下Docker方便以后启动。
创建一个docker-compose.yaml
文件,然后进行容器编排。
version: '3'
services:mysql:container_name: mysql8image: mysql:${MYSQL_VERSION}restart: alwaysports:- 3309:3306environment:TZ: Asia/ShanghaiMYSQL_ROOT_PASSWORD: rootMYSQL_DATABASE: msprojectvolumes:- ${MYSQL_DIR}/data:/var/lib/mysql- ${MYSQL_DIR}/conf:/etc/mysql/conf.d/- ${MYSQL_DIR}/logs:/logscommand:--default-authentication-plugin=mysql_native_password--character-set-server=utf8mb4--collation-server=utf8mb4_general_ci--explicit_defaults_for_timestamp=true--lower_case_table_names=1
这里大致讲一下进行了什么操作,回顾下之前学过的docker容器。
首先定义容器名称,container_name: mysql8
,定义了容器的名称为 mysql8,可以通过这个名称来管理MySQL容器。
image: mysql:${MYSQL_VERSION}
该配置使用指定版本的MySQL镜像,${MYSQL_VERSION}
是一个变量,表示MySQL的版本号。该变量的实际值在运行时会由环境变量提供。
3309:3306
将容器的3306端口(MySQL默认端口)映射到主机的3309端口。可以通过主机的3309端口访问容器中的MySQL服务。
MYSQL_DATABASE
: msproject 创建一个名为msproject的数据库。
${MYSQL_DIR}/data:/var/lib/mysql
将主机上 ${MYSQL_DIR}/data
目录映射到容器的 /var/lib/mysql
目录,这是MySQL存储数据的位置。
${MYSQL_DIR}/conf:/etc/mysql/conf.d/
将主机上 ${MYSQL_DIR}/conf
目录映射到容器的 /etc/mysql/conf.d/
,用于配置MySQL。
${MYSQL_DIR}/logs:/logs
将主机上 ${MYSQL_DIR}/logs
目录映射到容器的 /logs 目录,用于存储MySQL的日志。
然后是Redis的持久化。
Redis:container_name: redis6image: redis:${REDIS_VERSION}restart: alwaysvolumes:- ${REDIS_DIR}/data:/data- ${REDIS_DIR}/conf/redis.conf:/etc/redis/redis.confports:- ${REDIS_PORT}:6379command: redis-server /etc/redis/redis.conf
Etcd持久化。
Project-User:container_name: project-userimage: project-user:latestports:- 8080:8080- 8881:8881
User服务持久化。
Etcd:container_name: etcd3image: bitnami/etcd:${ETCD_VERSION}deploy:replicas: 1restart_policy:condition: on-failureenvironment:- ALLOW_NONE_AUTHENTICATION=yesprivileged: truevolumes:- ${ETCD_DIR}/data:/bitnami/etcd/dataports:- ${ETCD_PORT}:2379- 2380:2380
上面我们有一些需要环境提供的参数,这里需要在.env
环境编写。
MYSQL_VERSION=8.0.20
MYSQL_DIR=D:\GoProject\msproject-data\mysql
MYSQL_PORT=3309
REDIS_VERSION=6.2.7
REDIS_PORT=6379
REDIS_DIR=D:\GoProject\msproject-data\redis
ETCD_VERSION=3.5.6
ETCD_PORT=2379
ETCD_DIR=D:\GoProject\msproject-data\etcd
此外还需要在redis下来配置.conf文件
,D:\GoProject\msproject-data\redis\conf
# 任意ip可访问
bind 0.0.0.0
# 自定义启动端口
port 6379
# rdb或aof文件存储位置
dir /data
save 900 1
save 300 10
save 60 10000
appendonly yes
appendfilename "appendonly.aof"
运行docker
我们在项目路径下直接docker-compose up -d
,-d的作用是后台启动,然后直接等待拉取启动即可。
在desktop中能看到帮我们拉取的镜像。
以及启动的容器。
通过redis试试是否能够添加成功。
CREATE TABLE `ms_member` (`id` bigint(0) NOT NULL AUTO_INCREMENT COMMENT '系统前台用户表',`account` varchar(20) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL DEFAULT '' COMMENT '用户登陆账号',`password` varchar(64) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT '' COMMENT '登陆密码',`name` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT '' COMMENT '用户昵称',`mobile` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '手机',`realname` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '真实姓名',`create_time` varchar(30) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '创建时间',`status` tinyint(1) NULL DEFAULT 0 COMMENT '状态',`last_login_time` varchar(30) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '上次登录时间',`sex` tinyint(0) NULL DEFAULT 0 COMMENT '性别',`avatar` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT '' COMMENT '头像',`idcard` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '身份证',`province` int(0) NULL DEFAULT 0 COMMENT '省',`city` int(0) NULL DEFAULT 0 COMMENT '市',`area` int(0) NULL DEFAULT 0 COMMENT '区',`address` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '所在地址',`description` text CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL COMMENT '备注',`email` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '邮箱',`dingtalk_openid` varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '钉钉openid',`dingtalk_unionid` varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '钉钉unionid',`dingtalk_userid` varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '钉钉用户id',PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 1000 CHARACTER SET = utf8 COLLATE = utf8_general_ci COMMENT = '用户表' ROW_FORMAT = COMPACT;
我们把准备好的表,在mysql中导入。
这样服务就跑起来了,我们来看看现在etcd是否能用。
分别把user服务和api服务跑起来,然后看看前端是否能够正常请求。
验证无误,现在把mysql、redis、etcd迁移到docker上了,查询redis也能够查询到记录的验证码!
2. 部署go服务
需要把go服务也编译打包成镜像,然后运行起来。下面是一个编译的脚本。
chcp 65001
@echo off
:loop
@echo off&color 0A
cls
echo,
echo 请选择要编译的系统环境:
echo,
echo 1. Windows_amd64
echo 2. linux_amd64set/p action=请选择:
if %action% == 1 goto build_Windows_amd64
if %action% == 2 goto build_linux_amd64:build_Windows_amd64
echo 编译Windows版本64位
SET CGO_ENABLED=0
SET GOOS=windows
SET GOARCH=amd64
go build -o project-user/target/project-user.exe project-user/main.go
go build -o project-api/target/project-api.exe project-api/main.go
:build_linux_amd64
echo 编译Linux版本64位
SET CGO_ENABLED=0
SET GOOS=linux
SET GOARCH=amd64
go build -o project-user/target/project-user project-user/main.go
go build -o project-api/target/project-api project-api/main.go
在脚本下执行build
命令,然后进行编译,这里我们需要编译linux版本,放到docker中去。
编写dockerfile
写dockerfile是为了编译成镜像。
FROM alpine
WORKDIR /Initial
COPY ./target/project-user .
COPY ./config/config-docker.yaml .
RUN mkdir config && mv config-docker.yaml config/config.yaml
EXPOSE 8080 8881
ENTRYPOINT ["./project-user"]
FROM alpine
指定了构建镜像所使用的基础镜像为 alpine,这是一个非常轻量的 Linux 发行版。使用 alpine 作为基础镜像,可以减小镜像的体积,因为 alpine 镜像通常非常小,只有几十兆。
WORKDIR /Initial
设置容器内的工作目录为 /Initial。工作目录是指在容器中运行命令时默认的目录。如果该目录不存在,WORKDIR 会创建它。
COPY ./target/project-user .
将本地系统中的 ./target/project-user 文件复制到 Docker 容器中的当前工作目录(即 /Initial)中。
COPY ./config/config-docker.yaml .
将本地系统中的 ./config/config-docker.yaml 文件复制到 Docker 容器的当前工作目录(/Initial)中。此文件通常用于存储容器中应用的配置文件。
RUN mkdir config && mv config-docker.yaml config/config.yaml
,首先在在容器的当前工作目录中创建一个名为 config 的新目录。然后mv config-docker.yaml config/config.yaml:将之前复制到容器中的 config-docker.yaml 文件重命名为 config/config.yaml 并移动到新创建的 config 目录中。
EXPOSE 8080 8881
告知 Docker 容器将暴露端口 8080 和 8881,意味着容器运行时,这些端口将会被开放,并允许主机或其他容器与之通信。需要注意的是,EXPOSE 仅是一个声明,它不会自动将端口映射到主机上,实际的端口映射需要通过 docker run -p 或 docker-compose.yml
配置来完成。
ENTRYPOINT ["./project-user"]
指定容器启动时的默认命令。ENTRYPOINT 设置容器运行时的入口点,容器启动后,会执行 ./project-user 这个命令。通常,ENTRYPOINT 用来指定容器的主进程。在这里,./project-user 是容器内的一个可执行文件,它会在容器启动时运行。
然后我们需要把原来config文件复制一份改为config-docker.yaml
文件,并且需要修改配置代码。原本我们的server地址是127.0.0.1,这是本地回环地址,任何绑定在 127.0.0.1 上的服务只能在本地机器上访问,不能从其他机器或者网络中访问
需要改为0.0.0.0,绑定到 0.0.0.0 上的服务将接受来自所有网络接口(包括外部网络接口)的请求。这意味着服务不仅能接受本地机器的请求,还能接受来自其他机器或容器的请求。
server:name: "project-user"addr: "0.0.0.0:8080"
zap:debugFileName: "/logs/debug/project-debug.log"infoFileName: "/logs/info/project-info.log"warnFileName: "/logs/error/project-error.log"maxSize: 500,maxAge: 28,MaxBackups: 3
redis:host: "redis6"port: 6379password: ""db: 0
grpc:addr: "0.0.0.0:8881"name: "user"version: "1.0.0"weight: 2
etcd:addrs:- "etcd3:2379"
也就是说,在 Docker 容器中,通常容器中的服务是通过 容器的网络接口 与其他容器或主机进行通信的。如果你将应用绑定到 127.0.0.1,那么它将只能接受来自容器内部(即容器的网络栈)或者本地机器的请求,而不能接受外部请求。这对多容器应用或需要外部访问的服务(如 Web 服务、gRPC 服务等)会构成问题。
同时还要对redis和etcd的容器名设定好,已经起来的容器名称是redis6和etcd3,我们需要对应设置好。
并且在docker-compoose.yaml的文件下,加入User相关配置。
Project-User:container_name: project-userimage: project-user:latestports:- 8080:8080- 8881:8881
然后再写一个run.bat的脚本,一起来打包运行。
chcp 65001
cd project-user
docker build -t project-user:latest .
cd ..
docker-compose up -d
chcp 65001
用于 设置命令行的字符编码 为 UTF-8(65001 是 UTF-8 编码的代码页)。
docker build -t project-user:latest .
构建 Docker 镜像的命令。-t project-user:latest
:这是为构建出来的 Docker 镜像指定一个标签(-t 参数),标签为 project-user:latest。latest 是镜像的版本标签,意味着这是最新版本的镜像。.
:指的是当前目录(即 project-user 目录
)。构建过程会查找当前目录下的 Dockerfile 文件,使用 Dockerfile 中的指令
来构建镜像。
docker-compose up -d
也就是cd到上层目录之后,会根据当前目录下的 docker-compose.yml 文件来启动定义的服务。docker-compose.yml 文件通常包含一个或多个服务(如 Web 服务、数据库服务等)的配置。
然后我们来run这个bat脚本,然后等待运行即可。(这个过程需要魔法,不然会失败,这个点大家自行解决即可。)
嗯,魔法也不行,魔法只能pull,但是不能构建dockerfile,会一直提示报错,这里还需要添加docker的镜像地址。
{"builder": {"gc": {"defaultKeepStorage": "20GB","enabled": true}},"experimental": false,"registry-mirrors": ["https://docker.registry.cyou/","https://docker-cf.registry.cyou/","https://dockercf.jsdelivr.fyi/","https://docker.jsdelivr.fyi/","https://dockertest.jsdelivr.fyi/","https://mirror.aliyuncs.com/","https://dockerproxy.com/","https://mirror.baidubce.com/","https://docker.m.daocloud.io/","https://docker.nju.edu.cn/","https://docker.mirrors.sjtug.sjtu.edu.cn/","https://docker.mirrors.ustc.edu.cn/","https://mirror.iscas.ac.cn/","https://docker.rainbond.cc/","https://jq794zz5.mirror.aliyuncs.com"]}
这里我们在docker引擎里面设置即可。
现在再重新run.bat
这个脚本,就可以构造我们user的镜像,并且运行全部的docker compose了。
这个时候我们也能看到user镜像了。
现在启动就可以不用通过本地goland用go run 命令启动服务了,已经在容器里面跑起来了。
通过命令docker logs -f project-user
可以查看对应的docker容器日志。
然后在本地启动api服务,在前端发送请求,验证成功。
此时user容器的日志也已更新。
如果后续改动了代码,需要验证的话,步骤就是先运行命令build.bat
命令,build对应的linux版本。也就是先编译Go程序为linux版本。
然后运行run.bat
脚本,重新编译镜像并运行容器。这样等待重新生效即可。
后续如何在linux下查看占用的端口情况,这里有两个命令:
netstat -tulnpss -tuln
相关文章:
【GoTeams】-5:引入Docker
本文目录 1. Dokcer-compose回顾下Docker知识编写docker-compose.yaml运行docker 2. 部署go服务编写dockerfile 1. Dokcer-compose 这里简单先用一下win版本的Docker,后期开发好了部署的时候再移植到服务器下进行docker部署。 输入命令docker-compose version 就可…...
mysql的Innodb最大支持的索引长度是多少,以及索引长度怎么计算
今天正好有空,来讲个之前粉丝经常问的一个知识,就是mysql的Innodb最大支持的索引长度是多少?以及索引长度怎么计算? 一、mysql的innodb引擎,创建索引最大支持的长度是多少字节? 不墨迹,直接说…...
深入解析 configService.addListener 使用中的注意事项
在使用 Nacos 的 configService.addListener 方法进行配置监听时,为了确保程序的稳定性、可靠性以及高效性,有诸多注意事项需要我们关注。下面将对这些关键要点进行详细阐述。 一、连接稳定性 1.1 网络连接问题 Nacos 客户端与服务端通过网络进行通信&…...
数据结构和算法--仅仅用于理解里面的术语,入门级别
数据结构和算法 预先知识:java 黑马前29节 cmd命令: 文件夹路径不区分大小写 E: dir:查看所有文件 cd 目录 :进入 cd… 返回上一级 cd 目录1\目录2 cd\ 回到根目录 cls 清屏 exit 退出 打开文件夹必须用cd 查找,但是文件不用&am…...
this.$nextTick() 作用及实现原理
1、原理和作用 2、更新任务推送到微任务队列后,vue是如何知道所有的更新任务执行完成了? vue将更新任务推送给微任务队列;当更新任务执行的时候,将回调队列任务推给微任务队列;通过微任务队列的原子性和先进先出机制&…...
C#常用的循环语句
在C#中,循环是一种控制结构,用于重复执行一组语句直到满足特定条件。C#提供了几种循环结构,包括for循环、while循环、do-while循环和foreach循环。每种循环都有其特定的用途和场景。下面我将逐一介绍这些循环的用法。 一、C#循环类型 1. fo…...
Android View 设置背景方式全解析
一、整体概述 在 Android 开发中,视图(View)的背景设置是构建用户界面的重要组成部分。一个合适的背景可以提升界面的美观度,增强用户体验。从简单的纯色背景到复杂的动态效果,背景设置不仅影响界面美观,还…...
HTTP拾技杂谈
HTTP拾技杂谈 简单聊聊HTTP中的那些东西 文章目录 HTTP拾技杂谈前言HTTP协议1.请求从客户端到服务器端的4个步骤一般客户端请求如下:服务端响应如下 2.Keep-AliveHTTP方法Cookie 总结 前言 超文本传输协议(Hypertext Transfer Protocol ,HT…...
网络安全之RSA算法
1978年就出现了这种算法,它是第一个既能用于数据加密也能用于数字签名的算法。它易于理解和操作,也很流行。算法的名字以发明者的名字(RonRivest,AdiShamir和LeonardAdleman)命名。但RSA的安全性一直未能得到理论上的证…...
神经网络为什么要用 ReLU 增加非线性?
在神经网络中使用 ReLU(Rectified Linear Unit) 作为激活函数的主要目的是引入非线性,这是神经网络能够学习复杂模式和解决非线性问题的关键。 1. 为什么需要非线性? 1.1 线性模型的局限性 如果神经网络只使用线性激活函数&…...
ES10(2019)、ES11(2020) 新增特性(八)
目录 ES10(2019) Array.flat() Array.flatMap() String.trimStart()和String.trimEnd() Symbol.prototype.description Object.fromEntries() ES11(2020) Nullish coalescing Operator【空值运算符】 可选链(…...
利用MQ自动取消未支付超时订单最佳实践
一、利用MQ自动取消未支付超时订单最佳实践 1、基于 RocketMQ 延迟消息 1.1:延迟消息 当消息写入到 Broker 后,不会立刻被消费者消费,需要等待指定的时长后才可被消费处理的消息,称为延时消息。 1.2:实现流程 &am…...
1-003:MySQL 的索引类型有哪些?
MySQL 中的索引类型主要分为以下几类,每种索引都有不同的适用场景和优化查询的作用: 1. 按存储结构分类 ① 聚簇索引(Clustered Index) 特点: InnoDB 引擎的 主键索引 就是 聚簇索引。数据与索引存储在一起ÿ…...
php虚拟站点提示No input file specified时的问题及权限处理方法
访问站点,提示如下 No input file specified. 可能是文件权限有问题,也可能是“.user.ini”文件路径没有配置对,最简单的办法就是直接将它删除掉,还有就是将它设置正确 #配置成自己服务器上正确的路径 open_basedir/mnt/qiy/te…...
Unity UGUI下实现精确点击的一种方式
比如有这样一个情况,UI的显示区域是个圆形,在点击的时候也需要精确点击到这个圆形显示区域,但是UI元素的RectTransform是个矩形 1. 使用脚本修改 2. 原理探究 此脚本继承了Image组件,但是获取了自身的Collider2D,目…...
元宇宙崛起:区块链与金融科技共绘数字新世界
文章目录 一、引言二、元宇宙与区块链的深度融合三、区块链在元宇宙金融中的应用四、金融科技在元宇宙中的创新应用五、面临的挑战与机遇《区块链与金融科技》亮点内容简介获取方式 一、引言 随着科技的飞速发展,元宇宙概念逐渐走进人们的视野,成为数字…...
postgresql14编译安装脚本
#!/bin/bash####################################readme################################### #先上传postgresql源码包,再配置yum源,然后执行脚本 #备份官方yum源配置文件: #cp /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS…...
警惕AI神话破灭:深度解析大模型缺陷与禁用场景指南
摘要 当前AI大模型虽展现强大能力,但其本质缺陷可能引发系统性风险。本文从认知鸿沟、数据困境、伦理雷区、技术瓶颈四大维度剖析大模型局限性,揭示医疗诊断、法律决策等8类禁用场景,提出可信AI建设框架与用户防护策略。通过理论分析与实操案…...
1分钟看懂React的那些Hook‘s
一、useEffect的五指山 1.执行时机:组件初始化,组件更新(组件内state变化) useEffect(() > {}) 2.执行时机:组件初始化 useEffect(() > {},[]) 3.执行时机:组件初始化,依赖的状态发生变化…...
聚焦两会:科技与发展并进,赛逸展2025成创新新舞台
在十四届全国人大三次会议和全国政协十四届三次会议期间,代表委员们围绕多个关键议题展开深入讨论,为国家未来发展谋篇布局。其中,技术竞争加剧与经济转型需求成为两会焦点,将在首都北京举办的2025第七届亚洲消费电子技术贸易展&a…...
深入C语言:指针与数组的经典笔试题剖析
1. sizeof和strlen的对比 1.1 sizeof sizeof 是C语言中的一个操作符,用于计算变量或数据类型所占内存空间的大小,单位是字节。它不关心内存中存储的具体数据内容,只关注内存空间的大小。 #include <stdio.h> int main() {int a 10;…...
⚡ 回声谷即时通讯系统
基于SpringBootVue3的实时通信解决方案 🌟 核心特性 #mermaid-svg-uxEwEcjlUVI6Tjjf {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-uxEwEcjlUVI6Tjjf .error-icon{fill:#552222;}#mermaid-svg-uxEwEcjl…...
实验题目:授权及收回授权、约束、触发器
一、实验环境 实验使用普通PC机一台,MySQL数据库版本8.0.36,使用Navicat Premium 16提供图形化界面。 二、实验内容 1、数据库的账号、用户的建立、删除以及授权机制 2、数据库中数据完整性约束控制技术 3、触发器 三、具体完成情况(提…...
Spark(8)配置Hadoop集群环境-使用脚本命令实现集群文件同步
一.hadoop的运行模式 二.scp命令————基本使用 三.scp命令———拓展使用 四.rsync远程同步 五.xsync脚本集群之间的同步 一.hadoop的运行模式 hadoop一共有如下三种运行方式: 1. 本地运行。数据存储在linux本地,测试偶尔用一下。我们上一节课使用…...
c#中使用时间戳转换器
在C#中,时间戳转换器通常用于将时间戳(通常是一个表示自某一特定时间点(如1970年1月1日UTC)以来的毫秒数的长整型值)转换为DateTime对象,或者将DateTime对象转换回时间戳。以下是几种实现这一功能的方法: 1. 使用DateTime的构造函数 将时间戳转换为DateTime long tim…...
LLM中的transformer结构学习(二 完结 Multi-Head Attention、Encoder、Decoder)
文章目录 LLM中的transformer结构学习(二 完结 Multi-Head Attention、Encoder、Decoder)Self-Attention (自注意力机制)结构多头注意力 EncoderAdd & Norm 层Feed Forward 层 EncoderDecoder的第一个Multi-Head AttentionMas…...
FreeSWITCH 之 chat
要把 FreeSWITCH 之 chat 完全研究清楚,似乎不容易 发送,路由,接收 跟哪些模块有关 等等 咱一边查资料,一边整理,不着急 先看看 Kamalio 怎么发 MESSAGE loadmodule "uac.so"route[uac_send_message] {…...
本地fake server,
C# 制作的系统级tcp 重定向,整个系统只要有访问指定url,返回自定义内容到访问端。不局限在浏览器单一方面。 再者请理解这个图的含金量,服务器down机都可以模拟。 用途那就太多了,当然很多用途都不正当。嘿嘿 如果你很想要源代…...
用Deepseek写一个 HTML 和 JavaScript 实现一个简单的飞机游戏
大家好!今天我将分享如何使用 HTML 和 JavaScript 编写一个简单的飞机游戏。这个游戏的核心功能包括:控制飞机移动、发射子弹、敌机生成、碰撞检测和得分统计。代码简洁易懂,适合初学者学习和实践。 游戏功能概述 玩家控制:使用键…...
解析 SQL,就用 sqlparse!
文章目录 解析 SQL,就用 sqlparse!一、背景:为什么你需要 sqlparse?二、什么是 sqlparse?三、如何安装 sqlparse?四、简单易用的库函数1\. parse(sql)2\. format(sql, **options)3\. split(sql)4\. get_typ…...
Flask 全栈学习指南
一、Flask 基础核心 1. 核心概念与启动流程 WSGI 与 Werkzeug Flask 基于 Werkzeug 实现 WSGI 协议,处理 HTTP 请求到响应的全流程。手动实现 WSGI 应用示例:def simple_app(environ, start_response):status 200 OKheaders [(Content-type, text/pla…...
git的使用
1、git的安装(windows10) 网址:Git - Downloading Package全部默认安装就好。在任意文件夹中右击,列表中出现git即为安装成功。 2、git的基本配置 右击打开git bash设置用户信息 git config --global user.name "username…...
MQTT协议下温度数据上报观测云最佳实践
MQTT 介绍 MQTT(Message Queuing Telemetry Transport,消息队列遥测传输协议)是一种轻量级的、基于发布/订阅模式的消息传输协议,专为低带宽、高延迟或不可靠的网络环境设计,广泛应用于物联网(IoT…...
什么是Flask
Flask是Python中一个简单、灵活和易用的Web框架,适合初学者使用。它提供了丰富的功能和扩展性,可以帮助开发者快速构建功能完善的Web应用程序。 以下是Python Flask框架的一些特点和功能: Flask 是一个使用 Python 编写的轻量级 WSGI 微 Web…...
数字投屏叫号器-发射端python窗口定制
窗口 本系列前章介绍,叫号器的显示端,完成了视频音频的形成和传输的介绍。本章节开始定制小窗口。 最终实现,处于桌面最前端,发送指令,集合前篇即可完成: 处理本地text.txt更新,随之被rtsp采集…...
文本转语音-音画适时推送rtsp并播放
文本语音 rtsp适时播放叫号系统的底层逻辑 发布Linux, unix socket 和window win32做为音频源的 python10下的(ffmpeg version 7.1) 可运行版本. 这两天在弄这个,前2篇是通过虚拟声卡,达到了最简单的一个逻辑,播放文本就从声卡发声࿰…...
clickhouse修改和删除数据
标题:ClickHouse中修改和删除数据的简易指南 在大数据时代,数据库技术的发展日新月异。作为一款专为实时分析设计的列式数据库管理系统,ClickHouse因其高效的查询性能而受到欢迎。照这么推测的话,对于那些习惯于传统SQL操作&…...
2025CSP-J 冲刺训练(1):二分
2025CSP-J 冲刺训练 1 一、二分查找函数1. 头文件2. 前提条件3. 功能函数3.1 lower_bound3.2 upper_bound 二、二分答案模板1. 前提条件2. 模板 三、典型例题1. 寻找固定的和1.1 审题1.2 分析1.3 参考答案 2. Snuke Festival2.1 审题2.2 分析2.3 参考答案 四、拓展例题1. 晒衣服…...
无公网IP也能远程控制Windows:Linux rdesktop内网穿透实战
文章目录 前言1. Windows 开启远程桌面2. Linux安装rdesktop工具3. Win安装Cpolar工具4. 配置远程桌面地址5. 远程桌面连接测试6. 设置固定远程地址7. 固定地址连接测试 前言 如今远程办公已经从一种选择变成了许多企业和个人的必修课,而如何在Linux系统上高效地访…...
Win10 访问 Ubuntu 18 硬盘
目录 方案一:使用Samba共享服务Ubuntu 18 端配置Windows 10 端访问 方案二:使用 SSHFS(需在 Windows 上安装 SSH 客户端)Ubuntu 18 端配置Windows 10 端配置 方案三:使用 FTP 服务Ubuntu 18 端配置Windows 10 端访问 方…...
算法.习题篇
算法 — 地大复试 模拟 while循环和MOD循环计数 1.约瑟夫问题 http://bailian.openjudge.cn/practice/3254 using namespace std;bool isNoPeople(vector<bool> c)//判断当前数组是否一个小孩都没有了 {bool nopeople true;for (bool ival : c){if ( ival true)nop…...
upload-labs文件上传
第一关 上传一个1.jpg的文件,在里面写好一句webshell 保留一个数据包,将其中截获的1.jpg改为1.php后重新发送 可以看到,已经成功上传 第二关 写一个webshell如图,为2.php 第二关在过滤tpye的属性,在上传2.php后使用b…...
一二三应用开发平台——能力扩展:多数据源支持
背景 随着项目规模的扩大,单一数据源已无法满足复杂业务需求,多数据源应运而生。 技术选型 MyBatis-Plus 的官网提供了两种多数据源扩展插件:开源生态的 <font style"color:rgb(53, 56, 65);">dynamic-datasource</fon…...
【Python】整数除法不正确,少1的问题,以及有关浮点数转换的精度问题
1. 问题 今天在做leetcode 不同路径 的时候发现了个问题 对于m53 n4class Solution:def uniquePaths(self, m: int, n: int) -> int:rlt 1for i in range(0, m-1):rlt * (m n - 2 - i)for i in range(0, m-1):rlt / (i 1)return int(rlt)为什么这个结果是 26234class S…...
【贪心算法】简介
1.贪心算法 贪心策略:解决问题的策略,局部最优----》全局最优 (1)把解决问题的过程分成若干步 (2)解决每一步的时候,都选择当前看起来的“最优”的算法 (3)“希望”得…...
狮子座大数据分析(python爬虫版)
十二星座爱情性格 - 星座屋 首先找到一个星座网站,作为基础内容,来获取信息 网页爬取与信息提取 我们首先利用爬虫技术(如 Python 中的 requests 与 BeautifulSoup 库)获取页面内容。该页面(xzw.com/astro/leo/&…...
【商城实战(20)】商品管理功能深化实战
【商城实战】专栏重磅来袭!这是一份专为开发者与电商从业者打造的超详细指南。从项目基础搭建,运用 uniapp、Element Plus、SpringBoot 搭建商城框架,到用户、商品、订单等核心模块开发,再到性能优化、安全加固、多端适配…...
YC 孵化项目 Pinch:实时语音翻译视频会议平台;Mistral OCR:能处理多语言多模态复杂文档丨日报
开发者朋友们大家好: 这里是 「RTE 开发者日报」 ,每天和大家一起看新闻、聊八卦。 我们的社区编辑团队会整理分享 RTE(Real-Time Engagement) 领域内「有话题的 技术 」、「有亮点的 产品 」、「有思考的 文章 」、「有态度的 …...
数据库原理6
1.数据是信息的载体 2.数据库应用程序人员的主要职责:编写应用系统的程序模块 3.关系规范化理论主要属于数据库理论的研究范畴 4.数据库主要有检索和修改(包括插入,删除,更新)两大操作 5.概念模型又称为语义模型。…...
深度学习与大模型基础-向量
大家好!今天我们来聊聊向量(Vector)。别被这个词吓到,其实向量在我们的生活中无处不在,只是我们没注意罢了。 1. 向量是什么? 简单来说,向量就是有大小和方向的量。比如你从家走到学校&#x…...