Jump to content

Наработки идеи нового сетевого ядра


TidalPoo
 Share

Recommended Posts

Тема для размышлений. То есть тут публикуется какая-то идея, частично и полностью реализована в моих работах. Ни чего из ниже описано не будет выпущено в открытый доступ.

Новое сетевое ядро основано на фреймворке 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 и т.д. не нужно.
То есть вот это всё уже просто удаляется, не считая того, что в самом Логин сервере.
image.png.4915e908252c2beac1f063e3132f3b89.png


Тесты производительности будут позже, как только откроется сервер на основе этого ядра.
Но пока можно ощутить стабильность пинга при большой сетевой активности.

Пример когда вокруг много мобов, и тебя бьют порядка 10 мобов. В этот момент происходит огромный спам пактов SM_MOVE, SM_ATACK, SM_SPELL и так далее.

Spoiler

321654.png


Пример когда вокруг нет никого, и сетевые пакеты почти не активны.

Spoiler

2021-02-15-00-14-18.png

 

Link to comment
Share on other sites

А данные предоставлены с сервера который располагается насколько далеко?

А то у меня до Питера всего 18 пинг, сколько бы не билось около меня.

Link to comment
Share on other sites

8 minutes ago, Booblik said:

А данные предоставлены с сервера который располагается насколько далеко?

Клиент - Казань ( клиент выбирался не самый надежный, для понимания эффекта)
Сервер - МСК

По факту - этот тест почти ничего не значит. Надо нагрузку дать больше, тогда будет видно.

Link to comment
Share on other sites

  • TidalPoo changed the title to Наработки идеи нового сетевого ядра

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

 Share

×
×
  • Create New...