Jump to content

Dev Blog: Under the Hood of the Replication Framework


Recommended Posts

Thanks for sharing this blog with us @Leon Baker. It is really hard to build a system and make certain choices while building it. But in these 9 years, I am sure that the development team will make the best choices and do a good job and looking forward to Al traffic. ūüôā

  • Like 1
  • Awesome! 1

46jGBLu.png

Languages: I TR I EN |  Discord: pofii

TR |¬†Kurallar¬†|¬†Ban ńįtirazńĪ¬†| Destek Sistemi |¬†Raporlama Sistemi¬†|¬†Geri Bildirim |¬†

EN | Rules | Ban Appeal | Support System | Report System | Feedback |

1797472539_TMP.png.e59ae11c070d542b6b8fb 

Link to comment
Share on other sites

I've always seen the idea of AI good in TMP but I have a couple questions:
 

  • Would they be banned from areas such as Calais?
  • Would they be disabled on arcade?
  • What will happens after you crash into one
  • Will this cause the minimum requirements to increase?

Thanks and great to see TMP is looking at the features that convoy mode has but TMP lacks.

  • Awesome! 1
Link to comment
Share on other sites

Usually, after such blogs, you expect changes and new features tomorrow)) I hope the code will be smooth and we will see these changes soon.

  • Awesome! 1

ResTed.gif

–Ď—Ä–ĺ–Ĺ–∑–ĺ–≤—č–Ļ –Ņ—Ä–ł–∑—Ď—Ä –≤ –Ĺ–ĺ–ľ–ł–Ĺ–į—Ü–ł–ł "–°–ĺ—ā—Ä—É–ī–Ĺ–ł–ļ –Ņ–ĺ–ī–ī–Ķ—Ä–∂–ļ–ł 2016"

Game Moderator Leader of the Year 2019 - #2

TMPForum.png

 

Link to comment
Share on other sites

a good news that players have been waiting for a long time and we finnaly got the news

  this new move will really ensure that players do not get bored while traveling in different parts of the map and will be able to travel more beautifully and have more fun but there are some situations that will be added to this game will be players who can drag artificial intelligence vehicles that will be added to this game into bad negativity situations such as having accidents and deviating from the road at the very beginning if this progress comes I can't even think on the C / D road many players will abuse it which is not a good sign and we are waiting with curiosity to see what kind of measures will be taken

  • Woah! 1
Link to comment
Share on other sites

i hope they make a separate server for the AI when they do get that up and running

  • HaulieLove 1

Discord: Bradd#7810 
VTC: Nebula Logistics | Rank: CEO

We may not be able to control the wind but we can adjust our sails

Link to comment
Share on other sites

This is excellent news, and something the community is very excited for. Based on the new framework I am very intrigued to see what else can be achieved in the future.

 

Thank you to everyone within the TMP Team for putting the time in to better TMP over the years! You are incredible! :HaulieLove:

OUswreE.png | nqr87fi.png | S98fAeQ.png

Player Reporting | Ban Appeals | Support System | Feedback System | TMP Rules

Link to comment
Share on other sites

  • Community Manager
3 hours ago, loolee said:

I've always seen the idea of AI good in TMP but I have a couple questions:

  • Would they be banned from areas such as Calais?
  • Would they be disabled on arcade?
  • What will happens after you crash into one
  • Will this cause the minimum requirements to increase?

Thanks and great to see TMP is looking at the features that convoy mode has but TMP lacks.

 

We are unable to respond to those queries at the moment because AI traffic is not in the development. The Game Development team is currently working on the Replication Framework, which will eventually allow them to work on features like AI traffic, for example, as stated in the blog. When developing the AI traffic feature itself, we will begin to consider things like how the AI traffic will operate, on which servers it will operate, and etc.

  • True Story 2
  • HaulieThumbsUp 1
  • Woah! 1
Link to comment
Share on other sites

This was a very interesting read, I've seen dev/engineers presentations about how server replication works in other types of games but with way less clients at the same time. It's a major technical challenge and I hope the development goes well, I can't wait to test the first betas of this project!

