南京微生活有做本地微信微服务的吗?


本文将介绍怎样实现一个聊天系统, 由两大部分组成, 后端部分跟前端部分, 最后实现的样子跟微信网页版有点像(除了前端的小细节没有)。 因为斥巨资80买了1核2g服务器, 不想浪费, 所以写了个简单的聊天系统。主题本来想的是哪吒传奇, 但是前端因为太菜了, 所以css什么的还没有调好。
项目后端地址 https://github.com/papandadj/nezha-chat-backend
项目前端地址 https://github.com/papandadj/nezha-chat-frontend
后端部分(golang): 后端部分采用微服务架构go-micro, 将服务分解成5大模块.
基本数据库采用MYSQL
实时聊天是rabbitmq, 用的rabbitmq_web_stomp插件
服务网络通讯用的grpc, 跟前端的交互的地方暴露出部分http
部署采用的是docker
服务熔断采用的是hystrix
服务发现用的etcd
链路追踪用的jaeger
前端部分(web端): 因为刚开始学前端,对前端的代码组织以及那个文件该干什么都不太了解, 所以代码基本上是凑出来的, 用到的技术大约有这些
html, css , js
vue, vuex, vue-router
axios
部署采用nginx
一. 项目结果展示
用户可以在这个直接进行注册以及登录,因为交互不太好,所以录下视频
https://www.zhihu.com/video/1195378905601703936
注册好之后, 点击登录。 就是这个界面
部分账号跟密码, 可以直接使用, 就不用注册了:
nezha, daji, erlangshen, jifa ,xiaolongnv, ,xiaozhuxiong, leizhenzi, shiji, nvwa
密码都是888
当点击1按钮的时候, 会显示该用户的全部好友, 当点击2按钮的时候, 如果输入框有字符, 会根据模糊查询查找已经注册的符合要求的全部用户(提示不友好)。
点击2后, 然后点击左侧用户, 会出现这个界面
然后点击添加用户, 这样, 就添加成功了, 再点击1按钮, 就可以看到已经添加的好友了。 点一下该好友, 就可以聊天了。
这是这个项目所实现的方法, 接下来, 我用一段视频展示一下。
有三个浏览器, 一个chrome, 一个firefox, 一个手机chrome, 展示一段对话
https://www.zhihu.com/video/1195379008915861504
也可以直接进入http://182.61.3.243:16686 里面查看请求链路
上面就是所实现的全部内容, 之后, 主要看下怎样实现的。
二. 后端实现
后端实现功能
如图, 后端主要有这么多的服务, 其中以web结尾的对前端提供http接口, web和srv之间通过grpc进行通讯, 服务注册采用的是etcd, 本来还应该写个总网关的, 但是也还没写。
http服务采用的gin框架, grpc采用的是go-micro。
项目文件夹分为下面几个部分
其中, 每一个文件夹代表一个服务(除了deploy, 跟common, script, pkg), 它们是可以单独开启的, 通过etcd注册自己。 deploy文件夹里面放的是docker 部署的配置。 common里面放的是通用的一些结构体或者方法。 pkg里面是自己写的函数或者封装的库。
怎样本地部署
因为mysql没有封装成镜像(未来会全部封装程镜像的), 你需要首先创建配置好mysql, 并且将deploy里面的文件夹的每一个config.toml中, 将mysql改成自己的账号密码。 还要确保数据库都建好了, 建库语句在script里面的script.sql里面, 初始化数据在data.sql里面。
下载代码
git clone git@github.com:papandadj/nezha-chat-backend.git
编译二进制
cd deploy/ && make buildBinary
编译docker镜像
make buildImage
开启服务
docker-compose up
后端运行 docker-compose up -d
然后等一下, 会看到chat-srv没有开启成功, 因为chat-srv要确保rabbitmq启动后才会启动, 而docker-compose好像没有探针, 所以我只能写了出错时重启。
查看是否启动
docker container ls看下需要的服务是否都启动了.
这里面主要是mysql, 其他都是docker部署, 一般不会出问题。
后端开启后会开启5个端口
9500: user-web
9501: friend-web
9502: common-web
9503: chat-web
15674: rabbitmq对外暴露的socket接口
你也可以尝试关闭一些服务, 这样同个接口在访问多次之后会发生熔断, 不会影响性能, 如果服务开启多个, 内部会自己做负载轮训。
三. 前端实现
前端部署我是采用nginx的方式, 没有放在docker里面
下载代码
git clone git@github.com:papandadj/nezha-chat-frontend.git
安装依赖
npm i
修改配置
因为自己刚学, 不太会组织前端, 我修改配置的方法是在src/assets/js文件夹下面有个test.js 文件, 把 baseHost 修改程 "localhost", 在最下面有个SocketURL改成自己本地就可以了。
开启
npm run dev
打包部署
打包
npm run build
部署
在/etc/nginx/sites-available/default里面添加配置, 把root改成打包后的路径即可
server {
listen 10000;
root /root/nezha/frontend/dist;
index index.html index.htm;
location / {
try_files $uri $uri/ /index.html;
# This will allow you to refresh page in your angular app. Which will not give error 404.
}
}
然后就可以访问本地了 http://localhost:10000/
总结
这个项目是自己为了将自己学过的东西全部结合在一起, 计划本来还包括webrtc功能实现的, 又因为马上过年了, 不想拖到明年写, 因此赶时间写了第一个版本。 虽然细节不好, 比如弹框跟列表点击之后的颜色显示, 但还是实现了基础的聊天功能, 未来计划好好看下前端, 尽量实现微信前端那种显示效果并且实现p2p视频通讯, 也会对后端进行完善, 比如对通道进行加密,
添加elk等。
}

我要回帖

更多关于 南京微生活 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信