当前位置: 首页 > news >正文

如何在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

相关文章:

  • 提示js方法未定义,但是确实<textarea>标签未闭合。
  • AI网络渗透kali应用(gptshell)
  • 华为VRP系统简介配置TELNET远程登录!
  • AI 工程师崛起:科技浪潮下的新兴力量
  • Flink 数据清洗与字段标准化最佳实践
  • 【高中数学/古典概率】从1~2000中随机抽一个数,问取到的数既不被8整除,又不被12整除的概率是多少?
  • 计算机网络核心知识点全解析(面试通关版)
  • 全面解析 MCP(Model Context Protocol):AI 大模型的“万能连接器”
  • 15. LangChain多模态应用开发:融合文本、图像与语音
  • 4月25日星期五今日早报简报微语报早读
  • cuda 安装两个版本
  • React 中什么时候用事件总线
  • 影楼精修-手部青筋祛除算法解析
  • Kafka和Spark-Streaming
  • 【物联网】基于LORA组网的远程环境监测系统设计(ThingsCloud云平台版)
  • 【Agent实战】从0到1开发一个Python 解释器 MCP SSE Server
  • 嵌入式:ARM系列分类及主要应用场景
  • MATLAB技巧——平滑滤波,给出一定的例程和输出参考
  • [4A/OP]
  • 【HTTP通信:生活中的邮局之旅】
  • 从“高阶智驾”到“辅助驾驶”,上海车展上的“智驾”宣发变调
  • 证监会发布上市公司信披豁免规定:明确两类豁免范围、规定三种豁免方式
  • 神舟二十号载人飞船与空间站组合体完成自主快速交会对接
  • 目前中美未进行任何经贸谈判,外交部、商务部再次表明中方立场
  • 北大学者:过度依赖技术工具可能会削弱人类主动思考的能力
  • 重庆一幼儿园回应招聘硕士幼教:统一标准,江北区学前教育岗的硬性要求