Link to comment
Share on other sites

6 hours ago, Leon Baker said:

Imagem de cabeçalho

 

Pref√°cio

 

Ao entrarmos em nosso nono ano no TruckersMP, √© uma grande oportunidade de n√£o apenas olhar para tr√°s em tudo o que conquistamos com a plataforma ao longo dos anos, mas tamb√©m olhar para o futuro, enquanto nos esfor√ßamos para alcan√ßar as ambi√ß√Ķes que temos de tornar a experi√™ncia MMO (massively multiplayer online) que oferecemos mais rica em recursos e atraente para a comunidade desfrutar do que nunca.

 

Uma das principais barreiras que enfrentamos como uma modificação do American Truck Simulator e Euro Truck Simulator 2 é a maneira como desenvolvemos nossa plataforma para trabalhar com os jogos ao longo dos anos, enquanto os métodos usados nos serviram bem, permitindo-nos criar e fornecer todos os recursos que oferecemos atualmente, queremos fazer mais.

 

Para entregar alguns dos recursos mais solicitados e esperados, como o tr√°fego de IA em nossos servidores, precisamos mudar a maneira como as coisas funcionam sob o cap√ī, √© a√≠ que nosso novo projeto Replication Framework entra em jogo, j√° em desenvolvimento h√° mais de um ano, este projeto em andamento nos permitir√° entregar o tipo de recursos revolucion√°rios que a comunidade deseja, e isso √© fundamental para nossa continua√ß√£o cont√≠nua como o destino de escolha para MMO (massively multiplayer online) para caminh√Ķes virtuais.

 


 

Introdução

 

Neste blog, faremos um mergulho t√©cnico profundo nessa nova estrutura de replica√ß√£o. Voc√™ pode estar curioso sobre o que isso significa, quais benef√≠cios ele nos proporcionar√° a curto e longo prazo, e por que est√° demorando tanto para se desenvolver. Este blog de desenvolvimento fornecer√° um pico sob o cap√ī dessa estrutura e, embora atraia principalmente os usu√°rios experientes em tecnologia entre n√≥s, dada a linguagem t√©cnica usada, ele deve fornecer uma vis√£o geral de alguns dos desafios que enfrentamos ao desenvolver o TruckersMP.

 

TruckersMP √© uma modifica√ß√£o multiplayer, ent√£o devemos sincronizar o mundo do jogo entre os clientes. Nossa modifica√ß√£o √© um MMO (massively multiplayer online), e dependemos da sincroniza√ß√£o do estado do jogo usando um servidor. Isso significa que usamos uma arquitetura cliente-servidor em que os clientes se conectam a um servidor. O servidor do jogo tem conhecimento sobre todo o estado do jogo, incluindo a localiza√ß√£o dos ve√≠culos dos jogadores, os acess√≥rios necess√°rios para constru√≠-los, apelidos dos jogadores, o conte√ļdo de seus bate-papos e assim por diante.

 

Para entender melhor os conceitos envolvidos, é importante ter algum conhecimento do que são pacotes. Em redes de computadores, um pacote é uma unidade de dados transmitida através de uma rede. Pense nisso como uma mensagem enviada de um computador que pode ser recebida por outro. Um pacote pode conter quaisquer dados, como texto ou binário, mas não pode ser muito grande. Se uma mensagem for muito grande, ela será dividida em pacotes e remontada pelo receptor.

 


 

Desafios do desenvolvimento de jogos em rede

 

Ao desenvolver jogos em rede, h√° v√°rios fatores importantes a serem considerados, incluindo uso de largura de banda, uso de CPU, seguran√ßa, estabilidade e confiabilidade. O uso de largura de banda refere-se √† quantidade de dados transmitidos pela rede, medida em bits por segundo (b/s). Um servidor dedicado pode transmitir at√© 1 Gb/s, mas pode ser caro atualizar. A prepara√ß√£o de pacotes no servidor requer o uso da CPU, que pode consumir muitos recursos, especialmente ao preparar pacotes para 4000 clientes 10 vezes por segundo. Tamb√©m queremos que os clientes mantenham bons FPS (frames por segundo). A seguran√ßa √© crucial, pois devemos garantir que os hackers n√£o possam assumir o controle do aplicativo do servidor do jogo, levando a viola√ß√Ķes ou infectando os computadores dos clientes. O servidor e o cliente do jogo tamb√©m devem permanecer est√°veis e confi√°veis, com entidades sincronizadas de forma confi√°vel para evitar problemas de dessincroniza√ß√£o.

 

