0%

android 远程操作

安装软件

  1. Shizuku apk 可以通过软件本身,调用android系统命令
  2. Extinguish_0.2.5_APKPure.xapk 保证不会熄屏,断开链接
  3. Termux android上和linux上一样进行开发

连接

1
2
3
4
5
adb pair ip:port
输入配对码
-------- 后续打开蓝牙调试后,会自动连接

adb devices -l

操作

1
2
3
4
adb shell am start -n com.ss.android.article.lite/.activity.SplashActivity

提高音量
input keyevent 24

自动化-编写python脚本

1

参考

  1. 安卓无root熄屏挂机
  2. shizuku 用户手册
  3. 无人值守利器:安卓软件+Python实现手机自动化操控!
  4. shizuku 的使用
  5. Shizuku 让 Android 玩机更简单 —- Magisk

音、视频共享

待解决的问题

  1. 视频获取
  2. 视频存储
  3. 视频查看

1. 视频获取

下载软件

  1. 4K Video Downloader+
  2. ffmpeg -i m3u8 aa.mp4
  3. m3u8d gui

视频存储

  1. samba linux服务共享
  2. sshfs mac磁盘共享
  3. window 文件夹共享
  4. sshfs-win-manager 通过ssh共享

视频查看

  1. 视频加速 - 七牛云
    1
    qshell account key secret fmzh2024

docker node使用

node镜像下载

1
docker pull node:18.20.2-alpine

项目要求18以上,centos版本低需要升级lib,镜像拉取,启动容器没有cd命令、没有bash命令

node镜像二次封装 Dockerfile

1
2
3
4
5
6
7
FROM node:18.20.2-alpine

WORKDIR /home/node/app
COPY game-admin-front .
RUN chown -R node:node /home/node/app

CMD ["npm", "install"]
1
docker build -t node18 .

node npm install会报没有权限创建目录,所以要chown赋权

启动容器

1
docker run --name node18-app -dit -v /root/docker/node18/game-admin-front:/home/node/app node18

-itd保证容器常驻,不会停止,这样就保证打包能够正常执行结束

编译、打包

1
2
3
docker exec -it node18-app npm install

docker exec -it node18-app npm run build

im 系统知识整理

实现方式、对比维度 IM即时通讯开源代码 IM即时通讯自研 集成商业IM即时通讯sdk
实现难度
功能扩展性 依赖开源项目计划,相对困难 不依赖外部条件,相对简单 依赖其它厂商,难度中等
运维成本 自己运维,成本高 自己运维,成本高 不需要自己运维
上线周期
适用人群 个人体验 研发能力较强的大公司 中小型公司,个人工作室

1. im 功能要求

1.1 架构分层

服务端

账号系统、消息系统、资料系统、关系链系统、群组系统

客户端

android、ios、web、小程序、flutter

管理后台

用管理员、安全打击

1.2 产品内容

  • 1、消息传输:支持文字、图片、短语音、短视频等富媒体消息及自定义消息与自定义表情,支持保存历史漫游消息,集成消息撤回、消息转发、安全打击等扩展能力,构建稳定、便捷的消息传输通道。
  • 2、会话管理:集成 TUIKit 组件,轻松实现添加会话、会话置顶、会话列表展示,未读消息计数,历史漫游消息展示等功能。
  • 3、群组管理:支持群成员管理、群组自定义字段、群资料与群公告变更与展示、群组置顶等能力,提供私有群、公开群、聊天室、音视频聊天室等多种群组类型,满足个性化群组需要。
  • 4、资料管理:支持设置用户资料、更改头像,可配置好友关系,提供好友验证选项,适配您的业务场景

2. im 技术难点

  • 消息的可靠性、有序性。
  • 高并发场景下的消息实时推送,以及消息拉取。
  • 消息存储方案选型:使用读扩散还是写扩散。
  • 消息未读数的准确计算。
  • 群回执消息。
  • 异地多活
  • 涉及产品可使用第三方:文件存储,安全审核,消息离线推送

3. im 问题

