经过几个月的努力,利用业余时间终于做成了一个聊天系统,虽然还不完善,但是基本上可以使用了。先拿出来跟大家分享一下,后面再逐步完善。希望大家多多支持!
一、项目介绍
phoenix-im:本项目是一套基于vert.x
开发的即时通信系统,项目代号凤雏
。(不知道为什么现在一说凤雏第一反应出来的画面是大聪明
)Vert.x
是一套基于Netty
的Tool-kit
,最大的特点在于异步,大大降低了传统阻塞模型中线程对于操作系统的开销。因此相比较传统的阻塞模型,异步模型能够很大层度的提高系统的并发量。因此phoenix-im
可以在占用资源很少的情况下可以支持百万级别的并发。通信协议使用http
、websocket
,支持web形式的网页客户端 。服务端使用vert.x
开发,要求JDK的版本为1.8以上。
二、系统架构
系统同时采用http
和websocket
协议。其中用户登录,查询联系人等动作使用http
协议完成,发送和接收消息等需要长连接的处理使用websocket
协议。系统架构如下图所示:
三、开发环境
建议开发者使用以下环境,这样避免版本带来的问题
- Windows、Linux
- Eclipse、Idea
- Mysql≧5.6
- JDK≧8
- Vert.x≧4.1.0
- Maven≧3.6.3
四、快速体验
1.启动后台工程
-
检出源代码:
git clone https://gitee.com/sublun/phoenix-im.git
-
导入项目
-
clipse导入,菜单
File -> Import
,然后选择Maven -> Existing Maven Projects
,点击Next>
按钮,选择检出的项目phoenix-im
文件夹,然后点击Finish
按钮,即可成功导入 -
IDEA导入,点击
Open...
,选择检出的项目phoenix-im
文件夹,然后点击OK
按钮,即可成功导入
-
-
工程构建
本工程使用
Maven
对工程进行管理,初次加载会比较慢需要下载依赖的jar包。如果maven不会使用参考: -
创建数据库
本系统使用mysql数据库,推荐使用MySQL5.7及以上版本。创建数据库
phoenix
(数据库使用utf8mb4编码),导入db/phoenix.sql
,如果需要测试数据可以导入test-data.sql
中的测试数据。 -
修改配置文件
修改
phoenix-core
工程下的配置文件src/main/resources/phoenix.json
修改其中连接数据库的配置信息。{ "mysql.port":3306, "mysql.host":"127.0.0.1", "mysql.database":"phoenix", "mysql.user":"root", "mysql.password":"root", "mysql.pool-size":12 }
-
启动后台服务
运行
cn.sunny360.core.verticle.MainVerticle
中的main
方法,启动工程。
2.启动客户端
前台工程有两种,一种是基于swing的java客户端,一种是基于vue的网页客户端。当然基于swing的java客户端看起来就比较low一些o( ̄︶ ̄)o但是功能都是一样的。
Swing客户端
通过上一步工程的克隆后,会发现工程中有一个模块phoenix-client
,这个模块就是swing客户端,启动后台工程后,可以直接启动此工程来进行体验。
启动MainWin
即可。
html客户端
-
克隆客户端工程
从仓库中克隆html客户端工程:
git clone https://gitee.com/sublun/phoenix-client-web.git
-
部署工程
此项目为纯前端项目,由于本人前端不是太熟练,目前无法驾驭vue的工程化项目,所以采用的还是比较原始的开发方式
html+css+js
所以工程无需编译下载后就可以直接部署。可以部署到任意http服务器下,推荐部署到nginx。server { listen 7777; server_name localhost; #charset koi8-r; access_log logs/host.access.log main; location / { root html客户端路径; index index.html index.htm; } }
-
访问
http://localhost:7777
五、测试用户
用户名 | 密码 |
---|---|
zhangsan | 123 |
lisi | 123 |
wangwu | 123 |
wuchen | 123 |
wuchen1 | 123 |
六、文档
http://phoenix.sunny360.cn/
六、客户端截图
总结
项目还不太完善,后面会逐步完善的。希望对大家有帮助,感兴趣的小伙伴可以留言一起交流。如果想拍的话还请大家下手轻点儿。