Desde o in√≠cio do projeto, h√° oito anos, empregamos um design simples de arquitetura de c√≥digo de rede. Sempre que precisamos sincronizar o estado de algo, constru√≠mos manualmente um pacote com um ID espec√≠fico e o enviamos para o cliente. No lado do cliente, o pacote √© recebido, lido e o estado √© aplicado. Da mesma forma, quando um ve√≠culo de jogador local muda de posi√ß√£o, por exemplo, um pacote √© constru√≠do e enviado para o servidor, e o servidor aplica as altera√ß√Ķes.

 

Essa arquitetura tem suas vantagens e desvantagens. No lado positivo, o uso da largura de banda parece ser gerenciável e o código é direto e de baixo nível, facilitando a criação em C++. A segurança está ligada ao receptor de pacotes e a confiabilidade é baseada na biblioteca de rede.

 

No entanto, tamb√©m h√° v√°rias desvantagens neste design. O c√≥digo de alto e baixo n√≠vel √© misto, dificultando o dimensionamento da base de c√≥digo. √Č um desafio transmitir apenas propriedades modificadas pela rede para economizar largura de banda, e a sincroniza√ß√£o est√° espalhada por muitas partes do c√≥digo, tornando dif√≠cil otimizar o uso da CPU no cliente do jogo e no servidor do jogo. Utilizar mais de um n√ļcleo/thread de CPU √© um desafio, adicionar novos recursos √© complicado e a confiabilidade √© baseada na biblioteca de rede. Na realidade, a largura de banda nem sempre est√° sob controle.

 

Vamos esclarecer cada um desses pontos:

 

(Pro/Con) O uso de largura de banda parece ser gerenciável, mas, na realidade, na verdade não é:
criamos manualmente um pacote em código C++ específico cada vez que queremos sincronizar algo, o que mantém o uso de largura de banda sob controle. No entanto, isso pode não ser infalível. Com muitas entidades para sincronizar e com o código de sincronização espalhado por toda a base de código, não há controle real do uso da largura de banda. Cada parte do código tentará enviar pacotes sem qualquer orquestração. Outro grande problema é que não sabemos quais sistemas tomam mais largura de banda em tempo real (por player, e globalmente, isso é importante).

 

(Pro) O código é simples e de baixo nível:
Criar pacotes é um conceito simples de entender. Você os envia, os recebe na outra extremidade, lê a ID do pacote e aplica uma lógica específica para desserialização. Essa simplicidade se deve à importação de uma biblioteca de rede existente (por exemplo, RakNet), à criação de soquetes e à gravação de manipuladores de pacotes.

 

(Pro) Foi f√°cil criar em C++:
Usar a biblioteca de rede existente e escrever manipuladores de pacotes para sincronização facilita a criação do código de sincronização em C++.

 

(Pro) A segurança depende do receptor do pacote:
O c√≥digo de deserializa√ß√£o est√° bem escrito e falhas de seguran√ßa podem ser evitadas se voc√™ tiver cuidado. No entanto, voc√™ deve ser cauteloso durante a profana√ß√£o de pacotes, pois um √ļnico erro pode introduzir vulnerabilidades de seguran√ßa.

 

