Awesome
English | 简体中文 <a href="https://github.com/zfoo-project/zfoo"><img src="/doc/image/logo.jpg" width="30%"></a>
Ⅰ. Introduction of zfoo🚩
- Extremely fast, asynchronous, actor design, lock free, universal RPC framework, native GraalVM support
- High scalability, Single server deployment, microservice deployment, cluster deployment, gateway deployment
- Can be used as a game server framework or website server framework
- zfoo protocol supports C++ Rust Java/Kotlin/Scala JavaScript/TypeScript/ES C# Go Php Ruby Lua GDScript Python Dart Swift
Perfect work development process, complete online solution
- Spring projects, distributed projects, container projects, hot update code without downtime hotswap
- Excel json csv configuration is automatically mapped and parsed, Online hotswap configuration storage
- Automapping framework for MongoDB orm
- Event bus event
- Time task scheduling scheduler
- Cpu, memory, hard disk, network monitoring built into the program no code and extra tools required monitor
Ⅱ. Who uses this project
- Projects with extremely high-performance requirements, such as website and game server frameworks, single server, global server, live chat, IM system, real-time push
- Projects such as saving, development, deployment, operation and maintenance costs
- As a backend infrastructure for Godot, Unity, Cocos,Webgl, H5, Network protocol supports tcp udp websocket http
- Keep it Simple and Stupid, simple configuration, lightweight code
Ⅲ. Maven dependency✨
- Environment requirement JDK 17+, support OpenJDK, Oracle JDK and native GraalVM
<dependency>
<groupId>com.zfoo</groupId>
<artifactId>boot</artifactId>
<version>4.0.0</version>
</dependency>
- If you don't want to depend on all zfoo modules, you only need to choose to depend on one of them
<dependency>
<groupId>com.zfoo</groupId>
<artifactId>protocol</artifactId>
<version>4.0.0</version>
</dependency>
Ⅳ. Tutorials
- zfoo sdk of csharp and lua for unity and godot
- zfoo sdk typescript javascript cocos web h5
- zfoo sdk gdscript for godot
- tank-game-server Online game《The Fight of Tanks》, novice friendly, difficulty 2 stars
- godot-bird bird and bird,powered by godot
- FAQ,There are standard demo display and instructions in the test folder of each project directory, which can be run directly
Ⅴ. Usage⭐
1. protocol ultimate performance serialization and deserialization
// zfoo protocol registration, can only be initialized once
ProtocolManager.initProtocol(Set.of(ComplexObject.class, ObjectA.class, ObjectB.class));
// serialization
ProtocolManager.write(byteBuf, complexObject);
// deserialization
var packet = ProtocolManager.read(byteBuf);
2. net ultimate performance RPC framework, supports tcp udp websocket http
// Service provider, only need to add an annotation to the method, the interface will be automatically registered
@PacketReceiver
public void atUserInfoAsk(Session session, UserInfoAsk ask) {
}
// Consumers, synchronously requesting remote service, will block the current thread
var userInfoAsk = UserInfoAsk.valueOf(userId);
var answer = NetContext.getCosumer().syncAsk(userInfoAsk, UserInfoAnswer.class, userId).packet();
// Consumers, asynchronously requesting remote service, and will still execute logic in the current thread after the asynchronous
NetContext.getCosumer()
.asyncAsk(userInfoAsk, UserInfoAnswer.class, userId)
.whenComplete(sm -> {
// do something
);
3. hotswap hot update code, no need to stop the server, no additional configuration, just one line of code to start hot update
// Pass in the class file that needs to be updated
HotSwapUtils.hotswapClass(bytes);
4. orm automatic mapping framework based on mongodb
// You don't need to write sql and any configuration yourself, define a table in the database directly through annotation definitions
@EntityCache
public class UserEntity implements IEntity<Long> {
@Id
private long id;
private String name;
}
// update database data
entityCaches.update(userEntity);
5. event use the observer design pattern, decouples different modules and improves the quality of the code
// To receive an event, you only need to add an annotation to the method and the method will be automatically listen for the event
@EventReceiver
public void onMyNoticeEvent(MyNoticeEvent event) {
// do something
}
// fire an event
EventBus.post(MyNoticeEvent.valueOf("My event"));
6. scheduler scheduling Framework Based on Cron Expression
@Scheduler(cron = "0/1 * * * * ?")
public void cronSchedulerPerSecond() {
// do something
}
7. storage Excel to class automatic mapping framework, you only need to define a class corresponding to Excel, and directly parse Excel
@Storage
public class StudentResource {
@Id
private int id;
@Index
private String name;
private int age;
}
Ⅵ. Commit specification👏
- People who like this project are welcome to maintain this project together, and pay attention to the following specifications when submitting code
- The code formats use the default formatting of IntelliJ Idea
- conventional-changelog-metahub
Ⅶ. License
zfoo use Apache License Version 2.0