Game Carrier Overview
The multiplayer game development process requires extensive knowledge not only related to the game mechanics but also a deep understanding of networking. While the creation of game mechanics, art, and content can be considered a simpler task, the networking part presents a challenge for most companies.
Most of the time, it requires huge financial, professional, and human resources to develop a robust client-server network layer and ensure that synchronization and security measures are in place. Usually, the networking part requires up to 50% of all available budgets or human resources, which is a significant amount that can be used differently. For example, it could be used to produce a more polished and engaging game.
The Game Carrier represents the client-server networking framework, that allows game developers to quickly prototype and develop complex multiplayer games, create robust network communication, and manage game sessions efficiently across all gaming platforms, including, desktop, mobile and console.
Game Carrier is on a mission to provide the video game industry with extensive multiplayer framework and tools that work out-of-the-box. These tools are designed to remove excessive complexity of a network layer development and completely change the course of how your game is developed and how quickly it is released to the market. With Game Carrier, you can almost forget about the networking part and concentrate more on what you really love to do - create unforgettable and captivating games!
The foundation of the Game Carrier ecosystem is the Transport Server, it hosts and manages applications written in different programming languages. These apps may include game server, authentication, matchmaking, game state management, chat and communication, leaderboard and statistics, and other. The Transport Server handles the network communication between the clients and the hosted applications, serving as the intermediary for data transmission.
Hosted applications can easily interact with each other by utilizing the underlying network layer provided by the Transport Server. This promotes modularity and facilitates the exchange of data and functionality between different apps, enabling a more integrated and cohesive system.
The framework relies on event-based communication between the client and hosted applications, following a general paradigm of the client-server interaction:
- To establish a connection, the client must use the IP address, port, and unique identifier of the game application hosted on the server.
- During the connection phase, the corresponding
on_connect()event is triggered on the server. To maintain communication, the server provides the client with a unique session identifier. Subsequent communications between the client and server rely on this session identifier.
- Once the connection is established, the client can invoke the
gc_client_add_message()function to transfer data from the client to the app hosted on the server. Suppose the client invokes
gc_client_add_message()to transfer data.
- The game app retrieves messages from the client, triggering the
on_message()event. The client’s message includes the session’s unique identifier, which the server uses to reply with corresponding data, keeping the game process alive.
- When the client receives data from the server, the corresponding
on_message()event is triggered.
- If the client no longer wants to maintain the session with the game app hosted on the server, it calls the
gc_client_stop()function to close the session.
- When the server receives the message, the
on_disconnect()event is triggered, and the server closes the connection with the client.
To enable hosting of applications written in different programming languages on the Transport Server, Game Carrier has developed specialized bridges called Adapters. This solution allows applications written in languages such as Python, C#, and others to communicate seamlessly with the Transport Server, making Adapters an integral part of client-server communications. Adapters are not required for apps designed as native libraries (
dylib, and etc) - the server can easily load them without additional components.
Below you can find a diagram illustrating the Transport Server, hosted applications, adapters and the client-server communication.
In this context, the client represents the game client application running on the player’s device, responsible for user interaction and communication with the game server through the network.
Game Carrier provides a unified approach where developers can write client networking code once and have it function seamlessly across all supported gaming platforms, eliminating the need for separate implementations.
Service represents a set of applications running on the Transport Server. These applications function distinctly, performing specific functions or providing specific features within the overall system. The server runs multiple applications each playing a crucial role in providing game services. On the other hand, there is a single main client-side application responsible for exchanging data between the user and the server.
The framework delivers unmatched versatility for multiple programming languages such as C, C++, C# and Python, allowing developers to write light applications using Python and heavy ones using C or other languages. In order for the Transport Server to run server-side applications, they need to be loaded. “Loading” refers to providing the application binaries to the Transport Server and modifying the server’s configuration file to make them visible to the server.
As mentioned earlier, the Transport Server depends on an additional component called Adapters, which serve as a bridge between the server and applications written in programming languages such as C#, Python and others. For applications written in C and C++ languages adapters are not required, since these apps are designed as the native libraries(e.g.
dylib) and the server can easily load them.
Developers are also provided with a set of default apps that significantly decrease time required to deploy end-to-end game application, this includes:
- Statistics Service starting from the server launch, all telemetry of its operation is displayed in the User Dashboard on the website. The framework offers a basic set of pre-defined counters, based on which the user can monitor the state of their server cluster, as well as the ability to create their own counters and utilize them for generating various alerts.
- Load Balancer provides means to control the user flow, distributes it across multiple servers geographically and ensures that a client always connects to a game server with the smallest latency and load. This service consists of the Authentication Server, Jump Server and Game Server.
Authentication Server brings the following functionality: authenticate a client to the server, create a session on the server, generate the authentication token, authenticate by the generated token, renew the token and sign-out of the session. The app also covers authentication for Steam, Playstation, Xbox, Nintendo Switch, Epic Games Store, Xsolla, Android and iOS.
Jump Server represents the midpoint between the Client Application and the Game Server, it distributes users to the most appropriate game server taking into consideration the game server latency, current load and other parameters.
Game Server allows hosting the game application where players will connect to.
- Unified User Service - represents a set of social services that allow users to chat, add each other to friends, buy or trade in-game items which is also known as microtransactions and perform other social activities. This element significantly boosts the engagement process of the game.
Besides the default solutions provided by the Game Carrier, developers have the freedom to create and implement their own custom applications, allowing for the customization and extension of functionality to meet their unique requirements and innovate on top of the provided solutions.
The Transport Server is only capable of loading native libraries, and by default, translators for C#, Python and other languages do not generate such libraries. To enable the server to load applications written in these programming languages, a mechanism of Adapters has been created. It acts as an intermediary layer between the hosted applications and the Transport Server, providing a more user-friendly interface that allows apps written in different programming languages to communicate with the server.
The selection of the proper adapter is performed automatically by the server, but initially a user has to specify the programming language of the application in the configuration file of the server.
To implement asynchronous networking, developers must use the proprietary binary library that provide a set of functions and events to handle client-server communications. By utilizing Game Carrier’s networking features, developers can seamlessly integrate multiplayer functionality into their games without the complexities of building and maintaining their own client-server networking.
Application Health Monitoring
The Game Carrier has designed the Statistics tool that provides real-time insights into the performance and behavior of your application. It offers an interactive chart that visualizes various metrics and counters related to your application’s memory usage, network activity, API calls, threads, CPU usage, and more. With customizable data projection types, date and time range settings, and the ability to select specific counters, the Statistics tool empowers developers to track and analyze critical metrics, facilitating effective performance monitoring and optimization.
You also have the option to customize alerts that will be triggered based on specific scenarios, such as when the application’s health reaches a critical state and requires immediate evaluation. If a particular metric falls outside the normal working range or an anomaly is detected, you will receive an email notification promptly, alerting you about the issue. This enables you to stay informed and address problems quickly.
What You Will Get
You can easily run multiple Transport Servers, each hosting a specific set of applications tailored to serve the target geographic region. This level of flexibility enables the creation of a network layer as intricate and comprehensive as necessary to meet the specific needs and demands of the game ecosystem.
Game Carrier offers a streamlined development process, efficient network communication, and the ability to distribute transport servers geographically, enabling companies and developers to create polished and engaging games while minimizing the resources and effort required for networking.