Inglês | 简体中文
Ⅰ. Introdução do zfoo
- Estrutura RPC universal extremamente rápida, assíncrona, sem bloqueio, com suporte nativo ao GraalVM
- Alta escalabilidade, implantação de servidor único, implantação de microsserviços, implantação de cluster, implantação de gateway
- Pode ser usado como estrutura de servidor de jogo ou estrutura de servidor de site
- O protocolo zfoo suporta C++ Rust Java/Kotlin/Scala JavaScript/TypeScript/ES C# Go Php Ruby Lua GDScript Python Dart Swift
Processo de desenvolvimento de trabalho perfeito, solução online completa
- Projetos Spring, projetos distribuídos, projetos de contêiner, código de atualização a quente sem tempo de inatividade, hotswap
- A configuração do Excel json csv é mapeada e analisada automaticamente, armazenamento de configuração de hotswap on-line
- Estrutura de mapeamento automático para formulário MongoDB
- Evento de ônibus de evento
- Agendador de agendamento de tarefas por tempo
- CPU, memória, disco rígido, monitoramento de rede integrado ao programa, sem necessidade de código e ferramentas extras, monitor
Ⅱ. Quem usa este projeto
- Projetos com requisitos de desempenho extremamente alto, como estruturas de sites e servidores de jogos, servidor único, servidor global, chat ao vivo, sistema de mensagens instantâneas, push em tempo real
- Projetos como economia, desenvolvimento, implantação, custos de operação e manutenção
- Como infraestrutura de back-end para Godot, Unity, Cocos, Webgl, H5 , o protocolo de rede suporta tcp udp websocket http
- Mantenha-o simples e estúpido, configuração simples, código leve
Ⅲ. Dependência Maven
- Requisito de ambiente JDK 17+ , suporte OpenJDK , Oracle JDK e GraalVM nativo
<dependency>
<groupId>com.zfoo</groupId>
<artifactId>boot</artifactId>
<version>4.0.0</version>
</dependency>
- Se você não quiser depender de todos os módulos zfoo, você só precisa escolher depender de um deles
<dependency>
<groupId>com.zfoo</groupId>
<artifactId>protocol</artifactId>
<version>4.0.0</version>
</dependency>
Ⅳ. Tutoriais
- zfoo sdk de csharp e lua para unidade e godot
- zfoo sdk typescript javascript cocos web h5
- zfoo sdk gdscript para godot
- tank-game-server Jogo online《The Fight of Tanks》, amigável para iniciantes, dificuldade 2 estrelas
- godot-bird pássaro e pássaro, alimentado por godot
- FAQ,Há exibição de demonstração padrão e instruções na pasta de teste de cada diretório do projeto, que podem ser executadas diretamente
Ⅴ. Uso
1. serialização e desserialização de desempenho final do protocolo
// 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. Estrutura RPC de desempenho final líquido, suporta 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. Código de atualização a quente hotswap, sem necessidade de parar o servidor, sem configuração adicional, apenas uma linha de código para iniciar a atualização a quente
// Pass in the class file that needs to be updated
HotSwapUtils.hotswapClass(bytes);
4. estrutura de mapeamento automático orm baseada em 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. O evento usa o padrão de design do observador, desacopla diferentes módulos e melhora a qualidade do código
// 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. Estrutura de agendamento do agendador baseada na expressão Cron
@Scheduler(cron = "0/1 * * * * ?")
public void cronSchedulerPerSecond() {
// do something
}
7. Armazenamento do Excel para estrutura de mapeamento automático de classe, você só precisa definir uma classe correspondente ao Excel e analisar diretamente o Excel
@Storage
public class StudentResource {
@Id
private int id;
@Index
private String name;
private int age;
}
Ⅵ. Especificação de commit?
- Pessoas que gostam deste projeto podem mantê-lo juntas e prestar atenção às seguintes especificações ao enviar o código
- Os formatos de código usam a formatação padrão do IntelliJ Idea
- convencional-changelog-metahub
Ⅶ. Licença
zfoo usa licença Apache versão 2.0