TidalPoo Posted July 28, 2021 Share Posted July 28, 2021 Тема для размышлений. То есть тут публикуется какая-то идея, частично и полностью реализована в моих работах. Ни чего из ниже описано не будет выпущено в открытый доступ. Новое сетевое ядро основано на фреймворке Netty последней версии. Пример на логин сервере. Под капотом netty конечно же nio, но всю обработку он берет на себя. Код становится лаконичнее и приятнее. Обо всех преимуществах netty вы можете почитать на просторах гугла), но из особенностей можно выделить полный контроль на сетью, и дополнительные плюшки при запуске сервера на linux машинках. Пример код: public class NettyServer { private static NettyServer INSTANCE; private NettyServer() throws Exception { runServer(MainConfig.LOGIN_BIND_ADDRESS, MainConfig.LOGIN_PORT); } public static NettyServer getInstance() throws Exception { if (INSTANCE == null) { INSTANCE = new NettyServer(); } return INSTANCE; } private static final EventLoopGroup bossGroup = new NioEventLoopGroup(); private static final EventLoopGroup workerGroup = new NioEventLoopGroup(); private static ChannelFuture runServer(String ip, int port) throws Exception { ServerBootstrap b = new ServerBootstrap(); b.group(bossGroup, workerGroup).channel(NioServerSocketChannel.class) .childHandler(new ChannelInitializer<SocketChannel>() { @Override protected void initChannel(SocketChannel ch) { ch.pipeline().addLast(new ClientChannelHandler()); } }); ChannelFuture f = b.bind(ip, port).sync(); return f; } } Все обработки происходят в классе ClientChannelHandler, и всё. То есть читаете пакет и по op коду уже отправляете в нужное русло. Никаких вспомогательных классов, такие как Dispatcher и т.д. не нужно. То есть вот это всё уже просто удаляется, не считая того, что в самом Логин сервере. Тесты производительности будут позже, как только откроется сервер на основе этого ядра. Но пока можно ощутить стабильность пинга при большой сетевой активности. Пример когда вокруг много мобов, и тебя бьют порядка 10 мобов. В этот момент происходит огромный спам пактов SM_MOVE, SM_ATACK, SM_SPELL и так далее. Spoiler Пример когда вокруг нет никого, и сетевые пакеты почти не активны. Spoiler Quote Link to comment Share on other sites More sharing options...
Booblik Posted July 28, 2021 Share Posted July 28, 2021 А данные предоставлены с сервера который располагается насколько далеко? А то у меня до Питера всего 18 пинг, сколько бы не билось около меня. Quote Link to comment Share on other sites More sharing options...
TidalPoo Posted July 28, 2021 Author Share Posted July 28, 2021 8 minutes ago, Booblik said: А данные предоставлены с сервера который располагается насколько далеко? Клиент - Казань ( клиент выбирался не самый надежный, для понимания эффекта) Сервер - МСК По факту - этот тест почти ничего не значит. Надо нагрузку дать больше, тогда будет видно. Quote Link to comment Share on other sites More sharing options...
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.