3.1 设计阶段基本问题

  1. 用户从没有网络切换到有网络的情况下,如何第一时间把消息推送过去?
    如果同时考虑避免用户抱怨消耗太多流量和电量呢?
    —————— 不停的尝试连接网络,手机操作系统会返回网络状态的,不用你消耗流量来检测
  2. 如何处理消息后发先至的问题(A.send>B.send && A.receive<B.receive)?如何处理丢消息的情形?
    —————— 消息订阅和发布,kafka,redis,mqtt
  3. 用户在多台设备上登陆,消息同步机制如何设计?
  4. 用户数量

3.2 消息不丢、不重复、不乱序

不丢:主要靠服务端的消息暂存和SDK的ACK机制;

不重复:主要靠消息的全局唯一ID生成算法和SDK去重机制;

不乱序:主要靠服务端统一的并发排序机制。

3.3 解决数据库高并发查询慢的瓶颈

  • 弃用查询速度一般的MYSQL,选用查询速度超快的NOSQL数据库MongoDB。
  • 读写分离,写时写到主数据库,实时同步至多台从数据库,查询时选择最闲的从数据库,从而使查询压力分散到多台。
  • 分库分表,比如每一个群组是一个表,避免产生超大数据量的表,使单次查询速度保持在可控范围。
  • 冷热分离,比如单聊的数据表,可以设置热表保存数据的日期范围,半年内的数据保存到热表,半年以前的数据保存到冷表,避免数据量过于巨大。
  • 最热缓存,对于最常用的热点数据复制到Redis内存中进行查询,速度极快,避免数据库高频次的重复查询

3.4 解决聊天通讯的高并发瓶颈

  • 采用基于Protobuf的二进制字节格式,包极小,还支持压缩,使单次通讯的流量压缩至最低。
  • 采用为高并发而生的AIO框架JAVA,使单台的并发能力大幅提高,单台并发最高可达到50W左右。
  • 采用自研的聊天集群软件使聊天的压力由单台分散到多台,
    比如A登陆在服务器A,B登陆在服务器B,A给B发消息,服务器A收到,查询内存,得知B登录在服务器B上,于是转发给B服务器,服务器B就会通过与B的长连接把消息发给B;
    群聊也类似,A和B在同一群组,A在群里发了一条消息,查询内存,得知在线的群成员列表,然后给所有在线成员一一发送这条消息,注意以单聊的形式发,这样其他成员便不会重复转发这条消息

3.5 IM消息同步机制全面解析

3.6 如何优雅的实现大量离线消息的可靠投递

3.7 什么是IM系统的实时性-websocket

4. im 产品对比: 费用基础+高阶+用户规模、技术稳定性、后续运维、敏感问题???

4.1 环信: 性价比相对高

4.2 LeanCloud: 收费、稳定性差

4.3 即构科技

4.4 融云: 工单速度慢 ———————————–

4.5 云之讯: 技术支持响应挺快的

4.6 云通讯

4.7 网易云信 ———————————–

4.8 容联云: IMplus

4.9 腾讯云: 不要深度定制,升级时会死啊

4.10 视酷:

4.11 哇谷云:

4.12 Arrownock

4.13 MaxLeap

4.14 野火IM

5. im 源代码对比

5.1 MobileIMSDK c 5.3k star 1.3k fork

5.2 OpenIM go 12.2k star 2.1k fork

6. 提升IM的回复率

7. 参考

  1. 哪款即时通讯 (IM) 服务最稳定?
  2. IM app 难点
  3. 融云 RongCloud github地址
  4. IM 通常具备哪些功能
  5. 网易云信 Kit
  6. 常见即时通讯:网易IM 、腾讯IM、环信IM、融云IM、leancloud IM介绍
  7. 得物 IM架构解析

创建用户

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
adduser aaron

## 必须要有密码
passwd aaron

#vi /etc/ssh/sshd_config
#service sshd restart

## 在服务器所在用户生成密钥
ssh-keygen -t rsa -C "aaron@aaron.com"
cat id_rsa.pub > authorized_keys
chmod 600 authorized_keys

## 下载密钥id_rsa
配置ssh即可

docker 基本命令

创建mysql数据库

1
docker run --name mysql -p 3306:3306 -e MYSQL\_ROOT\_PASSWORD=123456 -d mysql

基本命令

1
2
3
4
5
6
7
8
9
# docker 开机启动
systemctl enable docker

