Skip to content

jarrodcal/Backend-Server

Repository files navigation

A Simple Server Demo

一个简单的后台网络服务样例,未借助第三方库(除glibc)。功能是接收客户端连接,访问Redis获得数据直接返回给客户端。

设计思想:

  • 采用Master+Workers+辅助线程的架构,Master线程接收客户端连接,Workers处理和客户端的实际交互,辅助线程包含写日志,查看系统状态。
  • 采用Reactor+半同步半异步的非阻塞的模式,EPOLL边缘触发。
  • 系统包含线程架构,缓冲区,网络连接,日志,和Redis资源长连接模块, 运用到哈希表和链表基本数据结构,简单可依赖。
  • 访问Redis为长连接且定时查看连接状态,定时发送心跳包,未采用第三方客户端和Redis通信,直接解析redis通信协议。

详细说明:

  • 功能: 客户端输入uid,服务端输出uid$gdid
  • 协议:文本协议,"$(len)\r\n(uid)"
  • 流程: 每一次客户端请求创建一个连接,并保存在哈希表中(方便后续系统拓展),构造reids协议异步请求,获得数据后从哈希表中找到连接返回给客户端
  • 例子:输入:$9\r\n123456789, 输出:123456789$adfa899ad2,同时返回uid便于客户端进行数据校验

待完善:

  • 检查心跳结果,定时查看所有连接的状态, 将一些常量定义为宏,占用系统资源监控,连接池,工作线程创建新的连接,信号处理,从文件读取配置,改为守护进程模式, 看场景实现RC4加密功能,通信协议改为变体长度的二进制版本, jemalloc代替glibc,调整链表结构为linux内核的实现方式, 添加函数相关注释,线程池

使用方法:

Server: make ./sever-demo &
Client: php client.php

About

A Simple Backend Server Demo

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages