All Projects → a2888409 → Face2face

a2888409 / Face2face

基于netty的异步非阻塞实时聊天(IM)服务器。

Programming Languages

java
68154 projects - #9 most used programming language
Protocol Buffer
295 projects
Batchfile
5799 projects

Labels

Projects that are alternatives of or similar to Face2face

netty-learning
bio, nio到 netty各种使用案例, 包含基础使用案例,各api使用方法,零拷贝,websocket,群聊,私聊,编码,解码,自定义协议,protobuf等使用案例,rpc服务器,客户端等等学习
Stars: ✭ 49 (-96.66%)
Mutual labels:  netty, nio
Httpproxy
http代理,支持CONNECT和普通GET/POST,支持http2;可防止主动嗅探;可作为小火箭、圈、surge等软件和SwitchyOmega(chrome插件)所说的https代理
Stars: ✭ 104 (-92.92%)
Mutual labels:  nio, netty
cheshuo
🎃A lightweight game server framework. Based on Springboot and Netty. Using ProtoBuf as communication between client and server.
Stars: ✭ 23 (-98.43%)
Mutual labels:  netty, nio
Simple Rpc
RPC with service discovery base on netty
Stars: ✭ 103 (-92.98%)
Mutual labels:  nio, netty
Nioimapclient
High performance, async IMAP client implementation
Stars: ✭ 28 (-98.09%)
Mutual labels:  nio, netty
NioSmtpClient
Smtp Client based on Netty
Stars: ✭ 25 (-98.3%)
Mutual labels:  netty, nio
Simviso Source Code Interpretation Sharing
simviso 的一系列源码解读分享视频,涉及国外顶级学府课程翻译、国外顶级开发者视频翻译,JDK, Rxjava,Spring Reactor, Netty ,Reactor-Netty ,Spring Webflux 我的目标是将Java的响应式建立起一套学习体系,假如你想深入,可以参考我的视频和后续出版的书籍,同时展现一些我的编程经验,做一个铺路人
Stars: ✭ 412 (-71.93%)
Mutual labels:  nio, netty
Vert.x
Vert.x is a tool-kit for building reactive applications on the JVM
Stars: ✭ 12,544 (+754.5%)
Mutual labels:  nio, netty
Jupiter
Jupiter是一款性能非常不错的, 轻量级的分布式服务框架
Stars: ✭ 1,372 (-6.54%)
Mutual labels:  nio, netty
Happychat
基于Netty实现的WebSocket聊天室,支持几万人同时在线聊天
Stars: ✭ 445 (-69.69%)
Mutual labels:  nio, netty
styx
Programmable, asynchronous, event-based reverse proxy for JVM.
Stars: ✭ 250 (-82.97%)
Mutual labels:  netty, nio
T Io
解决其它网络框架没有解决的用户痛点,让天下没有难开发的网络程序
Stars: ✭ 1,331 (-9.33%)
Mutual labels:  nio, netty
Styx
Programmable, asynchronous, event-based reverse proxy for JVM.
Stars: ✭ 218 (-85.15%)
Mutual labels:  nio, netty
netty-in-action-cn
Netty In Action 中文版
Stars: ✭ 1,389 (-5.38%)
Mutual labels:  netty, nio
Nettydemo
Netty应用到Android,包含客户端、服务端(断线重连、心跳、黏包处理)
Stars: ✭ 183 (-87.53%)
Mutual labels:  nio, netty
Mobileimsdk
一个原创移动端IM通信层框架,轻量级、高度提炼,历经8年、久经考验。可能是市面上唯一同时支持UDP+TCP+WebSocket三种协议的同类开源框架,支持iOS、Android、Java、H5,服务端基于Netty。
Stars: ✭ 3,864 (+163.22%)
Mutual labels:  nio, netty
Carmelo
Carmelo is a fast, scalable Java server framework designed for online games. It uses Netty and Fastjson for highly efficient network transmission and supports both TCP/HTTP protocols.
Stars: ✭ 148 (-89.92%)
Mutual labels:  nio, netty
Nettychat
基于Netty+TCP+Protobuf实现的Android IM库,包含Protobuf序列化、TCP拆包与粘包、长连接握手认证、心跳机制、断线重连机制、消息重发机制、读写超时机制、离线消息、线程池等功能。
Stars: ✭ 1,979 (+34.81%)
Mutual labels:  nio, netty
Cookbook
🎉🎉🎉JAVA高级架构师技术栈==任何技能通过 “刻意练习” 都可以达到融会贯通的境界,就像烹饪一样,这里有一份JAVA开发技术手册,只需要增加自己练习的次数。🏃🏃🏃
Stars: ✭ 428 (-70.84%)
Mutual labels:  nio, netty
Getty
一个完全基于java的,类似netty的高性能网络框架A fully Java-based, netty - like high-performance networking framework
Stars: ✭ 45 (-96.93%)
Mutual labels:  nio, netty

