amass 334edbddfd
Some checks failed
Deploy / Build (push) Failing after 1m40s
添加http文件get接口 。
2025-03-14 18:17:36 +08:00
2025-03-14 16:31:56 +08:00
2025-03-14 17:04:28 +08:00
2025-02-28 16:44:54 +00:00
2025-03-01 09:09:30 +00:00
2025-03-14 18:17:36 +08:00
2025-03-01 09:09:30 +00:00
2025-03-14 18:17:36 +08:00
2025-02-27 12:57:55 +00:00
2025-02-26 13:26:50 +00:00
2025-02-26 13:26:50 +00:00
2025-03-14 18:17:36 +08:00
2025-03-14 17:04:28 +08:00
2025-03-14 18:17:36 +08:00
2025-03-01 13:06:28 +00:00
2025-03-01 09:09:30 +00:00
2025-02-27 12:57:55 +00:00
2025-02-27 12:57:55 +00:00
2025-02-26 13:26:50 +00:00
2025-02-26 13:26:50 +00:00
2025-03-09 13:07:57 +08:00
2025-02-27 12:57:55 +00:00
2025-02-27 12:57:55 +00:00
2025-03-14 18:17:36 +08:00
2025-03-14 18:17:36 +08:00
2025-02-27 12:57:55 +00:00
2025-03-01 09:09:30 +00:00
2025-03-01 09:09:30 +00:00
2025-03-01 14:51:27 +00:00

前言

因为个人爱好,购买了云服务器,上面部署了静态博客网站,科学上网服务,内网穿透服务。

上述条件弄完之后,还剩下很多性能。所以决定自己实现一个服务器应用程序,代码比较简单,也可以说就是练练手。

访问统计

/api/v1/visit_analysis

/api/v1/most_viewed_urls

/api/v1/latest_viewed_urls

表名visit_analysis

字段名 数据类型 约束条件 解释
id INTEGER NOT NULLPRIMARY KEY 主键
url TEXT NOT NULL
visitor_uuid TEXT NOT NULL
last_user_agent TEXT NOT NULL
last_view_time INTEGER NOT NULL
page_view_count INTEGER NOT NULL
  1. 创建table visit_analysis。
  2. 插入 urlvisitor_uuidlast_user_agent last_view_time至表中如果表中已存在urlvisitor_uuid 相同的item则更新last_user_agent last_view_time并将page_view_count加1否则创建新的item并将page_view_count赋值为1。
  3. 根据url 获取 不同的visitor_uuid的个数作为访客数量统计将所有 page_view_count 累加作为访问次数统计。
  4. 将 url 的 所有 page_view_count 累加,统计出 n 个最大的记录。
  5. 将 url 的 last_view_time进行排序统计出最新的 n 个记录。
  6. 将所有记录的不同 visitor_uuid 相加作为网站总访客数将所有page_view_count相加作为网站总访问次数。

注册/登录

//接口: /api/v1/user/register

//POST Body
{
  "username": "string(6-20位字母数字组合)",
  "password": "string(8-20位需包含大小写和数字)",
  "email": "string(有效邮箱格式)"
}

// 回复
{
  "code": 200,
  "message": "注册成功",
  "data": {
    "user_id": 256
  }
}

curl -X POST \
  http://192.168.3.5:8081/api/v1/user/register \
  -H "Content-Type: application/json" \
  -d '{
    "username": "amass",
    "password": "123456",
    "email": "12345678@qq.com"
  }'
//接口: /api/v1/user/login

// POST Body
{
  "username": "string",
  "password": "string",
}

curl -v -X POST \
  http://192.168.3.5:8081/api/v1/user/login \
  -H "Content-Type: application/json" \
  -d '{
    "username": "amass",
    "password": "123456",
	"remember_me": true
  }'


{
  "code": 200,
  "message": "login success",
  "data": {
    "user_id": "U123456789"
  }
}
//接口: /api/v1/user/logout

{
  "code": 200,
  "message": "logout success",
}
//接口: /api/v1/user/verify
// Cookie: auth=<jwt_token>

{
  "code": 200,
  "message": "会话有效",
  "data": {
    "user_id": "U123456789",
    "session_expire": 1669987200
  }
}