(Pro/Con) A confiabilidade depende da biblioteca de rede:
Optamos pelo uso de UDP (User Datagram Protocol) para transmitir pacotes em vez de TCP (Transmission Control Protocol). O TCP n√£o permite o envio de pacotes n√£o confi√°veis, o que significa que o protocolo deve garantir que todos os pacotes sejam entregues. Essa abordagem resulta em sobrecarga adicional de largura de banda. Para um jogo de simula√ß√£o em tempo real, o uso de TCP pode levar a alta lat√™ncia devido √† perda de pacotes. O TCP sempre preserva a ordem dos pacotes, resultando em altos atrasos devido √† sobrecarga. Isso pode ser problem√°tico ao considerar a dist√Ęncia que o ve√≠culo de um jogador pode percorrer durante esse tempo. No caso, digamos, de lat√™ncia de 500ms e o ve√≠culo de um jogador viajando a uma velocidade de 150 km/h se mover√° 41 metros a cada segundo, o que significa que ele pode viajar at√© 20 metros em 0,5s. Tal atraso poderia causar problemas com o posicionamento do ve√≠culo do jogador atual, levando o jogo a se tornar injog√°vel.

 

O UDP não garante a entrega de pacotes nem preserva a ordem dos pacotes, ao contrário do TCP. No entanto, é possível construir uma camada de confiabilidade sobre o UDP. Muitas bibliotecas de rede oferecem recursos como envio de pacotes de confirmação, armazenamento em buffer de pacotes até que os necessários cheguem e contagem de pacotes. Embora construir essa biblioteca possa ser um desafio. Apesar disso, é preferível usar uma biblioteca de rede que ofereça recursos de confiabilidade sobre UDP em vez de TCP. A razão para isso é que a biblioteca de rede permite a transmissão de pacotes confiáveis e não confiáveis simultaneamente. Ao enviar um pacote, pode-se decidir se a biblioteca de rede deve garantir sua entrega ou não.

 

(Con) Código de alto e baixo nível é misto:
Misturar código de rede com recursos de jogabilidade pode tornar o código mais difícil de entender e manter, especialmente quando há vários conceitos de alto nível para sincronizar.

 

(Con) Não é bem dimensionado:
cada tipo de entidade requer um conjunto diferente de propriedades e c√≥digo de sincroniza√ß√£o, o que pode tornar o c√≥digo dif√≠cil de escalar. Por exemplo, o c√≥digo de sincroniza√ß√£o para ve√≠culos de IA difere do c√≥digo de sincroniza√ß√£o para ve√≠culos de jogadores, e o c√≥digo de sincroniza√ß√£o para sem√°foros difere do de passageiros de √īnibus. Com v√°rios tipos de entidade, √© um desafio criar c√≥digos de rede diferentes para cada um deles, tornando a base de c√≥digo dif√≠cil de manter.

 

(Con) Enviar apenas propriedades modificadas para economizar largura de banda é difícil:
Suponha que j√° enviamos o estado leve do ve√≠culo e ele foi recebido pelo cliente. Nesse caso, √© desnecess√°rio reenviar as mesmas informa√ß√Ķes se apenas a posi√ß√£o do ve√≠culo tiver mudado. Isso pode ser um problema se o c√≥digo cria pacotes manualmente para cada tipo de entidade separadamente. √Č um desafio criar c√≥digo que envia apenas propriedades modificadas para economizar largura de banda.

 

(Con) A sincronização está espalhada por toda a base de código, tornando desafiador otimizar o uso da CPU:
Como o c√≥digo de sincroniza√ß√£o √© colocado em muitas partes do c√≥digo, √© dif√≠cil otimizar o uso da CPU. Se o c√≥digo de sincroniza√ß√£o fosse colocado junto, seria mais f√°cil medir e otimizar o uso da CPU. Al√©m disso, √© desafiador usar mais de um n√ļcleo/thread de CPU para sincroniza√ß√£o, o que pode resultar em atraso no jogo.

 

