如何在Linux用libevent写一个聊天服务器

废话少说,先看看思路

因为libevent的回调机制,我们可以借助这个机制来创建bufferevent来实现用户和用户进行通信

如果成功连接后我们可以直接在listener回调函数里创建一个bufferevent缓冲区,并为每个缓冲区设置相应的读回调和事件回调,读回调是专门处理用户给服务器发送的指令,服务器通过指令执行登陆账号,添加好友,删除好友,注销账号,列出好友列表,发送信息的操作

如果用户离线,我们就得用到事件回调,它能自动改变数据库中用户的状态,并释放相应的内存,减少服务器负载

那么如何储存用户数据呢,那自然是创建一个全局变量的Client类的数组的动态指针(在写代码时我一直想需不需要用链表,用链表在处理用户注销时很方便,但在初始化时可能很麻烦,所以我暂时没用链表)

一些碎碎念:Linux网络我跟着b站黑马视频学的,为了运用到实践所以自己想了这个小项目,因为黑马教的时候用的c,所以我也就用C,但写到后面会发现CPP会方便很多,尤其是用到类和对象和STL容器,在字符串处理上string容器会很方便,尤其是处理用户向好友发送信息的时候,还有我就不应该好奇去用switch,都说不好用我就想试试,果然在我后面想修改时很多会被switch限制,这些代码花了我将近十六个小时写完,有很多没完善的地方也请多谅解,后面还有很多功能例如修改密码没去实现,限制用户名和密码长度格式等,因为我暂时不想花更多时间放到这,还在研究另一个东西,所以暂时把这个项目完结了,同时我也把服务器部署到了阿里云,可能过一个多月服务器就没了(毕竟免费试用吗),ip:121.196.197.26 网络端口5888,代码仅供学习和参考

演示效果

用户登陆

添加好友asd,若没找到好友则向用户提示好友未找到

向好友asd发送信息hello,若用户asd未添加pyl则发送失败并提示

若发送成功,用户则接受消息

使用!del删除好友asd

使用!list查看好友列表及好友状态

!delA进行账号注销

源码:https://github.com/youlinpeng2005/Serv_chat

相关推荐
克莱因3583 分钟前
思科 Cisco 路由重发布
网络·路由
Agent产品评测局5 分钟前
图片生成智能体哪家好?2026年企业级视觉创作与自动化选型全景横评
运维·人工智能·ai·自动化
fetasty7 分钟前
chroot的Linux服务配置-当云服务器真正用起来
android·linux·服务器
猫头虎-人工智能8 分钟前
ToDesk ToClaw AI自动化实测:零门槛玩转日常自动化,告别折腾与硬件损耗
运维·人工智能·架构·开源·自动化·aigc·ai编程
实在智能RPA9 分钟前
Agent 能做流程的自动化监控吗?——深度拆解2026年AI智能体在企业级闭环监控中的技术实践
运维·人工智能·ai·自动化
乾元14 分钟前
《硅基之盾》番外篇一:时间的折叠——AI 时代下的物理隔离与传统工控(ICS/OT)安全
网络·人工智能·安全·网络安全·架构
千枫s16 分钟前
kali怎么制作所有长度的爆破字典
网络·网络安全
翱翔-蓝天19 分钟前
WSL + Docker + GPU 安装 video-subtitle-remover 完整文档
运维·docker·容器
云飞云共享云桌面22 分钟前
研发部门使用SolidWorks和ug,cad,设计共享云桌面应该怎么选?
运维·服务器·网络·人工智能·3d
麦聪聊数据27 分钟前
数据库安全与运维管控(五):基于AST的SQL拦截与动态审批
运维·数据库·sql