手撸了一个基于Libevent网络库的即时通信服务器

项目地址:​https://gitee.com/yiyefangzhou24/pangolin-im​

PangolinIM

介绍

PangolinIM是一款端对端加密的即时通讯工具。有服务器端和安卓客户端,支持文本消息、图片发送、文件发送、语音发送。

特点

PangolinIM是一款端对端加密即使通讯工具,采用DH算法协商密钥,通讯内容通过AES加密算法加密,服务器不存放消息明文。通讯逻辑分2种方式:

1.如通讯双方均在线。服务器仅仅做消息转发(依托redis数据库实现消息队列);

2.接收客户端不在线。服务器使用mariadb数据库缓存消息内容(存储密文,不解密),待客户端上线后发送给客户端,并删除消息原文。

功能列表

包含以下功能:

  • 注册
  • 登录
  • 查找好友
  • 添加好友
  • 好友列表
  • 单人聊天功能(包括发文字、图片)
  • 修改密码
  • 断线重连

部分开发文档

IM客户端开发文档

IM协议封包手册

依赖的开发和运行环境

聊天服务器

如果您是centos 7系统,可直接运行PangolinServer/env_install.sh来配置开发和运行环境。

  1. 安装cmake、makefile和gcc。

    make 版本需要在 3.21.3 及以上,gcc 版本需要在 2.6 及以上。

    根据CmakeFiles.txt规则,所有第三方库(mariadb、hiredis、libevent)的头文件都需要存放或者软链接于/usr/local/include文件夹中,库文件都需要存放于/usr/local/lib文件夹中。

  2. 安装redis数据库和c语言链接库hiredis。

    redis数据库用于存放临时的高速交换的信息,包括客户端临时访问令牌、libevent句柄、消息队列。

    数据库0:消息队列。采用redis发布/订阅模式

    数据库1:客户端临时访问令牌、最新上线时间、libevent句柄,key为用户uid,value为json格式{"key":"key","time":1633873249,"fd":12}

    数据库2:临时好友关系。采用redis的zadd/zrange模式

    hiredis为redis的c语言链接库,包括头文件和库文件,make install命令仅自动拷贝库文件,头文件需要链接或者拷贝到/usr/local/include中。

  3. 安装 mysql(Mariadb)。

    使用的数据库是mariadb,需要安装 mariadb-server、mariadb-client 和 mariadb-devel。

    聊天服务 chatserver 会使用到 mariadb(配置信息位于 pangolinServer/chatServer/etc/config),mariadb数据库用于存放持久化信息,包括用户信息(包括UID、用户名、密码等)、好友关系、离线聊天记录。pangolin目前使用的3个表分别是:

    表名用途说明
    user用户信息表
    user_relationship好友关系表
    chatmsg离线消息记录表

    安装完毕之后,需要自行创建utf-8数据库pangolin,并创建对应的表,建表语句在PangolinServer/table.sql文件中

  4. 编译安装Libevent

     wget https://github.com/downloads/libevent/libevent/libevent-2.0.21-stable.tar.gz
     tar zxvf libevent-2.0.21-stable.tar.gz
     cd libevent-2.0.21-stable
     ./configure -prefix=/usr/local
     make && make install

文件服务器

文件服务器因不需要长连接,故采用php的文件上传方式。需要安装Apache 2.4及以上,安装php 5.4。php需要安装mysql和redis扩展。

此聊天软件的文件传输需要服务器介入暂存文件,文件并不是绝对安全的。可以配置HTTPS来提高传输安全性。

建议将临时文件存放于apache的访问目录以外(修改function.php的UP_DIR),避免用户绕过php直接访问文件本身。

编译和运行方法

聊天服务器编译及运行

进入 pangolinServer/chatServer 目录,执行:

 cmake . && make

如果没有错误,会产生 chatserver文件,可以直接在 Linux 中单独启动,也可以以使用如下命令后台启动:

 ./chatserver > nohup_chatserver.log 2>&1 &

配置文件在目录文件etc/config,可手动修改消息服务器端口、数据库连接配置等。

文件服务器安装及运行

进入 pangolinServer/fileServer 目录,将所有的文件拷贝至apache的根目录即可。

安装完毕后,请使用http://[IP]/check.php检测环境是否正确

使用的端口说明

可以使用一下 lsof -i -Pn 命令查看端口是否处于正常侦听状态,端口号及作用如下:

端口号所属服务用途说明
20000chatserver聊天端口
80(根据apache设定)fileserver文件服务端口

客户端编译环境

客户端使用AndroidStudio编译,具体环境参数如下:

Android Studio Arctic Fox | 2020.3.1 Patch 2
Build #AI-203.7717.56.2031.7678000, built on August 27, 2021
Runtime version: 11.0.10+0-b96-7281165 x86_64
VM: OpenJDK 64-Bit Server VM by JetBrains s.r.o.
macOS 10.15.7
GC: G1 Young Generation, G1 Old Generation
Memory: 1280M
Cores: 4
Registry: external.system.auto.import.disabled=true
Non-Bundled Plugins: Statistic

运行截图

联系方式

如果您在使用这个项目的过程中遇到任何问题,或者您对我的项目有任何意见或者建议,再或者有不错的想法欢迎与我交流,可以加我微信 to_be_listener,您也可以给我发邮件:yiyefangzhou24@qq.com

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值