Noark is a game server-side framework that can quickly develop a game server that is easy to maintain, easy to expand and stable, allowing developers to focus on the development of business functions.
project introduction
It implements configuration injection, protocol mapping, template loading, data storage, asynchronous event, delay task, internal instruction and other functional modules
Thus, the effect of loose coupling is achieved, and the reusability, maintainability and expansibility of the system are improved
Carefully designed it greatly simplifies network programming and multi-threaded programming, a large number of tool class libraries are in order to solve the development of those repetitive work produced by the framework
Advantages:
Easy to use and low learning cost
Powerful and easy to write good performance services
It is flexible and works seamlessly with common technologies
install
implementation "xyz.noark:noark-game:3.4.3.Final"
示例:
1、Application Application startup entry
package com.company.slg;import xyz.noark.game.Noark;public class GameServerApplication {public static void main(String[] args) {Noark.run(GameServerBootstrap.class, args);}}
2、Bootstrap starts the bootstrap portal
package com.company.slg;import xyz.noark.game.bootstrap.BaseServerBootstrap;public class GameServerBootstrap extends BaseServerBootstrap {@Override protected String getServerName() {return "game-server";}}
3、Configuration Configuration center
package com.company.slg;import xyz.noark.core.annotation.Configuration;@Configurationpublic class GameServerConfiguration {}
Other implementations
Protocol mapping
The main role of the message controller is to provide each module with an entry point for message processing.
The message here is not only the protocol, but also the internal instructions, events, and other logical entry, which is also a support made in response to the thread model, as long as the entry is in this message controller, it must go the desired thread scheduling.
The @Controller is used to identify a class as the message controller entry for the current module.
@Controller(threadGroup = ExecThreadGroup.PlayerThreadGroup)public class MailController {}
The threadGroup parameter identifies that this entry is divided by player thread groups, with each player’s previous logic independent of each other.
@Controller(threadGroup = ExecThreadGroup.ModuleThreadGroup)public class LoginController {}
This is broken down by module, which means that all the logic of the module is executed in a string manner.
The @PacketMapping annotation identifies a packet mapped to a processing method
@PacketMapping(opcode = 1001, state = State.CONNECTED)public void loginGame(Session session, LoginGameReq request) {}
Asynchronous event
The main purpose of introducing asynchronous events is to decouple each module. When an action is completed, an event is released to the system, which is monitored and processed by the concerned module. Synchronous processing, asynchronous processing and delayed processing can be selected. When to publish an event, and when other modules care about the action. For example, to kill a monster, the achievement module needs to count the progress of the kill, so it can monitor the death of the monster. For example, when obtaining props, the task system module needs to determine the completion progress, the BI module needs to report, and so on. This event can be monitored, and the module decoupling has been achieved
Document address: Click to download