/zfoo

💡Extremely fast enterprise server framework, can be used in RPC, web server framework, game server framework.(极致性能的Java服务器框架,RPC,游戏服务器框架,web应用服务器框架。)

Primary LanguageJavaApache License 2.0Apache-2.0

English | 简体中文


Why is zfoo protocol ?

  • The protocol currently supports C++ C# Go Java Javascript TypeScript GDScript Lua
  • Universal distributed server protocol implementation, there are implementations in other languages, which can easily implement RPC, servers, and microservices on other platforms
  • The fastest custom format framework for Java binary serialization, with the fewest serialized bytes, more secure and compatible
  • In the single-threaded benchmark test, serialization and deserialization are 50% faster than Protobuf and 100% faster than Kryo

Ⅰ. Introduction of zfoo🚩

  • Extremely fast, asynchronous, Actor design pattern, lock-free design, RPC framework based on Spring MVC
  • Fastest serialization and deserialization,use zfoo protocol as a network protocol
  • High scalability,Single server deployment, microservice deployment, cluster deployment, gateway deployment
  • Can be used as a game server framework or website server framework.

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 use 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

Ⅲ. Tutorials

  • FAQ,There are standard demo display and instructions in the test folder of each project directory, which can be run directly

  • tank-game-server Online game《The Fight of Tanks》,novice friendly, difficulty 2 stars

  • godot-bird bird and bird,powered by godot

  • cocos-fivechess five chess,use cocos as client

Ⅳ. Install and use⭐

1. Environmental Requirements and Installation

JDK 11+OpenJDK or Oracle JDK ,maven install to local repository

If you do not have JDK 11+ installed, the quick installation method is to download directly 
from Project Structure, Platform Settings, SDKs in the upper right corner of Idea

2. protocol fastest 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);

3. net fastest 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
                    );

4. 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);

5. orm automatic mapping framework based on mongodb,The secondary cache is designed using caffeine to fully release the database pressure

// 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);

6. 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.submit(MyNoticeEvent.valueOf("My event"));

7. scheduler scheduling Framework Based on Cron Expression

@Scheduler(cron = "0/1 * * * * ?")
public void cronSchedulerPerSecond() {
    // do something
}

8. storage Excel to class automatic mapping framework, you only need to define a class corresponding to Excel, and directly parse Excel

@Resource
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 uses the default formatting of IntelliJ Idea
  • conventional-changelog-metahub

Ⅵ. License

zfoo use Apache License Version 2.0

JetBrains Logo (Main) logo