一般在Web应用前后端实现中,如何传输账号密码以及保存和后续验证?请给出经典应用方案。

用户注册的时候前端需要把账号密码发送到后端。这里的关键是传输过程的安全所以必须用HTTPS不能是明文传输。

后端收到密码后不能直接存明文得做哈希处理并且加盐。比如用bcrypt这样的算法因为它是专门为密码存储设计的速度慢可以抵御暴力破解。盐值要每个用户独立生成这样即使两个用户密码相同哈希值也不同。

然后是登录时的验证。用户输入账号密码后前端同样通过HTTPS发送到后端。后端根据用户名找到对应的用户记录取出盐值和哈希后的密码然后用相同的算法对用户输入的密码进行哈希比较两者是否一致。如果一致就生成一个会话或者Token返回给前端比如JWT。之后的前端请求可以带着这个Token后端验证Token的有效性来处理后续请求。

表名users

字段名 数据类型 约束条件 解释
id INTEGER NOT NULL,PRIMARY KEY,AUTO_INCREMENT 主键
username TEXT UNIQUE,NOT NULL
password_hash BLOB NOT NULL
salt BLOB NOT NULL
created_at INTEGER NOT NULL

Live2D 模型添加

在 XML 配置文件定义Live2dModelsRoot 字段,值默认为 resources/live2d

模型相关文件放置在 DocumentRoot/resources/live2d下。

Wake On Lan

  1. 实现一个客户端,上线之后向服务器发送自己的状态,服务器将其作为上下线状态判断。客户端提供了
  2. Web前端可以通过 Http api 获取 上线的客户端提供了哪些 Wake on lan 服务 ,可以显示在页面上。
  3. 当web点击对应的按钮时服务器通知服务对应的客户端
  4. 客户端接收到指令后开始向该服务对应的mac进行广播。

任务清单

字段名 数据类型 约束条件 解释
id INTEGER NOT NULLPRIMARY KEY
create_time INTEGER NOT NULL
parent_id INTEGER
content VARCHAR(512) NOT NULL
finished BOOL
finished_time INTEGER

Core Dump

通过命令ulimit -a查看:

real-time non-blocking time  (microseconds, -R) unlimited
core file size              (blocks, -c) 0
data seg size               (kbytes, -d) unlimited
scheduling priority                 (-e) 0
file size                   (blocks, -f) unlimited
pending signals                     (-i) 6846
max locked memory           (kbytes, -l) 228312
max memory size             (kbytes, -m) unlimited
open files                          (-n) 65535
pipe size                (512 bytes, -p) 8
POSIX message queues         (bytes, -q) 819200
real-time priority                  (-r) 0
stack size                  (kbytes, -s) 8192
cpu time                   (seconds, -t) unlimited
max user processes                  (-u) 6846
virtual memory              (kbytes, -v) unlimited
file locks                          (-x) unlimited

core file size这一项为0说明不生成core dump文件。

/etc/profile里面加入

ulimit -c unlimited
sysctl -w kernel.core_pattern=core_%t_%s_%d_%e

查看帮助man 5 core

微信公众号对接

  1. 公众号管理网页:设置与开发→基本配置→服务器配置。
  2. 由于使用的是测试公众号,因此只能够接受消息,微信服务器会将该信息发送至我们的服务器,然后我们可以对该消息进行回复,随后该连接将被关闭。
stateDiagram-v2
[*] --> Idle

Idle --> WaitSetAlarmClock : input 1
WaitSetAlarmClock --> Idle : process input

Idle --> WaitSetText : input 2
WaitSetText --> Idle : process input

Idle --> Idle : not found

修改历史

2025/02/28

  1. 重新新建项目,只存放服务器业务相关代码和文件。
  2. 去除Web Toolkit以后不再使用它了。

2021/09/03

  1. 通过阿里云申请免费SSL证书放置cert目录中。
  2. 修改conf/nginx.conf文件使http全部重定向至https。
Description
No description provided
Readme 3.5 MiB
Languages
C++ 96.8%
CMake 1.9%
Shell 1%
C 0.3%