# 容器自动重启
1. 创建时
docker run .... --restart=always

2. 更新
docker update --restart=always <Container ID>

参考

  1. centos7 安装

git的使用

git 相关命令

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
# 添加远程受控地址
git remote add github git@github.com:User/UserRepo.git

# 查看分支
git branch
# 合并dev分支到本地,变成一条提交记录
git merge --squash dev
git merge --squash -s recursive -X theirs master20231016 --allow-unrelated-histories

# 新建空分支
git checkout --orphan emptybranch
# 下载代码
git checkout -b dev github/master
# 切换分支
git switch master

# 提交
git commit -m 'init commit'

# 删除文件
git rm -rf .
# 删除分支
git branch -D branchTemp
# 删除远程分支
git push origin --delete <branchName>

# 重命名本地分支
git branch -m devel develop

# 推送分支
git push -u origin master

git 基础设置

1
2
3
4
5
6
7
### 记得去除敏感信息
git config --global user.name "你的名字或昵称"
git config --global user.email "你的邮箱"

### 记住密码 ~/.gitconfig
[credential]
helper = store

git 配置文件示例 .git/config

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
[core]
repositoryformatversion = 0
filemode = false
bare = false
logallrefupdates = true
ignorecase = true
precomposeunicode = true
[http]
proxy = http://64.00.00.26:8888
[remote "origin"]
url = http://git.xxxx.com:8888/team-kgq/kgq-xxx-website.git
fetch = +refs/heads/*:refs/remotes/origin/*
[branch "dev202310"]
remote = origin
merge = refs/heads/dev202310
[credential]
helper = store

git 冲突解决方法 覆盖本地

  1. 其他方法
  2. 合并策略
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
--------------- 重置代码 -------------------

git checkout master
git reset --hard origin/master
git pull origin master
git branch

--------------- 冲突解决方案 -----------------

git status
git diff --name-only --diff-filter=u
## 标记已解决
git add README.md
git commit -m "feat: merge test 20231018"
git push origin test

--------------- 初始工程 -------------------

git clone http://ingit.11019fe.com:8888/team-kgq/kgq-xxx-api.git

git pull

git remote add github git@github.com:team-kgq/KGQ-xxx-Api.git

git fetch github

git 删除大文件

  1. 查看大文件
    1
    git rev-list --objects --all | grep "$(git verify-pack -v .git/objects/pack/*.idx | sort -k 3 -n | tail -5 | awk '{print$1}')"
  2. 删除大文件
    1
    git filter-branch -f --prune-empty --index-filter 'git rm -rf --cached --ignore-unmatch newapi.phar' --tag-name-filter cat -- --all
  3. 推送到所有分支
    1
    git push origin --force --all

git代理

代理设置

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
# 一次性代理
git clone -c http.proxy="http://127.0.0.1:1087" https://github.com/
# 全局设置代理
git config --global http.https://github.com.proxy socks5://127.0.0.1:1086

# 取消代理
git config --global --unset http.proxy
git config --global --unset https.proxy

在 ~/.ssh/config 文件中加入以下配置:
# 必须是 github.com
Host github.com
HostName github.com
User git
# 走 HTTP 代理
# ProxyCommand socat - PROXY:127.0.0.1:%h:%p,proxyport=8080
# 走 socks5 代理
# ProxyCommand nc -v -x 127.0.0.1:1080 %h %p

代理安装

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
# 安装 tinyproxy
sudo apt install tinyproxy

# 修改配置文件
vim /etc/tinyproxy/tinyproxy.conf
# 修改端口号,尽量将该端口号修改为大于 1024,不然需要使用 root 权限才可以启动 tinyproxy
Port 8888
# 修改允许连接到 tinyproxy 的地址,如果没有特殊需求,可以直接将改行注释掉,允许所有 IP 访问
#Allow 127.0.0.1

# 启动代理服务器
service tinyproxy start

# 关闭代理服务器
service tinyproxy stop

# 重启代理服务器
service tinyproxy stop

127.0.0.1:8888

参考

  1. tinyproxy 配置 git代理服务器
  2. git 代理配置方案
  3. git 提交记录清除方案
  4. git 新建空分支
  5. git 删除大文件