parent
3302c9ab3f
commit
5cb5db0f16
181 changed files with 7717 additions and 10668 deletions
@ -1,3 +0,0 @@ |
||||
# Note |
||||
|
||||
These roadmaps cover everything that is there to learn for the paths listed below. Don't feel overwhelmed, you don't need to learn it all in the beginning if you are just getting started. |
@ -1,3 +0,0 @@ |
||||
# Congestion Control |
||||
|
||||
`Congestion Control` is a critical aspect of any network, particularly in server-side game development where real-time data transfer is a must. It refers to techniques and mechanisms that can prevent too much data from filling the network. This excessive data, also known as network congestion, can lead to packet loss, delay in data transfer, and ultimately a poor gaming experience. Congestion control algorithms, such as TCP congestion control algorithms, are implemented to avoid such situations. They adjust the data packet transmission rate based on the perceived network congestion, reducing the rate when congestion is detected and increasing it when the network is less congested. |
@ -1,3 +0,0 @@ |
||||
# Error Detection |
||||
|
||||
Error detection is a mechanism that checks the integrity of data that is being delivered or stored. In the context of server-side game development, errors can occur due to reasons like network inconsistencies, corrupted data, or server overload. To ensure smooth operation, these errors need to be detected and handled. Some common types of error detection methods include parity check, checksum, and cyclic redundancy check (CRC). Parity check adds an extra bit to the data to make the number of 1’s either even or odd. Checksum involves the sender adding up all the bits in the data and sending the sum along with data. CRC is a more complex and robust method involving binary division. These methods help detect errors but can't fix them. Once detected, errors are typically dealt with through retransmission or by using forward error correction codes. |
@ -1,3 +0,0 @@ |
||||
# Flow Control |
||||
|
||||
Flow control, often referred to as stream control transmission protocol (SCTP), is essential in server-side game development, particularly in data transfer. Flow control is basically a technique used to manage the rate of data transmission between two nodes to prevent a fast sender from overwhelming a slow receiver. It provides an effective way to manage the amount of data that can be sent before having to receive an acknowledgment. There are two main types of flow control: window-based and rate-based. Window-based flow control allows the receiver to process a fixed set of packets before sending the acknowledgement, whereas rate-based control allows for data transfer at a specified rate. These methods make flow control indispensable in network communications. |
@ -1,3 +0,0 @@ |
||||
# Reliable Transmission |
||||
|
||||
Reliable Transmission is a service that ensures data is delivered from the source to the destination without any errors. This includes mechanisms that provide accurate, on-time delivery of all packets while managing packet loss, duplication, or out-of-order delivery. In server-side game development, protocols like TCP (Transmission Control Protocol) are often used to accomplish reliable transmission. Reliable transmission is particularly necessary for critical data where all transmitted information must arrive at the destination correctly and in the right order. TCP accomplishes this by establishing a connection before data transfer begins and using sequence numbers to track delivery and reassemble pieces in the correct order. TCP also sends acknowledgements back to the source confirming packet delivery, and implements re-transmission of lost or corrupted data. Despite its overhead and slower speed compared to other methods, such as the User Datagram Protocol (UDP), reliable transmission is vital when data integrity is a priority over speed. |
@ -1,3 +0,0 @@ |
||||
# Operations |
||||
|
||||
TCP (Transmission Control Protocol) is a connection-oriented protocol that ensures reliable, ordered, and error-checked delivery of data between systems over an IP network. Some of the primary operations include "Connection Establishment" that initializes a connection using a 3-way handshake, "Data Transfer" where packets of data are sent from sender to receiver, "Connection Termination" that closes the connection when transmission is complete, and "Error Control" which handles retransmission of lost data or corrupted packets. Additionally, TCP handles "Flow Control" to prevent a sender from overwhelming a receiver with data, and "Congestion Control" to manage network congestion and avoid packet loss. |
@ -1,3 +0,0 @@ |
||||
# Semaphore |
||||
|
||||
A **semaphore** is a more advanced type of synchronization tool compared to mutexes. While a mutex is either locked or unlocked, a semaphore has a count associated with it and can allow multiple threads to access a resource up to a specified count. Semaphores can be used to control access to a pool of resources, not just a singular resource like a mutex. A semaphore count represents the number of resources available. Each time a thread acquires the semaphore, the count decreases. When the count hits zero, any further threads that attempt to acquire the semaphore are blocked until the count becomes positive again. Release operation increments the count, and possibly unblocks waiting threads. The key detail is that semaphores allow multiple threads to access a resource concurrently, but with a defined maximum number of concurrent threads. |
@ -1,5 +0,0 @@ |
||||
# Channel |
||||
|
||||
### Channel |
||||
|
||||
In server-side game development, a **Channel** is used to simplify network coding by providing an efficient and reusable way to send and receive data. Essentially, a channel is a communication pipeline between a client and a server. They are often used in real-time multiplayer games where fast and frequent data transfer is essential. These channels can be implemented using different protocols, the choice of which usually depends on specific game requirements and usage scenarios. For example, TCP channels may be used for reliable data transfer, while UDP channels may be more applicable for fast, unordered data delivery. |
@ -1,3 +0,0 @@ |
||||
# Coroutine |
||||
|
||||
A **Coroutine** is a special kind of function that has the ability to pause its execution while saving its local state. Unlike standard functions which start at their beginning when called and run to completion, coroutine can start, pause at any point of its execution, and then resume from the same point later. This pause and resume functionality, makes coroutines a great tool for writing asynchronous code and managing activities that are typically difficult to deal with in procedural programming such as time-dependent or event-driven operations. Coroutines are commonly used in server-side development for tasks like handling concurrent requests without the need for creating multiple threads or processes. |
@ -1,3 +0,0 @@ |
||||
# RDBMS |
||||
|
||||
**RDBMS** or **Relational Database Management System** is a type of database management system that stores data in the form of related tables. These tables are interconnected via relational operators. Each row in these tables has an unique identifier known as its **Primary Key**, and the data can be accessed or reorganized in many different ways without needing to reorganize the tables themselves. **Structured Query Language (SQL)** is the standard language used for interfacing with RDBMS. Notable RDBMS examples include Oracle Database, MySQL, Microsoft SQL Server, and PostgreSQL. |
@ -1,3 +0,0 @@ |
||||
# NoSQL |
||||
|
||||
**NoSQL** is a type of database that provides a mechanism for storage and retrieval of data which is modeled using means other than the tabular relations used in relational databases. NoSQL databases are ideal for big data and real-time web applications. They are flexible as they allow rapid development from changes. Some popular NoSQL databases include MongoDB, Apache Cassandra, Redis, Couchbase and HBase. While they may all be classified as NoSQL, they are all different in terms of their data model, with some being document-oriented, others key-value stores, wide-column stores, or graph databases. It's important to consider each one's data model when choosing a database for your application. |
@ -1,3 +0,0 @@ |
||||
# Key-Value |
||||
|
||||
In server-side game development, a **key-value** database is a type of non-relational database that uses a simple key-value method to store data. A key-value database stores data as a collection of key-value pairs in which a key serves as a unique identifier. Both keys and values can be anything, ranging from simple objects to complex compound objects. `Key` uniquely identifies a pair within the database; `Value` holds the data and is directly associated with its key. Different types of key-value databases offer different types of ways to deal with data, like handling data types, manipulating arrays, and more. Unlike relational databases, key-value databases do not require a fixed data model and are schema-free. |
@ -1,3 +0,0 @@ |
||||
# IOCP |
||||
|
||||
The **IOCP**, which stands for **Input/Output Completion Ports**, is a mechanism provided by Microsoft Windows to handle asynchronous I/O operations. It effectively handles the incoming and outgoing operations from the server side utilizing a specific number of threads. Its operation works in a way that whenever an I/O request is initiated, the system will create a packet of information related to the I/O operation, then when the operation completes, it pushes the packet to an IOCP. A pool of threads waits for these operations to complete. As soon as an operation completes, one of the threads from the pool picks up the complete I/O operation from the IOCP and starts processing it. It acts as a multiplexer that routes completed I/O operations to the thread pool, which is an efficient way to handle server-side game development tasks. |
@ -1,3 +0,0 @@ |
||||
# io_uring |
||||
|
||||
`IO_uring` is a high-performance I/O interface in the Linux kernel, which was introduced in version 5.1. It provides a scalable and efficient I/O submission and completion model, surpassing the traditional POSIX interfaces. Unlike the older mechanisms like `select`, `poll`, and `epoll`, or `IOCP` in Windows, `IO_uring` uses ring buffers that are shared between the application and the kernel. This minimizes the need for system calls, thus enhancing performance. The interface allows for queueing up I/O operations (reads, writes, syncs, and others), as well as submissions of multiple operations at once. Furthermore, `IO_uring` supports both buffered and direct I/O, and includes support for I/O priorities. |
@ -1,3 +0,0 @@ |
||||
# Registered IO |
||||
|
||||
`Registered I/O (RIO)` is an advanced Windows technology which is used to increase the performance of network applications. It offers a registered I/O buffer design that is designed for high volume, low latency networking applications. This programming model allows more efficient buffer usage by restricting dynamism and enabling more driver and hardware offloads. RIO's API can be used with any Winsock supported protocol, although its efficiency is greatest with protocols that can leverage offloads (like TCP and UDP). It requires Windows Server 2012, Windows 8, or newer versions. It should be noted that it requires significant program modifications as well as in depth understanding of IOCP and how it’s used by Windows networking APIs usually involving complex, low level programming. |
@ -1,3 +0,0 @@ |
||||
# epoll |
||||
|
||||
`epoll` is a Linux kernel system call introduced in version 2.5.44 that provides a scalable I/O event notification mechanism. It was designed to replace the less scalable `poll` and `select` system calls when handling a large number of file descriptors. `epoll` uses an event-driven programming approach. Instead of frequently asking the operating system to check every file descriptor, the application tells the operating system what to track and goes to sleep. Then, the operating system wakes up the app when an event occurs on one of the tracked descriptors. This mechanism significantly reduces resource usage and latency, which is critical for server-side game development that involves real-time communication and high-performance needs. |
@ -1,3 +0,0 @@ |
||||
# kqueue |
||||
|
||||
`kqueue` is a scalable event notification interface introduced in FreeBSD 4.1 and later adopted in NetBSD, OpenBSD, and Mac OS X. It provides a mechanism that allows you to track many kernel events with a single system call. `kqueue` can detect changes to files and directories, handle signals, process termination, and network I/O. For a server-side game developer, getting notifications about network I/O can be essential, and `kqueue` provides a means to efficiently do this. However, not all Unix-based and POSIX-compliant operating systems support `kqueue`, so alternatives such as `epoll` might be necessary depending on your platform. For instance, `kqueue` is not natively supported in Linux but is available through certain libraries. |
@ -1,3 +0,0 @@ |
||||
# select |
||||
|
||||
`Select` is an important system call that can handle multiple I/O operations concurrently. It comes in very handy when dealing with server-side programming due to its capacity to handle multiple connections at a time. `Select` resides in the operating system, awaiting for one or more of the I/O conditions it is monitoring to occur. Its main function is to monitor multiple file descriptors to see if they are ready for reading, writing or if an exceptional condition has occurred. It is ideally used in server-based games where the system has to deal with multiple clients simultaneously. It is quite crucial in applications where the extent of I/O activities is not determinable in advance. |
@ -1,3 +0,0 @@ |
||||
# WSA Poll |
||||
|
||||
`WSAPoll` is a method utilized in server side game development, specifically within the Windows Sockets 2 (Winsock) API. `WSAPoll` is designed to determine the status of one or more sockets, allowing the application to monitor multiple sockets in a single function call. Simply put, `WSAPoll` allows sockets to reside in collections, also known as Pollfd arrays. At runtime, the status of these sockets can be checked without blocking the application's execution. Therefore, it is commonly used in network applications where multiple sockets need to be monitored simultaneously. |
@ -0,0 +1 @@ |
||||
# Go |
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in new issue