face2face

image
auth服务:负责登录认证。
gate服务:负责客户端接入,也是服务器和客户端通信的媒介。
logic服务:负责处理各种业务逻辑。

为以后将服务设计为水平可扩展的服务准备,将整个服务拆分为3个进程。
实现基本功能后的目标是将每个服务设计为可水平扩展的集群,并且重点放在架构上的优化而不是逻辑功能上。

一、QuicksStart:

(a)启动服务器:

  1. 使用intellij maven方式导入该工程,执行mvn clean compile
  2. 在对应模块的resources目录下配置auth、logic服redis数据库地址
  3. 启动redis服务:thirdparty中附带了一个windows cmd命令行可以直接启动的redis进程。只需用cmd进入该目录,执行:redis-server.exe redis.windows.conf
  4. 打开intellij的debug/Run configuration根据工程路径重新配置auth logic gate服务启动项program argument-cfg选项:(比如工程clone在了E盘code目录,那么就把logic的启动项改为-cfg E:\code\face2face\logic\src\main\resources\logic.xml),auth、gate同理。
  5. 按顺序启动logicauthgate服务(因服务间断线重连暂时未加入)

(b)启动客户端
测试注册和登录功能,以及单聊功能(建议跟踪断点):

  • 按照quickstart流程依次启动服务器后,再启动client模块的下的客户端(Client类),服务便会自动执行注册,登录的流程,并每隔100ms给自己发送聊天信息。

二、添加业务逻辑

  • 协议流动方式介绍:客户端先连接gate,gate服务根据客户端发送的协议类型转发到auth服或者logic,到达auth或者logic之后,IO线程将消息dispatch到后端worker线程处理。
  • 定制业务逻辑
    • 只需在三个地方注册协议:protobuf模块的ParseRegistryMap,gate模块的TransferHandlerMap,最后是根据协议类型在auth模块或者logic模块的HandlerManager注册即可。注意:HandlerManager注册的是协议最终处理的业务逻辑。
    • 在protobuf模块对应**.proto文件添加你自己定义的协议,执行proto.bat**即可生成对应pb文件。

三、压力测试

  1. client模块中的client.Client类提供了进行压力测试的方法,可以修改启动客户端连接的数量Client.clientNum,以及每秒向服务器发送的协议的频率Client.frequency进行压力测试。
  2. CPU 8核E3-1231v3, 每个服务分配1G的堆内存,启动5000个客户端后(需要一定时间),不停给自己发送单聊协议,发现auth、logic、gate服务占用的cpu非常低,客户端能够立即收到响应。对应的TPS统计将在后续加入。

四、水平扩展思路(processing)

实际上最简单的做法,就是利用消息中间件对服务之间的调用进行解耦,这里以消息中间件RocketMQ为例子:

    client(Producer) ->  gate(Consumer)

所有用户我们都可以看做是生产者,用户操作对应生产者产生消息,gate网关服此时看做是消费者订阅用户产生的消息。我们使用RocketMQ的顺序消息特性,保证同个用户的消息都转发到同一个消息队列,这样就保证了同个用户操作的先后。

    gate(Producer)   ->  auth(Consumer)
    gate(Producer)   ->  logic(Consumer)

网关服同时又可以看做是生产者,他接收到用户请求后产生逻辑操作消息,这些逻辑操作消息根据不同的类型,又可以被auth服,logic服订阅。auth,logic收到订阅的消息,此时才进行真正的消费。
使用集群模式,消费者是可以任意水平扩展的,rocketmq天生的优势保证了只要生产者消息不丢,即使某个消费者挂了,消息也能够被集群中其他consumer正确消费,但是消费的幂等性要自己保证。

Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].