Anglais | 简体中文
Ⅰ. Présentation de zfoo
- Conception d'acteur extrêmement rapide, asynchrone, sans verrouillage, framework RPC universel, prise en charge native de GraalVM
- Haute évolutivité, déploiement de serveur unique, déploiement de microservices, déploiement de cluster, déploiement de passerelle
- Peut être utilisé comme framework de serveur de jeu ou comme framework de serveur de site Web
- Le protocole zfoo prend en charge C++ Rust Java/Kotlin/Scala JavaScript/TypeScript/ES C# Go Php Ruby Lua GDScript Python Dart Swift
Processus de développement du travail parfait, solution en ligne complète
- Projets Spring, projets distribués, projets de conteneurs, code de mise à jour à chaud sans hotswap de temps d'arrêt
- La configuration Excel json csv est automatiquement mappée et analysée, stockage de configuration hotswap en ligne
- Cadre de mappage automatique pour MongoDB orm
- Événement de bus événementiel
- Planificateur de planification de tâches temporelles
- Processeur, mémoire, disque dur, surveillance du réseau intégrés au programme, aucun code ni outils supplémentaires requis pour le moniteur
Ⅱ. Qui utilise ce projet
- Projets avec des exigences de performances extrêmement élevées, tels que des frameworks de sites Web et de serveurs de jeux, un serveur unique, un serveur global, un chat en direct, un système de messagerie instantanée, un push en temps réel
- Projets tels que les coûts d'économie, de développement, de déploiement, d'exploitation et de maintenance
- En tant qu'infrastructure backend pour Godot, Unity, Cocos,Webgl, H5 , le protocole réseau prend en charge TCP UDP Websocket http
- Restez simple et stupide, configuration simple, code léger
Ⅲ. Dépendance Maven
- Exigence d'environnement JDK 17+ , prise en charge d' OpenJDK , Oracle JDK et GraalVM natif
<dependency>
<groupId>com.zfoo</groupId>
<artifactId>boot</artifactId>
<version>4.0.0</version>
</dependency>
- Si vous ne voulez pas dépendre de tous les modules zfoo, il vous suffit de choisir de dépendre de l'un d'entre eux
<dependency>
<groupId>com.zfoo</groupId>
<artifactId>protocol</artifactId>
<version>4.0.0</version>
</dependency>
Ⅳ. Tutoriels
- zfoo sdk de csharp et lua pour unity et godot
- zfoo sdk dactylographié javascript cocos web h5
- zfoo sdk gdscript pour godot
- tank-game-server Jeu en ligne《The Fight of Tanks》, convivial pour les novices, difficulté 2 étoiles
- godot-bird oiseau et oiseau , propulsé par godot
- FAQ , Il existe un affichage de démonstration standard et des instructions dans le dossier de test de chaque répertoire de projet, qui peuvent être exécutés directement
Ⅴ. Usage
1. Protocole de sérialisation et de désérialisation aux performances ultimes
// 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. Cadre RPC de performance ultime nette, prend en charge 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. code de mise à jour à chaud hotswap, pas besoin d'arrêter le serveur, pas de configuration supplémentaire, juste une ligne de code pour démarrer la mise à jour à chaud
// Pass in the class file that needs to be updated
HotSwapUtils.hotswapClass(bytes);
4. Cadre de cartographie automatique orm basé sur 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. l'événement utilise le modèle de conception de l'observateur, découple les différents modules et améliore la qualité du 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. Cadre de planification du planificateur basé sur l'expression Cron
@Scheduler(cron = "0/1 * * * * ?")
public void cronSchedulerPerSecond() {
// do something
}
7. stockage Excel vers le cadre de cartographie automatique de classe, il vous suffit de définir une classe correspondant à Excel et d'analyser directement Excel
@Storage
public class StudentResource {
@Id
private int id;
@Index
private String name;
private int age;
}
Ⅵ. Spécification de validation ?
- Les personnes qui aiment ce projet sont invitées à maintenir ce projet ensemble et à faire attention aux spécifications suivantes lors de la soumission du code
- Les formats de code utilisent le formatage par défaut d'IntelliJ Idea
- journal des modifications conventionnel-métahub
Ⅶ. Licence
zfoo utilise la licence Apache version 2.0