开源:微型后端服务器——C语言实战练习

一、前言

  软件使用纯C环境编写,没有调用第三方库,直接使用交叉编译工具编译,就可以移植到嵌入式linux环境中。软件在TCP协议基础上简易实现了HTTP的GET和POST方法,还有websocket协议。服务器增加了线程池和数据库连接池功能,提高系统的并发性;服务器还包含日志功能,记录程序运行时的状态。开源地址:https://github.com/jiangbfy/chttp-server

二、HTTP功能

  • GET方法
    • 查询用户信息
      url:/user/info
      用postman测试结果如下:
      图1 查询用户信息
    • 执行uname命令
      url:/cmd/uname
      图2 获取服务器信息
  • POST方法
    • 添加用户
      url:/user/add
      parameter:{“user”: “rk3588”,“passwd”: “rk3588”,“time”: “2024-7-5 12:22:46”}
      用postman测试结果如下:
      图3 添加用户
      再次查询用户信息,即可看到最新一条刚刚新增的数据:
      图4 查询用户信息

二、WebSocket功能

  websocket功能测试本人在一个新工程中导入reconnecting-websocket模块,然后连接服务器,将接收到的数据打印到控制台:

图5 前端websocket测试代码
测试结果如下:
图6 前端websocket测试结果

三、日志功能

  日志分为4个等级:debug,info,warn和error。日志文件以XX_XX_XX的年月日形式保存,保存到工作路径的logs目录下。

图7 日志记录

四、其他

  • 程序使用了线程池,提高系统响应速度
  • 使用二叉树管理tcp连接,键值是sockfd,提高查找速度
  • 使用epoll(IO多路复用),socket设置为非阻塞
  • 使用数据库连接池,因为sqlite3直接对数据库文件进行操作,不支持多个连接,所以数量为1

五、编译运行

  • 服务器环境
    • ubuntu18.04(可交叉编译,arm开发板中运行)
  • 测试环境
    • postman
  • 数据库初始化
CREATE TABLE userinfo (
  id INTEGER PRIMARY KEY AUTOINCREMENT,
  user TEXT NOT NULL,
  passwd TEXT NOT NULL,
  time TEXT NOT NULL
);
  • 配置
    • 在main.c中配置服务器端口号,数据库名和线程池数量
  • 编译
    • 运行make
    • 新建目录logs
    • 运行./server
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值