(Con) Difícil adicionar novos recursos:
Sempre que voc√™ precisar adicionar um novo recurso sincronizado ao c√≥digo, voc√™ precisar√° escrever c√≥digo de sincroniza√ß√£o de rede de baixo n√≠vel novamente. √Č muito simples errar l√°, mas n√£o √© o maior problema. Como a largura de banda √© limitada para servidores dedicados (1Gbps, digamos), voc√™ n√£o pode enviar muitos dados para um cliente espec√≠fico. Voc√™ s√≥ deseja enviar dados que o cliente deve estar interessado. Tipo, s√≥ jogadores por perto. √Č dif√≠cil manter a l√≥gica para cada coisa, que vai sincronizar propriedades com o cliente que chegou a um local espec√≠fico, acabou de entrar no jogo, ou saiu do local, ent√£o a coisa deve ser desovada. A complexidade √© alta. Al√©m disso, pacotes n√£o confi√°veis podem n√£o ser recebidos pelo outro lado, e voc√™ n√£o sabe se eles foram recebidos e deve reenviar dados de propriedades modificados. Voc√™ pode garantir a confiabilidade enviando pacotes confi√°veis, mas toda vez que voc√™ faz isso, isso traz custos com isso.

 


 

Rumo à estrutura de replicação

 

Eventualmente, os problemas acima mencionados levarão à necessidade de uma solução geral para sincronizar objetos de jogo e suas propriedades, o que é comumente conhecido como replicação. O código de replicação fornece uma interface para replicar entidades e suas propriedades. Sua arquitetura é simples:

  • O servidor inicia a sess√£o de replica√ß√£o.
  • Os clientes se conectam √† sess√£o de replica√ß√£o.
  • O servidor cria um objeto de ve√≠culo para o cliente.
  • O servidor adiciona o objeto de ve√≠culo √† sess√£o de replica√ß√£o.
  • A sess√£o de replica√ß√£o cria pacotes gen√©ricos e os envia para garantir que os clientes recebam as entidades nas quais est√£o interessados e suas atualiza√ß√Ķes.
  • Quando um cliente se desconecta, o ve√≠culo √© destru√≠do e removido da sess√£o de replica√ß√£o no servidor.
  • A sess√£o de replica√ß√£o garante que o ve√≠culo seja removido de todos os clientes.

Esse design simplifica a arquitetura de c√≥digo de rede e fornece um √ļnico ponto de responsabilidade para sincronizar objetos de jogo. Embora esse design tenha in√ļmeras vantagens, incluindo uso controlado de largura de banda, c√≥digo simplificado e melhor seguran√ßa, ele tamb√©m tem algumas desvantagens, como a dificuldade em desenvolver uma estrutura de replica√ß√£o confi√°vel e o potencial para bugs. Vale a pena observar que a sess√£o de replica√ß√£o √© apenas uma parte da estrutura e h√° v√°rios outros aspectos, incluindo suporte para o Sistema de Componentes de Entidade interno, v√°rios tipos de dados, gr√°fico de replica√ß√£o e Chamadas de Procedimento Remoto.

 


 

Conclusion

 

We hope this blog provided a useful insight into the work our Game Development team is doing behind the scenes. In the short term, implementing the replication framework will lead to clear, high-level, and manageable code, making it easier to synchronise existing game features and new ones. In the long run, it will enable the addition of more complex game features, such as AI traffic, a shared economy, and a global reporting system.

 

RYfXz2f.png

 

--> Ver post na p√°gina inicial

Adding AI traffic to TruckersMP would be really cool! But it's important to think carefully before doing so. One concern is that it could make the virtual roads even more congested, especially on the busiest routes. Additionally, adding AI traffic could make the game run slower and delay gameplay.

But on the other hand, having more interaction and making the game more realistic is really cool! It could even make the game experience more customizable. So if everything is thought through carefully, adding AI traffic could be a really good idea for TruckersMP!

Anyway, good luck with the development! We're excited to see this new feature in action. If it's implemented well, it will definitely be awesome for us.

Link to comment
Share on other sites

7 hours ago, Sinyordess. said:

a good news that players have been waiting for a long time and we finnaly got the news

  this new move will really ensure that players do not get bored while traveling in different parts of the map and will be able to travel more beautifully and have more fun but there are some situations that will be added to this game will be players who can drag artificial intelligence vehicles that will be added to this game into bad negativity situations such as having accidents and deviating from the road at the very beginning if this progress comes I can't even think on the C / D road many players will abuse it which is not a good sign and we are waiting with curiosity to see what kind of measures will be taken

 

Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.