From add6ca118332109e7e5570e13653332afb446d54 Mon Sep 17 00:00:00 2001 From: nehaturov-hue Date: Fri, 22 May 2026 18:16:16 +0200 Subject: [PATCH 1/3] feat(server-side-game-developer): add resource links to all 156 topics - 156/156 topics now have 3+ resource links - 486 total links, 0 duplicate URLs - Sources: Microsoft Learn, MDN, GeeksforGeeks, Wikipedia, AWS, Google Cloud, official docs (Docker, Redis, PostgreSQL, MongoDB, etc.) - All URLs verified HTTP 200 - No existing content modified --- .../content/actor-model@KUQEgHldZPOLwFoXqQ2vM.md | 7 ++++++- .../content/address-conversion@SBA7pa9o0AM0ZEBepd7UM.md | 7 ++++++- .../content/ai@dkCVwuy8GKeEi3VJar_Zo.md | 7 ++++++- .../content/akka-java@eAEpEUVZcSKO9uCIlMN5y.md | 7 ++++++- .../content/akknet-c@SsOz9Pj6Jc_55PgpmziL6.md | 7 ++++++- .../content/amazon-ml@U0RlO_puezQPZP0-iBXgW.md | 7 ++++++- .../content/api@a2pcxVTGdAPw8aLvdr19M.md | 7 ++++++- .../content/arp@JI_wUdT2hjsrvbIhLvHcT.md | 7 ++++++- .../content/asnc-await-c@mAXMpUDmhGOncnCRrENJv.md | 7 ++++++- .../content/asynchronous@ThBxS9xIMt9OrXfnto3rW.md | 7 ++++++- .../content/aws@Rkx2A6oWsddlCTseZlpRU.md | 7 ++++++- .../content/azure-ml@vBqwmlzoT5XVEhV9IeGso.md | 7 ++++++- .../content/azure@73uoFNGcCALxIuRNbebav.md | 7 ++++++- .../content/barrier@6k25amPkU9lnZ7FMNn_T6.md | 6 ++++++ .../content/bsd-socket@U_tZFM80W3xJx8jj4skCr.md | 7 ++++++- .../content/byte-manipulation@H21PanCggDfQt34-JzgfO.md | 7 ++++++- .../content/c@DuyUc9a-47Uz03yr4aeyg.md | 7 ++++++- .../content/capability@5kF1fqr-mn5-15e3aMa9k.md | 7 ++++++- .../content/cassandra@1jqSxk1nwByiQa1De81F3.md | 7 ++++++- .../content/category@NH2eQ1_nij1icTgoO027b.md | 7 ++++++- .../content/cc@E4H3hniIW6hKpH3Qr--N5.md | 6 ++++++ .../content/checksum@XxBl-zO7CF6DpOZ2bMDxJ.md | 7 ++++++- .../content/checksum@tBOvBpDi3SOKZjAmkxdM0.md | 7 ++++++- .../content/cipher@1788KFqsQBkYARqA0T5GX.md | 7 ++++++- .../content/cloud-ml@XvvlvDKfYRCcYtTdWohsd.md | 7 ++++++- .../content/cloud@hhtqvFfTCuVPT0OPu4Y1a.md | 7 ++++++- .../content/concurrency-java@RT9XvlxvIM_hHTtNmbva3.md | 7 ++++++- .../content/condition-variable@xR6pERldq4wPl9GVLHAhT.md | 7 ++++++- .../content/congestion-control@1GML0Jsfdb1Fn-0PNryiQ.md | 5 ++++- .../content/congestion-control@jsNsyrGzegVnjIF2l52vI.md | 7 ++++++- .../content/connection-hijacking@ubRiY3jdh3iS3diN482IU.md | 7 ++++++- .../content/connection@5sI3RHaLudq4TfpjoYeOp.md | 7 ++++++- .../content/containerization@k3FJY26SVxdZx4MLLE25h.md | 7 ++++++- .../content/coroutine@o0Y_hM0KXUApfsXG4PvOY.md | 5 ++++- .../content/couchbase@6KTj_giX2k9l2lPd_Fp-d.md | 7 ++++++- .../content/dal@dt_SmZuwklLimhupvjxC1.md | 7 ++++++- .../content/data-clustering@XCJvgUSS7-oDR-XGdDY33.md | 7 ++++++- .../content/data-transfer@5bJUcx3v4dpdlIsx7bFvK.md | 7 ++++++- .../content/databases@FLFaGZDg2MSG6_YHnWETM.md | 7 ++++++- .../datagram-construction@jnQAzUUnwpJgoRuRIFtSe.md | 7 ++++++- .../content/datagram@wD_HWc9YxPhlkilt585pg.md | 7 ++++++- .../content/deep-learning@jkWvfp4GqckYPQ48GtjlR.md | 7 ++++++- .../content/denial-of-service@TbXJO__4xSnzK1fvvJK86.md | 8 +++++++- .../content/dependency-injection@uTlxyDOtvt_Qp0gXLWO-j.md | 8 +++++++- .../content/descriptor@OAyMj6uLSv1yJ87YAjyZu.md | 8 +++++++- .../content/design-patterns@gB-TYpgUDV47bxznNJhYn.md | 8 +++++++- .../content/determinism@zFx1jjt1hKgCpYHFTzbZZ.md | 8 +++++++- .../content/dhcp@aTHJh-xw8soCxC1bIDdXm.md | 8 +++++++- .../content/dns@yNytLrQAMKBw4t73YRL3J.md | 8 +++++++- .../content/docker-compose@yAf7VDX7dyaT5AdlNnuKD.md | 8 +++++++- .../content/docker@zW_7VLeEHQp8fp_f5N__0.md | 8 +++++++- .../content/dump-analysis@1c6EqGv1g-d8M1i0vKImb.md | 8 +++++++- .../content/dynamodb@9vc7sFE_XakYXtKRMxLXi.md | 8 +++++++- .../content/erlang@QGtGx5LBEWa1DD3Y7ztUy.md | 8 +++++++- .../content/error-detection@vFM311xSa5OqNVove2f6j.md | 5 ++++- .../content/fiber@TVJrlUsg30YIM1yjsZfJI.md | 7 ++++++- .../content/frp@xDYOvIbXc-iJ2zOKqe0YL.md | 7 ++++++- .../content/function@YPvm8XD_FaFYCQ-b7-KsH.md | 7 ++++++- .../functional-programming@HXSWvhgT4L5w6xgOO-3kj.md | 6 ++++++ .../content/future--promises@zbIbPlqTNSbJUkqH9iLQv.md | 6 ++++++ .../content/gcp@wD6dUrS-tP2gpCHPghFp5.md | 7 ++++++- .../content/go@d5iQYn97vuoxJnCFGPdOa.md | 8 +++++++- .../content/goroutine-go@f-L_eaZd0EjBW9-n9Pllt.md | 7 ++++++- .../content/grpc@_uqTTBUYAzDHbEUkDzmzg.md | 7 ++++++- .../content/heavy-vs-lightweight@OYXKtl4A-vaK6yGO6hS6n.md | 8 +++++++- .../content/io_uring@YH7u1FKh85wz78J0stuzS.md | 5 ++++- .../content/iocp@7pgdOZomhGilBTwfJLMbm.md | 5 ++++- .../content/ip-addressing@3ZcJNDCHw2pFzewmoB-03.md | 8 +++++++- .../content/ip@tg94V7K0mgYhpkUMp_Scv.md | 8 +++++++- .../content/ipv4@pHVB0K8Vtk3ToD6n_f1wv.md | 8 +++++++- .../content/ipv6@TqBlAMfhARhlJed6xD7eg.md | 8 +++++++- .../content/java@LG8JPL1po-gEs1V5JyC8F.md | 8 +++++++- .../content/javascript@ufufnULqsglE5VhEIAdSI.md | 8 +++++++- .../content/json@y0ZJQQfi8Qx6sB4WnZlP5.md | 8 +++++++- .../content/kqueue@caK32NMMrn-3BGAXZoPPr.md | 5 ++++- .../content/kubernetes@lUBUUoETjfADmM4OPtwwX.md | 8 +++++++- .../content/link-capacity@OzY-LPcfj1sBm_0F0WbIJ.md | 8 +++++++- .../content/max-segment-scaling@1l5dhQWYPhUSg-cy5pSlK.md | 8 +++++++- .../content/memcached@ayeezKxQkXAPJMTShsOBU.md | 8 +++++++- .../content/message-queues@cw7WdFfL5HpeZ_n8wYk2t.md | 8 +++++++- .../content/mongodb@HYxtPW401-J6aYcTuiGnx.md | 8 +++++++- .../content/ms-sql@QMNUAKAuRI9lyf2_jUPsj.md | 8 +++++++- .../content/multithreading@3QSLUMKD0G08N3MIb1cG7.md | 7 ++++++- .../content/multithreading@_jd91rrAXGbJI9RhXlSx8.md | 7 ++++++- .../content/mutex@G_BEJKkJ1_Nc43aosy_iS.md | 7 ++++++- .../content/mysql@HsBqd08Ro0VJnx0FlumMQ.md | 6 ++++++ .../content/oorp@yWj70LpF4LKB8J6GbYvsq.md | 7 ++++++- .../content/ordered-vs-unordered@WMdCDmFsytsF2AWQXfzC8.md | 7 ++++++- .../content/orm@OyxWMFy8s7Lxko_K89fjo.md | 7 ++++++- .../content/out-of-band-data@3OMu3RM-6pMjqY1jAmC2-.md | 7 ++++++- .../content/packet-structure@CCxVnrGDKa1EROXgF_OAm.md | 7 ++++++- .../content/packet-vs-datagram@JE3uZ5U6oe6dVzsmglTl2.md | 7 ++++++- .../content/postgresql@dAiEwN7phwMyaitvM5kRl.md | 7 ++++++- .../content/proactor@Tvxe2NemcH21y-eB4bosv.md | 6 ++++++ .../programming-languages@6ilqzjvI4J1pUCmTJ33PA.md | 7 ++++++- .../programming-techniques@tGQu18PWDatW7HvkTP-uh.md | 7 ++++++- .../content/protobuf@w2zbab_6Gxw6AWS0N759U.md | 7 ++++++- .../content/pthread@HU0yUyl89WD8WnR9PJn7l.md | 7 ++++++- .../content/pytorch@LTSIfq10qDJMTCnIIyqvb.md | 7 ++++++- .../content/rabbitmq@UESjGrFyUbNf4pQamaBoy.md | 6 ++++++ .../content/reactive-approach@LVwGXmZhMewGQy61qwNyu.md | 7 ++++++- .../content/reactive-approach@Vl-WW0LThrQTOO_tFl51B.md | 7 ++++++- .../content/reactive-model@p0P3ZGq_QTCop0vMwe7P3.md | 7 ++++++- .../content/reactor@7mYpgn2gr-5vAYW-UR7_x.md | 7 ++++++- .../content/redis@7YNaELVcoV7DV1Fa06USi.md | 7 ++++++- .../content/registered-io@94hJX1iGifDzIuaU3zU5j.md | 5 ++++- .../content/reliability@2jDV-ovvrkBbTTLk5VbR9.md | 7 ++++++- .../content/reliability@Vh81GnOUOZvDOlOyI5PwT.md | 7 ++++++- .../reliable-transmission@X2KHWgQZDHSVDsTRMUwSj.md | 5 ++++- .../reliable-vs-unreliable@MoyBGT9bscUe8vMN4J0bG.md | 7 ++++++- .../content/resource-usage@LkGI0VpJ3WkpPHkJhJgWk.md | 8 +++++++- .../content/rest@Oq3GQ5gBUxIl1Qe8NB3LB.md | 7 ++++++- .../content/routing@bYb7nA-Vn9e6VtdbUT3tq.md | 7 ++++++- .../content/rpc--rest@YxaroYL_Az0vKRCeu2jsp.md | 7 ++++++- .../content/security@qkO0s9zR0sAnjTRWcrLQY.md | 7 ++++++- .../content/segment-structure@zTCmPUp9j5P1wpGgiboMa.md | 7 ++++++- .../content/select@5-5toy2CblZPCV9d5QPEo.md | 4 +++- .../content/selective-ack@SPpOO25b7wpajWDIrKi1u.md | 7 ++++++- .../content/semaphore@DYvzGc_r0SlOArPPc1gNI.md | 4 ++++ .../content/serialization@TS6dz61rUSxm-SqmK6JKe.md | 7 ++++++- .../server-side-development@rQArtuVKGVgLn_fw9yO3b.md | 7 ++++++- .../content/serverless@DOmbRRK_RRPElOuTB7AAK.md | 7 ++++++- .../content/sharding@3use5vuLBJTk40wOg9S-X.md | 7 ++++++- .../content/socket-programming@HvpuFTCknHPhnFkhmhRc4.md | 7 ++++++- .../content/spinlock@lVXfA_oZr82mFfBvLnnRK.md | 7 ++++++- .../content/ssl@PSvPjaVtko71BeIA-hYqf.md | 7 ++++++- .../streaming-vs-broadcast@pJw8fN1dt3BABtZVz7wGE.md | 7 ++++++- .../content/synchronization@idmrgKgVWVLZYANbXiZnS.md | 7 ++++++- .../content/synchrony@l5QTk408Ubagw8XzRAfoZ.md | 7 ++++++- .../content/task-based@LKPcEeqBOPhQOztD3cM3T.md | 7 ++++++- .../content/tcp-vs-udp@RfTcTUjaXyp49FnUf44MK.md | 7 ++++++- .../content/tcp@mUCidjOsVLMAVDf2jmV5F.md | 7 ++++++- .../content/tdd@FKOhe21PVlaKIoZI4hd49.md | 7 ++++++- .../content/tensorflow@iJE9RnKC8QjPnsFeZAbtl.md | 6 ++++++ .../thread-building-block-c@tiG0mZpLJ2zUr2IPYyhnv.md | 7 ++++++- .../content/thread-local-storage@IeD-oQ1bkwlKNC-R0lJjZ.md | 8 +++++++- .../content/timestamp@6KAYNPLEFMp6Jha8FLMAU.md | 8 +++++++- .../content/tls@FX8ASd-QzTUFDHzBB93WK.md | 8 +++++++- .../content/toml@l8iEC3g0ICSfmIE1MxcUl.md | 8 +++++++- .../content/transactions@r2OeI7YC1BLLfctC8q69W.md | 8 +++++++- .../content/udp@IMyHwnXxJK6oFxzOMLxjS.md | 8 +++++++- .../content/update-process@3Eat22rFjUl4eTtGz8u4N.md | 8 +++++++- .../content/veto@ZLTfpRZ0rF-mtd7Z0R2WF.md | 8 +++++++- .../content/vulnerability@MwLWDlciJOq_0n5S3GoF-.md | 8 +++++++- .../content/window-scaling@zvBKjceXRSfEe_3MDCEL5.md | 7 ++++++- .../content/windows@mW2L_9NckgPRH7g5W9NHq.md | 7 ++++++- .../content/winsock@GfTXffisLyQgp66zcQ7Py.md | 7 ++++++- .../content/wsa-poll@D9Yeyn8phDhB1ohMWccgr.md | 7 +++++-- .../content/xml@v43K6srds7m5SQFqNaY0T.md | 7 ++++++- .../content/yaml@uHcUSVLz_2-Usk6ckSvwr.md | 7 ++++++- 150 files changed, 916 insertions(+), 142 deletions(-) diff --git a/src/data/roadmaps/server-side-game-developer/content/actor-model@KUQEgHldZPOLwFoXqQ2vM.md b/src/data/roadmaps/server-side-game-developer/content/actor-model@KUQEgHldZPOLwFoXqQ2vM.md index eb98e77881be..6ba68136629b 100644 --- a/src/data/roadmaps/server-side-game-developer/content/actor-model@KUQEgHldZPOLwFoXqQ2vM.md +++ b/src/data/roadmaps/server-side-game-developer/content/actor-model@KUQEgHldZPOLwFoXqQ2vM.md @@ -1,3 +1,8 @@ # Actor Model -The **Actor Model** is a conceptual model to deal with concurrent computation. It defines some general rules for how the system's components should behave and interact with each other. In the Actor Model, each object (actor) has its own private state and communication with other actors is done by exchanging messages. Actors read messages from a personal mailbox and may change their own inner state, create more actors, or send messages to other actors. The Actor Model makes it easier for developers to write concurrent and distributed systems by providing high-level abstractions over low-level threading details. \ No newline at end of file +The **Actor Model** is a conceptual model to deal with concurrent computation. It defines some general rules for how the system's components should behave and interact with each other. In the Actor Model, each object (actor) has its own private state and communication with other actors is done by exchanging messages. Actors read messages from a personal mailbox and may change their own inner state, create more actors, or send messages to other actors. The Actor Model makes it easier for developers to write concurrent and distributed systems by providing high-level abstractions over low-level threading details. +Learn more from the following resources: + +- [@article@How the Actor Model Works by Example - TheServerSide](https://www.theserverside.com/blog/Coffee-Talk-Java-News-Stories-and-Opinions/How-the-Actor-Model-works-by-example) +- [@official@How the Actor Model Meets the Needs of Modern Distributed Systems - Akka Docs](https://doc.akka.io/libraries/akka-core/current/typed/guide/actors-intro.html) +- [@article@Actor Model - Wikipedia](https://en.wikipedia.org/wiki/Actor_model) diff --git a/src/data/roadmaps/server-side-game-developer/content/address-conversion@SBA7pa9o0AM0ZEBepd7UM.md b/src/data/roadmaps/server-side-game-developer/content/address-conversion@SBA7pa9o0AM0ZEBepd7UM.md index e318652badbd..77f066cd9ed9 100644 --- a/src/data/roadmaps/server-side-game-developer/content/address-conversion@SBA7pa9o0AM0ZEBepd7UM.md +++ b/src/data/roadmaps/server-side-game-developer/content/address-conversion@SBA7pa9o0AM0ZEBepd7UM.md @@ -1,3 +1,8 @@ # Address Conversion -In socket programming, address conversion functions are important for handling internet addresses. Functions like `inet_pton()` (presentation to network) and `inet_ntop()` (network to presentation) are frequently used. `inet_pton()` function converts an IP address in human-friendly format (IPv4 addresses in dotted-decimal notation or IPv6 addresses in hexadecimal notation) to its equivalent binary form. Conversely, `inet_ntop()` function does the reverse, i.e., it converts an IP address in binary form to human-friendly format. These functions are important tools when dealing with IP addresses in lower-level network programming. \ No newline at end of file +In socket programming, address conversion functions are important for handling internet addresses. Functions like `inet_pton()` (presentation to network) and `inet_ntop()` (network to presentation) are frequently used. `inet_pton()` function converts an IP address in human-friendly format (IPv4 addresses in dotted-decimal notation or IPv6 addresses in hexadecimal notation) to its equivalent binary form. Conversely, `inet_ntop()` function does the reverse, i.e., it converts an IP address in binary form to human-friendly format. These functions are important tools when dealing with IP addresses in lower-level network programming. +Learn more from the following resources: + +- [@official@inet_pton(3) - Linux Manual Page - man7.org](https://man7.org/linux/man-pages/man3/inet_pton.3.html) +- [@official@inet_pton - The Open Group Base Specifications](https://pubs.opengroup.org/onlinepubs/009619199/inet_pton.htm) +- [@official@inet_pton(3) - OpenBSD Manual Pages](https://man.openbsd.org/inet_pton.3) diff --git a/src/data/roadmaps/server-side-game-developer/content/ai@dkCVwuy8GKeEi3VJar_Zo.md b/src/data/roadmaps/server-side-game-developer/content/ai@dkCVwuy8GKeEi3VJar_Zo.md index 5b013675036f..251fcb233c58 100644 --- a/src/data/roadmaps/server-side-game-developer/content/ai@dkCVwuy8GKeEi3VJar_Zo.md +++ b/src/data/roadmaps/server-side-game-developer/content/ai@dkCVwuy8GKeEi3VJar_Zo.md @@ -1,3 +1,8 @@ # AI -Artificial Intelligence (AI) in server side game development refers to the use of algorithms and computational procedures to create systems capable of performing tasks that would require human intelligence. Such tasks include learning and adapting to change, recognizing speech, or even making decisions. In game development, AI is often used to give non-player characters (NPCs) their own 'intelligence', making them even more life-like. This could be as simple as the ability to follow a player around in an environment, or as complex as crafting strategies for combat. AI can also be used to generate procedurally or dynamically generated content, creating potentially infinite unique experiences for the player. AI in games is often programmed in a way where it must strike a balance between appearing intelligent and providing an enjoyable experience for the player. \ No newline at end of file +Artificial Intelligence (AI) in server side game development refers to the use of algorithms and computational procedures to create systems capable of performing tasks that would require human intelligence. Such tasks include learning and adapting to change, recognizing speech, or even making decisions. In game development, AI is often used to give non-player characters (NPCs) their own 'intelligence', making them even more life-like. This could be as simple as the ability to follow a player around in an environment, or as complex as crafting strategies for combat. AI can also be used to generate procedurally or dynamically generated content, creating potentially infinite unique experiences for the player. AI in games is often programmed in a way where it must strike a balance between appearing intelligent and providing an enjoyable experience for the player. +Learn more from the following resources: + +- [@article@Behavior Tree (Artificial Intelligence) - Wikipedia](https://en.wikipedia.org/wiki/Behavior_tree_(artificial_intelligence,_robotics_and_control)) +- [@article@How to Create Smarter Enemies with Behavior Trees - Game Developer](https://www.gamedeveloper.com/programming/how-to-create-smarter-enemies-with-behavior-trees) +- [@official@NVIDIA Game Development](https://developer.nvidia.com/industries/game-development) diff --git a/src/data/roadmaps/server-side-game-developer/content/akka-java@eAEpEUVZcSKO9uCIlMN5y.md b/src/data/roadmaps/server-side-game-developer/content/akka-java@eAEpEUVZcSKO9uCIlMN5y.md index b805f4713bb6..a2b165f927f4 100644 --- a/src/data/roadmaps/server-side-game-developer/content/akka-java@eAEpEUVZcSKO9uCIlMN5y.md +++ b/src/data/roadmaps/server-side-game-developer/content/akka-java@eAEpEUVZcSKO9uCIlMN5y.md @@ -1,3 +1,8 @@ # Akka (Java) -Akka is an open-source toolkit and runtime simplifying the construction of concurrent and distributed applications on the JVM. It implements the Actor Model for handling concurrency, allowing developers to create systems that can handle high volumes of transactions in a distributed environment. Yet, Akka is not only about Actors, it features other tools for building reactive applications, including Event Sourcing, CQRS, Cluster Sharding, and Distributed Data. Written in Scala and providing APIs in both Scala and Java, Akka powers numerous business-critical systems in sectors such as finance, tech, streaming, and others. \ No newline at end of file +Akka is an open-source toolkit and runtime simplifying the construction of concurrent and distributed applications on the JVM. It implements the Actor Model for handling concurrency, allowing developers to create systems that can handle high volumes of transactions in a distributed environment. Yet, Akka is not only about Actors, it features other tools for building reactive applications, including Event Sourcing, CQRS, Cluster Sharding, and Distributed Data. Written in Scala and providing APIs in both Scala and Java, Akka powers numerous business-critical systems in sectors such as finance, tech, streaming, and others. +Learn more from the following resources: + +- [@official@Akka Documentation](https://doc.akka.io/index.html) +- [@official@Introduction to Actors - Akka Docs](https://doc.akka.io/libraries/akka-core/current/typed/actors.html) +- [@official@Java Akka - Play Framework Documentation](https://www.playframework.com/documentation/2.9.x/JavaAkka) diff --git a/src/data/roadmaps/server-side-game-developer/content/akknet-c@SsOz9Pj6Jc_55PgpmziL6.md b/src/data/roadmaps/server-side-game-developer/content/akknet-c@SsOz9Pj6Jc_55PgpmziL6.md index 17ced23e1c3e..b3974eb7e542 100644 --- a/src/data/roadmaps/server-side-game-developer/content/akknet-c@SsOz9Pj6Jc_55PgpmziL6.md +++ b/src/data/roadmaps/server-side-game-developer/content/akknet-c@SsOz9Pj6Jc_55PgpmziL6.md @@ -1,3 +1,8 @@ # Akka.net (C#) -"Akka.NET" is a toolkit and a runtime for designing concurrent and distributed applications. This technology is directly inspired by the Actor Model concept, implementing its principles to create robust and highly functional server-side applications. Akka.NET allows developers to create systems that are capable of handling millions of messages in a concurrent manner while maintaining high performance. It supports actor-based concurrency, network and cloud distribution, and powerful event sourcing techniques. Building systems with Akka.NET involve not only working with primary actors but also working with different types, including the likes of Persistent actors, FSM (Finite State Machine) actors and more. Please remember, Akka.NET is a part of the broader Akka toolkit, which also includes libraries for Java and Scala. \ No newline at end of file +"Akka.NET" is a toolkit and a runtime for designing concurrent and distributed applications. This technology is directly inspired by the Actor Model concept, implementing its principles to create robust and highly functional server-side applications. Akka.NET allows developers to create systems that are capable of handling millions of messages in a concurrent manner while maintaining high performance. It supports actor-based concurrency, network and cloud distribution, and powerful event sourcing techniques. Building systems with Akka.NET involve not only working with primary actors but also working with different types, including the likes of Persistent actors, FSM (Finite State Machine) actors and more. Please remember, Akka.NET is a part of the broader Akka toolkit, which also includes libraries for Java and Scala. +Learn more from the following resources: + +- [@official@Akka.NET Tutorial Overview](https://getakka.net/articles/intro/getting-started/tutorial-overview.html) +- [@official@Akka.NET Home - Documentation](https://getakka.net/) +- [@article@Our First Akka.NET Application - Petabridge Bootcamp](https://petabridge.com/bootcamp/lessons/unit-0/first-akkadotnet-app/) diff --git a/src/data/roadmaps/server-side-game-developer/content/amazon-ml@U0RlO_puezQPZP0-iBXgW.md b/src/data/roadmaps/server-side-game-developer/content/amazon-ml@U0RlO_puezQPZP0-iBXgW.md index 080506dde4ba..00a2368112d6 100644 --- a/src/data/roadmaps/server-side-game-developer/content/amazon-ml@U0RlO_puezQPZP0-iBXgW.md +++ b/src/data/roadmaps/server-side-game-developer/content/amazon-ml@U0RlO_puezQPZP0-iBXgW.md @@ -1,3 +1,8 @@ # Amazon ML -Amazon Machine Learning (Amazon ML) is a robust, cloud-based service that makes it easy for developers of all skill levels to use machine learning technology. It provides visualization tools and wizards that guide you through the process of creating machine learning (ML) models without needing to learn complex ML algorithms and technology. With Amazon ML, you can create and train your data models, and then use those models to make predictions. These predictions can be used to implement sophisticated applications, such as user trend detection, sentiment analysis, fraud detection, and much more. \ No newline at end of file +Amazon Machine Learning (Amazon ML) is a robust, cloud-based service that makes it easy for developers of all skill levels to use machine learning technology. It provides visualization tools and wizards that guide you through the process of creating machine learning (ML) models without needing to learn complex ML algorithms and technology. With Amazon ML, you can create and train your data models, and then use those models to make predictions. These predictions can be used to implement sophisticated applications, such as user trend detection, sentiment analysis, fraud detection, and much more. +Learn more from the following resources: + +- [@official@Amazon SageMaker AI Documentation](https://docs.aws.amazon.com/sagemaker/) +- [@official@Getting Started with Machine Learning on Amazon SageMaker AI](https://aws.amazon.com/sagemaker/ai/getting-started/) +- [@article@Training AI Models for Skill-Based Matchmaking Using Amazon SageMaker - AWS Games Blog](https://aws.amazon.com/blogs/gametech/training-ai-models-for-skill-based-matchmaking-using-amazon-sagemaker-ai/) diff --git a/src/data/roadmaps/server-side-game-developer/content/api@a2pcxVTGdAPw8aLvdr19M.md b/src/data/roadmaps/server-side-game-developer/content/api@a2pcxVTGdAPw8aLvdr19M.md index 56d7fd177e1a..9bd228306a25 100644 --- a/src/data/roadmaps/server-side-game-developer/content/api@a2pcxVTGdAPw8aLvdr19M.md +++ b/src/data/roadmaps/server-side-game-developer/content/api@a2pcxVTGdAPw8aLvdr19M.md @@ -1,3 +1,8 @@ # API -API (Application Programming Interface) is a set of rules and protocols implemented for building and integrating software applications. APIs enable two different software applications to communicate and work together. They work as a bridge connecting two software systems, enabling them to exchange information and execute functions. In the context of server-side game development and socket programming, APIs may be used to handle connection establishment, data transmission, and other necessary network communication operations. APIs can be customized or built based on standard protocols such as HTTP for web services, or TCP/UDP for lower-level socket communications. \ No newline at end of file +API (Application Programming Interface) is a set of rules and protocols implemented for building and integrating software applications. APIs enable two different software applications to communicate and work together. They work as a bridge connecting two software systems, enabling them to exchange information and execute functions. In the context of server-side game development and socket programming, APIs may be used to handle connection establishment, data transmission, and other necessary network communication operations. APIs can be customized or built based on standard protocols such as HTTP for web services, or TCP/UDP for lower-level socket communications. +Learn more from the following resources: + +- [@official@Web API Design Best Practices - Microsoft Azure Architecture](https://learn.microsoft.com/en-us/azure/architecture/best-practices/api-design) +- [@article@Best Practices for REST API Design - Stack Overflow](https://stackoverflow.blog/2020/03/02/best-practices-for-rest-api-design/) +- [@article@API Architecture Patterns and Best Practices - LogicMonitor](https://www.logicmonitor.com/deep-dive/api-monitoring-tools/api-architecture) diff --git a/src/data/roadmaps/server-side-game-developer/content/arp@JI_wUdT2hjsrvbIhLvHcT.md b/src/data/roadmaps/server-side-game-developer/content/arp@JI_wUdT2hjsrvbIhLvHcT.md index 250ac7369db4..c76640af069b 100644 --- a/src/data/roadmaps/server-side-game-developer/content/arp@JI_wUdT2hjsrvbIhLvHcT.md +++ b/src/data/roadmaps/server-side-game-developer/content/arp@JI_wUdT2hjsrvbIhLvHcT.md @@ -1,3 +1,8 @@ # ARP -**ARP** or **Address Resolution Protocol** is a protocol used to map an IP address to a physical address on the network, such as a MAC address. A device uses ARP when it needs to forward a packet to another device on the same network but only has the IP address. ARP broadcasts a request packet to all devices on the local network to find who owns the IP address. The device with the matching IP address replies with its MAC address. ARP maintains a cache of previously resolved addresses to minimize traffic. It is an essential protocol in network communication, but it also exposes certain security vulnerabilities like ARP spoofing. \ No newline at end of file +**ARP** or **Address Resolution Protocol** is a protocol used to map an IP address to a physical address on the network, such as a MAC address. A device uses ARP when it needs to forward a packet to another device on the same network but only has the IP address. ARP broadcasts a request packet to all devices on the local network to find who owns the IP address. The device with the matching IP address replies with its MAC address. ARP maintains a cache of previously resolved addresses to minimize traffic. It is an essential protocol in network communication, but it also exposes certain security vulnerabilities like ARP spoofing. +Learn more from the following resources: + +- [@article@ARP (Address Resolution Protocol) Explained - NetworkLessons](https://networklessons.com/ip-services/arp-address-resolution-protocol-explained) +- [@article@What is ARP? Address Resolution Protocol Explained - Splunk](https://www.splunk.com/en_us/blog/learn/address-resolution-protocol-arp.html) +- [@article@Address Resolution Protocol - Wikipedia](https://en.wikipedia.org/wiki/Address_Resolution_Protocol) diff --git a/src/data/roadmaps/server-side-game-developer/content/asnc-await-c@mAXMpUDmhGOncnCRrENJv.md b/src/data/roadmaps/server-side-game-developer/content/asnc-await-c@mAXMpUDmhGOncnCRrENJv.md index ebef1a69270a..ff10dd07619d 100644 --- a/src/data/roadmaps/server-side-game-developer/content/asnc-await-c@mAXMpUDmhGOncnCRrENJv.md +++ b/src/data/roadmaps/server-side-game-developer/content/asnc-await-c@mAXMpUDmhGOncnCRrENJv.md @@ -1,3 +1,8 @@ # Async-await (C#) -`Async/await` are extensions of Promises in JavaScript that allow for handling asynchronous code in a more synchronous manner. Using `async` keyword before a function, means the function returns a Promise. On the other hand, `await` keyword is used to pause async function execution until a Promise is resolved or rejected, and to resume execution of the async function after fulfillments. Before the `await` keyword, the Promise resolves to the actual value. Notably, `await` only works within async function block. \ No newline at end of file +`Async/await` are extensions of Promises in JavaScript that allow for handling asynchronous code in a more synchronous manner. Using `async` keyword before a function, means the function returns a Promise. On the other hand, `await` keyword is used to pause async function execution until a Promise is resolved or rejected, and to resume execution of the async function after fulfillments. Before the `await` keyword, the Promise resolves to the actual value. Notably, `await` only works within async function block. +Learn more from the following resources: + +- [@official@Asynchronous Programming in C# - Microsoft Learn](https://learn.microsoft.com/en-us/dotnet/csharp/asynchronous-programming/) +- [@article@C# Async/Await Explained: Complete Guide with Examples - NDepend](https://blog.ndepend.com/c-async-await-explained/) +- [@article@Beginner's Guide to Async and Await in C# - Zero To Mastery](https://zerotomastery.io/blog/async-await-csharp/) diff --git a/src/data/roadmaps/server-side-game-developer/content/asynchronous@ThBxS9xIMt9OrXfnto3rW.md b/src/data/roadmaps/server-side-game-developer/content/asynchronous@ThBxS9xIMt9OrXfnto3rW.md index c4392bc35db7..d7b28a000cdd 100644 --- a/src/data/roadmaps/server-side-game-developer/content/asynchronous@ThBxS9xIMt9OrXfnto3rW.md +++ b/src/data/roadmaps/server-side-game-developer/content/asynchronous@ThBxS9xIMt9OrXfnto3rW.md @@ -1,3 +1,8 @@ # Asynchronous -**Asynchronous programming** is a programming paradigm where the execution of functions or routines does not wait for the activities within them to complete before moving on to subsequent ones. This allows for tasks to be processed independently, making the most of system resources. When a function contains an operation such as I/O, database access, or network communication, which may take a long time to complete, this function is wrapped into a future or promise and sent for execution. Meanwhile, the core program continues to run. When the wrapped function gets executed, a callback function is used to notify that the computation or I/O is complete. This forms the core of non-blocking or asynchronous execution. It is widely used in server-side programming, game development, and any scenario where I/O latency or user experience is a concern. Notably, it is at the core of Node.js and many modern web frameworks. \ No newline at end of file +**Asynchronous programming** is a programming paradigm where the execution of functions or routines does not wait for the activities within them to complete before moving on to subsequent ones. This allows for tasks to be processed independently, making the most of system resources. When a function contains an operation such as I/O, database access, or network communication, which may take a long time to complete, this function is wrapped into a future or promise and sent for execution. Meanwhile, the core program continues to run. When the wrapped function gets executed, a callback function is used to notify that the computation or I/O is complete. This forms the core of non-blocking or asynchronous execution. It is widely used in server-side programming, game development, and any scenario where I/O latency or user experience is a concern. Notably, it is at the core of Node.js and many modern web frameworks. +# Learn more from the following resources: + +- [@article@Asynchronous Programming in Python - Velotio](https://www.velotio.com/engineering-blog/asynchronous-programming-python-an-introduction) +- [@article@C++ Coroutines for Async Development - Whole Tomato](https://www.wholetomato.com/blog/cpp-coroutines-async-development/) +- [@official@Asynchronous JavaScript - MDN Web Docs](https://developer.mozilla.org/en-US/docs/Learn_web_development/Extensions/Async_JS) diff --git a/src/data/roadmaps/server-side-game-developer/content/aws@Rkx2A6oWsddlCTseZlpRU.md b/src/data/roadmaps/server-side-game-developer/content/aws@Rkx2A6oWsddlCTseZlpRU.md index f77c40520967..2c2bdf899abe 100644 --- a/src/data/roadmaps/server-side-game-developer/content/aws@Rkx2A6oWsddlCTseZlpRU.md +++ b/src/data/roadmaps/server-side-game-developer/content/aws@Rkx2A6oWsddlCTseZlpRU.md @@ -1,3 +1,8 @@ # Amazon Web Services -**Amazon Web Services (AWS)** is a secure cloud services platform offered by Amazon. It provides a broad set of infrastructure services, such as computing power, storage options, networking and databases, delivered on-demand with pay-as-you-go pricing. AWS services assist server side game developers in many tasks such as storing player data, syncing games across devices, and even hosting multiplayer game servers. These services help developers scale their games to a world-wide audience without the need for up-front investments in costly hardware and infrastructure. A popular choice for start-ups and large game development companies alike, AWS has an extensive, feature-rich set of tools that allow developers to deploy, monitor and scale applications quickly. \ No newline at end of file +**Amazon Web Services (AWS)** is a secure cloud services platform offered by Amazon. It provides a broad set of infrastructure services, such as computing power, storage options, networking and databases, delivered on-demand with pay-as-you-go pricing. AWS services assist server side game developers in many tasks such as storing player data, syncing games across devices, and even hosting multiplayer game servers. These services help developers scale their games to a world-wide audience without the need for up-front investments in costly hardware and infrastructure. A popular choice for start-ups and large game development companies alike, AWS has an extensive, feature-rich set of tools that allow developers to deploy, monitor and scale applications quickly. +# Learn more from the following resources: + +- [@official@What is Amazon GameLift Servers? - AWS Documentation](https://docs.aws.amazon.com/gameliftservers/latest/developerguide/gamelift-intro.html) +- [@official@Amazon GameLift Family - AWS](https://aws.amazon.com/gamelift/) +- [@official@Getting Started with Amazon GameLift Servers - AWS Documentation](https://docs.aws.amazon.com/gameliftservers/latest/developerguide/getting-started-intro.html) diff --git a/src/data/roadmaps/server-side-game-developer/content/azure-ml@vBqwmlzoT5XVEhV9IeGso.md b/src/data/roadmaps/server-side-game-developer/content/azure-ml@vBqwmlzoT5XVEhV9IeGso.md index 0e93e83cccec..58de3875804d 100644 --- a/src/data/roadmaps/server-side-game-developer/content/azure-ml@vBqwmlzoT5XVEhV9IeGso.md +++ b/src/data/roadmaps/server-side-game-developer/content/azure-ml@vBqwmlzoT5XVEhV9IeGso.md @@ -1,3 +1,8 @@ # Azure ML -Azure ML is a cloud-based service provided by Microsoft for building, training, and deploying machine learning models. It provides a suite of tools including automated machine learning and model management services, bolstering the productivity of data scientists and making complex machine learning tasks more achievable. Azure ML is designed to work with popular data science and machine learning frameworks such as PyTorch, TensorFlow, and scikit-learn. It bestows the capabilities of handling large volumes of data, providing scalability, and offering real-time insights. Furthermore, it supports open-source technologies, making it flexible for a wide array of applications. Azure ML stresses on high-level security and compliance, complying with major global and industry-specific standards. It's a comprehensive tool aimed at accelerating the entire machine learning lifecycle. \ No newline at end of file +Azure ML is a cloud-based service provided by Microsoft for building, training, and deploying machine learning models. It provides a suite of tools including automated machine learning and model management services, bolstering the productivity of data scientists and making complex machine learning tasks more achievable. Azure ML is designed to work with popular data science and machine learning frameworks such as PyTorch, TensorFlow, and scikit-learn. It bestows the capabilities of handling large volumes of data, providing scalability, and offering real-time insights. Furthermore, it supports open-source technologies, making it flexible for a wide array of applications. Azure ML stresses on high-level security and compliance, complying with major global and industry-specific standards. It's a comprehensive tool aimed at accelerating the entire machine learning lifecycle. +# Learn more from the following resources: + +- [@official@Azure Machine Learning Documentation - Microsoft Learn](https://learn.microsoft.com/en-us/azure/machine-learning/?view=azureml-api-2) +- [@official@Azure Machine Learning Product Page - Microsoft](https://azure.microsoft.com/en-us/products/machine-learning) +- [@official@What is Azure Machine Learning? - Microsoft Learn](https://learn.microsoft.com/en-us/azure/machine-learning/overview-what-is-azure-machine-learning?view=azureml-api-2) diff --git a/src/data/roadmaps/server-side-game-developer/content/azure@73uoFNGcCALxIuRNbebav.md b/src/data/roadmaps/server-side-game-developer/content/azure@73uoFNGcCALxIuRNbebav.md index 32b50d4161f8..51d2f4e6c647 100644 --- a/src/data/roadmaps/server-side-game-developer/content/azure@73uoFNGcCALxIuRNbebav.md +++ b/src/data/roadmaps/server-side-game-developer/content/azure@73uoFNGcCALxIuRNbebav.md @@ -1,3 +1,8 @@ # Microsoft Azure -Azure is Microsoft's public cloud computing platform. Azure provides a broad spectrum of cloud services, including those for analytics, storage, and networking. As a server-side game developer, you can use these functionalities to build, deploy, and manage applications and services through Microsoft-managed data centers. Furthermore, Azure supports a wide range of tools and frameworks, including both Microsoft-specific and third-party software. It also offers 4 different forms of cloud computing: infrastructure as a service (IaaS), platform as a service (PaaS), software as a service (SaaS), and serverless. Each allows developers to choose the level of control and complexity they wish to maintain over their application and infrastructure. \ No newline at end of file +Azure is Microsoft's public cloud computing platform. Azure provides a broad spectrum of cloud services, including those for analytics, storage, and networking. As a server-side game developer, you can use these functionalities to build, deploy, and manage applications and services through Microsoft-managed data centers. Furthermore, Azure supports a wide range of tools and frameworks, including both Microsoft-specific and third-party software. It also offers 4 different forms of cloud computing: infrastructure as a service (IaaS), platform as a service (PaaS), software as a service (SaaS), and serverless. Each allows developers to choose the level of control and complexity they wish to maintain over their application and infrastructure. +# Learn more from the following resources: + +- [@official@Azure Gaming Documentation - Microsoft Learn](https://learn.microsoft.com/en-us/gaming/azure/) +- [@official@Azure Documentation - Microsoft Learn](https://learn.microsoft.com/en-us/azure/) +- [@official@Azure Virtual Machines - Microsoft](https://azure.microsoft.com/en-us/products/virtual-machines) diff --git a/src/data/roadmaps/server-side-game-developer/content/barrier@6k25amPkU9lnZ7FMNn_T6.md b/src/data/roadmaps/server-side-game-developer/content/barrier@6k25amPkU9lnZ7FMNn_T6.md index 0a0c21f2a7a2..c7d1c644d56f 100644 --- a/src/data/roadmaps/server-side-game-developer/content/barrier@6k25amPkU9lnZ7FMNn_T6.md +++ b/src/data/roadmaps/server-side-game-developer/content/barrier@6k25amPkU9lnZ7FMNn_T6.md @@ -1,3 +1,9 @@ # Barrier `Barrier` in server-side game development refers to a type of synchronization method that can help manage multiple threads in a game's code. When a barrier point is set, all threads that reach this point are prevented from progressing until all the threads have reached this barrier. This functionality is a crucial aspect in synchronization to prevent inconsistencies and unsynchronized access to shared resources. It allows developers to ensure all processes are completed or all information is updated before moving on to the next step in the game's runtime. Barriers can be applied in various instances such as, but not limited to, game start-up, level completion, or during more complex inter-thread communications. + +# Learn more from the following resources: + +- [@article@Synchronization Primitives in C++20 - KDAB](https://www.kdab.com/synchronization-primitives-in-c20/) +- [@article@Multithreading for Game Engines - Vulkan Guide](https://www.vkguide.dev/docs/extra-chapter/multithreading/) +- [@official@Synchronization Primitives Overview - Microsoft .NET](https://learn.microsoft.com/en-us/dotnet/standard/threading/overview-of-synchronization-primitives) diff --git a/src/data/roadmaps/server-side-game-developer/content/bsd-socket@U_tZFM80W3xJx8jj4skCr.md b/src/data/roadmaps/server-side-game-developer/content/bsd-socket@U_tZFM80W3xJx8jj4skCr.md index 071044119a3b..4c54acc68a90 100644 --- a/src/data/roadmaps/server-side-game-developer/content/bsd-socket@U_tZFM80W3xJx8jj4skCr.md +++ b/src/data/roadmaps/server-side-game-developer/content/bsd-socket@U_tZFM80W3xJx8jj4skCr.md @@ -1,3 +1,8 @@ # BSD Socket -The BSD sockets API is an application programming interface (API) for network communication originally developed as part of the Berkeley Software Distribution (BSD). This API provides a set of functions for creating and manipulating network sockets in operating systems. It has been widely adopted in a variety of platforms due to its simplicity and ease of use for networking tasks. The BSD socket API supports various network protocols and is extensible to support new protocols. It allows low-level access to network services, with the facilities to manage connections, send and receive data, and handle multiple connections concurrently. The API supports both connection-oriented (TCP) and connectionless (UDP) network protocols. \ No newline at end of file +The BSD sockets API is an application programming interface (API) for network communication originally developed as part of the Berkeley Software Distribution (BSD). This API provides a set of functions for creating and manipulating network sockets in operating systems. It has been widely adopted in a variety of platforms due to its simplicity and ease of use for networking tasks. The BSD socket API supports various network protocols and is extensible to support new protocols. It allows low-level access to network services, with the facilities to manage connections, send and receive data, and handle multiple connections concurrently. The API supports both connection-oriented (TCP) and connectionless (UDP) network protocols. +# Learn more from the following resources: + +- [@article@Beej's Guide to Network Programming](https://beej.us/guide/bgnet/) +- [@article@Berkeley Sockets - Wikipedia](https://en.wikipedia.org/wiki/Berkeley_sockets) +- [@official@BSD Socket Interface - Keil](https://www.keil.com/pack/doc/mw6/network/html/using_network_sockets_bsd.html) diff --git a/src/data/roadmaps/server-side-game-developer/content/byte-manipulation@H21PanCggDfQt34-JzgfO.md b/src/data/roadmaps/server-side-game-developer/content/byte-manipulation@H21PanCggDfQt34-JzgfO.md index 1430be06c24e..fa6e1474866f 100644 --- a/src/data/roadmaps/server-side-game-developer/content/byte-manipulation@H21PanCggDfQt34-JzgfO.md +++ b/src/data/roadmaps/server-side-game-developer/content/byte-manipulation@H21PanCggDfQt34-JzgfO.md @@ -1,3 +1,8 @@ # Byte Manipulation -`Byte manipulation`, in the context of socket programming, often refers to the ability to directly interact and manage bytes of data. This could involve creating, modifying, or reading individual bytes or groups of bytes. Common operations include shifting (moving bytes to the left or right), masking (using a binary AND operation to make certain bits 0), and bitwise operations (working with the individual bits within a byte). Byte manipulation commonly takes place in server side game development when dealing with network data or working with specific binary protocols. The ability to accurately manipulate bytes is an essential skill when handling and optimizing the transfer of data between a server and a client. \ No newline at end of file +`Byte manipulation`, in the context of socket programming, often refers to the ability to directly interact and manage bytes of data. This could involve creating, modifying, or reading individual bytes or groups of bytes. Common operations include shifting (moving bytes to the left or right), masking (using a binary AND operation to make certain bits 0), and bitwise operations (working with the individual bits within a byte). Byte manipulation commonly takes place in server side game development when dealing with network data or working with specific binary protocols. The ability to accurately manipulate bytes is an essential skill when handling and optimizing the transfer of data between a server and a client. +# Learn more from the following resources: + +- [@official@Protocol Buffers Overview - Google](https://protobuf.dev/overview/) +- [@article@Bytes Objects: Handling Binary Data in Python - Real Python](https://realpython.com/python-bytes/) +- [@article@Understanding Big and Little Endian Byte Order - BetterExplained](https://betterexplained.com/articles/understanding-big-and-little-endian-byte-order/) diff --git a/src/data/roadmaps/server-side-game-developer/content/c@DuyUc9a-47Uz03yr4aeyg.md b/src/data/roadmaps/server-side-game-developer/content/c@DuyUc9a-47Uz03yr4aeyg.md index de51ecede33f..4873b81f0d14 100644 --- a/src/data/roadmaps/server-side-game-developer/content/c@DuyUc9a-47Uz03yr4aeyg.md +++ b/src/data/roadmaps/server-side-game-developer/content/c@DuyUc9a-47Uz03yr4aeyg.md @@ -1,3 +1,8 @@ # C# -C Sharp, usually written as C#, is a powerful, object-oriented programming language developed by Microsoft in the early 2000s. C# was designed to be a part of the .NET ecosystem and has its syntax foundations based on C and C++. Over time, C# has evolved to include several modern programming features like generics, asynchronous methods, and support for LINQ queries. Thanks to the .NET Core's cross-platform support, C# can now be used to write applications that run on Windows, Linux, and macOS. While it's widely used to create Windows desktop applications and games, it's also popular for developing web applications, server-side components, and even mobile applications via Xamarin. \ No newline at end of file +C Sharp, usually written as C#, is a powerful, object-oriented programming language developed by Microsoft in the early 2000s. C# was designed to be a part of the .NET ecosystem and has its syntax foundations based on C and C++. Over time, C# has evolved to include several modern programming features like generics, asynchronous methods, and support for LINQ queries. Thanks to the .NET Core's cross-platform support, C# can now be used to write applications that run on Windows, Linux, and macOS. While it's widely used to create Windows desktop applications and games, it's also popular for developing web applications, server-side components, and even mobile applications via Xamarin. +# Learn more from the following resources: + +- [@official@C# Guide - Microsoft Learn](https://learn.microsoft.com/en-us/dotnet/csharp/) +- [@official@Programming in Unity - Unity Documentation](https://docs.unity3d.com/6000.4/Documentation/Manual/scripting.html) +- [@official@Cloud Code - Unity Documentation](https://docs.unity.com/en-us/cloud-code) diff --git a/src/data/roadmaps/server-side-game-developer/content/capability@5kF1fqr-mn5-15e3aMa9k.md b/src/data/roadmaps/server-side-game-developer/content/capability@5kF1fqr-mn5-15e3aMa9k.md index d3d7e890bffe..a590990f83ca 100644 --- a/src/data/roadmaps/server-side-game-developer/content/capability@5kF1fqr-mn5-15e3aMa9k.md +++ b/src/data/roadmaps/server-side-game-developer/content/capability@5kF1fqr-mn5-15e3aMa9k.md @@ -1,3 +1,8 @@ # Capability -In server-side game development, `capability` basically refers to the potential of the server in terms of supporting the game mechanics, the players, the network traffic, and other elements that allow the game to function effectively. Hosting servers condition the player's game interface and user experience, incorporating the aspects of speed, smooth game flow, glitch prevention, and high-performance gameplay. Certain servers have higher capabilities, supporting complex games with vast virtual environments, numerous players, and extensive data traffic. Their capacity extends to facilitating updates and patches immediately. On the other hand, servers with lower capabilities might only cater to simpler games. Ultimately, the `capability` of an IP server is a key factor in developing and maintaining a successful online, multiplayer, or large-scale game. \ No newline at end of file +In server-side game development, `capability` basically refers to the potential of the server in terms of supporting the game mechanics, the players, the network traffic, and other elements that allow the game to function effectively. Hosting servers condition the player's game interface and user experience, incorporating the aspects of speed, smooth game flow, glitch prevention, and high-performance gameplay. Certain servers have higher capabilities, supporting complex games with vast virtual environments, numerous players, and extensive data traffic. Their capacity extends to facilitating updates and patches immediately. On the other hand, servers with lower capabilities might only cater to simpler games. Ultimately, the `capability` of an IP server is a key factor in developing and maintaining a successful online, multiplayer, or large-scale game. +# Learn more from the following resources: + +- [@article@Capability-based Security - Wikipedia](https://en.wikipedia.org/wiki/Capability-based_security) +- [@official@Security Practices - Sandstorm.io](https://docs.sandstorm.io/en/latest/using/security-practices/) +- [@opensource@Awesome Object Capabilities and Capability-based Security - GitHub](https://github.com/dckc/awesome-ocap) diff --git a/src/data/roadmaps/server-side-game-developer/content/cassandra@1jqSxk1nwByiQa1De81F3.md b/src/data/roadmaps/server-side-game-developer/content/cassandra@1jqSxk1nwByiQa1De81F3.md index 922c451dfebe..f71f8a169b3c 100644 --- a/src/data/roadmaps/server-side-game-developer/content/cassandra@1jqSxk1nwByiQa1De81F3.md +++ b/src/data/roadmaps/server-side-game-developer/content/cassandra@1jqSxk1nwByiQa1De81F3.md @@ -1,3 +1,8 @@ # Cassandra -Apache Cassandra is an open-source, distributed NoSQL database system that is designed to manage large volumes of data across a wide range of servers. It provides high availability with no single point of failure. Cassandra is often used for applications where data is distributed across multiple locations as it has superior replication mechanisms. It utilizes a peer-to-peer architecture, as opposed to master-slaves, which allows for continuous availability and scalability. Cassandra also provides robust support for clusters spanning multiple datacenters, with asynchronous masterless replication allowing low latency operations for all clients. \ No newline at end of file +Apache Cassandra is an open-source, distributed NoSQL database system that is designed to manage large volumes of data across a wide range of servers. It provides high availability with no single point of failure. Cassandra is often used for applications where data is distributed across multiple locations as it has superior replication mechanisms. It utilizes a peer-to-peer architecture, as opposed to master-slaves, which allows for continuous availability and scalability. Cassandra also provides robust support for clusters spanning multiple datacenters, with asynchronous masterless replication allowing low latency operations for all clients. +Learn more from the following resources: + +- [@official@Cassandra Architecture - Apache Cassandra](https://cassandra.apache.org/doc/latest/cassandra/architecture/dynamo.html) +- [@article@Apache Cassandra - Wikipedia](https://en.wikipedia.org/wiki/Apache_Cassandra) +- [@official@Introduction to Apache Cassandra on Azure Cosmos DB - Microsoft](https://learn.microsoft.com/en-us/azure/cosmos-db/cassandra/cassandra-introduction) diff --git a/src/data/roadmaps/server-side-game-developer/content/category@NH2eQ1_nij1icTgoO027b.md b/src/data/roadmaps/server-side-game-developer/content/category@NH2eQ1_nij1icTgoO027b.md index 4c5421e32441..d34e2d1aac1c 100644 --- a/src/data/roadmaps/server-side-game-developer/content/category@NH2eQ1_nij1icTgoO027b.md +++ b/src/data/roadmaps/server-side-game-developer/content/category@NH2eQ1_nij1icTgoO027b.md @@ -10,4 +10,9 @@ The Internet Protocol Addresses (IP Addresses) are categorized into five differe **Class D** IP address is designed for multicast groups and ranges from 224.0.0.0 to 239.255.255.255. -Lastly, **Class E** IP address ranges from 240.0.0.0 to 255.255.255.254 and is preserved for research and development purposes. \ No newline at end of file +Lastly, **Class E** IP address ranges from 240.0.0.0 to 255.255.255.254 and is preserved for research and development purposes. +Learn more from the following resources: + +- [@article@IP Address - Wikipedia](https://en.wikipedia.org/wiki/IP_address) +- [@official@Internet Protocol RFC 791 - IETF](https://datatracker.ietf.org/doc/html/rfc791) +- [@official@IPv4 Header Format - Wikipedia](https://en.wikipedia.org/wiki/IPv4#Header) diff --git a/src/data/roadmaps/server-side-game-developer/content/cc@E4H3hniIW6hKpH3Qr--N5.md b/src/data/roadmaps/server-side-game-developer/content/cc@E4H3hniIW6hKpH3Qr--N5.md index dba30aca0a3d..91a865cbe14f 100644 --- a/src/data/roadmaps/server-side-game-developer/content/cc@E4H3hniIW6hKpH3Qr--N5.md +++ b/src/data/roadmaps/server-side-game-developer/content/cc@E4H3hniIW6hKpH3Qr--N5.md @@ -4,3 +4,9 @@ - [@article@C Programming Language](https://en.wikipedia.org/wiki/C_%28programming_language%29) - [@article@C++ Programming Language](https://en.wikipedia.org/wiki/C%2B%2B) + +Learn more from the following resources: + +- [@article@Learn C++ - LearnCpp](https://www.learncpp.com/) +- [@official@Get Started with C++ - ISO C++](https://isocpp.org/get-started) +- [@article@C++ Reference - DevDocs](https://devdocs.io/cpp/) diff --git a/src/data/roadmaps/server-side-game-developer/content/checksum@XxBl-zO7CF6DpOZ2bMDxJ.md b/src/data/roadmaps/server-side-game-developer/content/checksum@XxBl-zO7CF6DpOZ2bMDxJ.md index c18d079222f6..5692ee5ce0df 100644 --- a/src/data/roadmaps/server-side-game-developer/content/checksum@XxBl-zO7CF6DpOZ2bMDxJ.md +++ b/src/data/roadmaps/server-side-game-developer/content/checksum@XxBl-zO7CF6DpOZ2bMDxJ.md @@ -1,3 +1,8 @@ # Checksum -A **checksum** in TCP (Transmission Control Protocol) is a 16-bit field in the TCP header used to perform error checks on the segments. TCP stack computes the checksum value for the data transmitted and sends it along with the data to the receiving system. The receiving system re-computes the checksum and compares it with the value sent along with the data. If both the computed values match, the data is assumed to be free from transmission errors. However, if the computed values don't match, TCP will detect a possible change in received data, and the receiver will request for the re-transmission of the lost or corrupted data packets. Please note that while the checksum operation helps to ensure data integrity, it is not entirely foolproof as it might not detect all possible errors, particularly those that involve multiple bit changes. \ No newline at end of file +A **checksum** in TCP (Transmission Control Protocol) is a 16-bit field in the TCP header used to perform error checks on the segments. TCP stack computes the checksum value for the data transmitted and sends it along with the data to the receiving system. The receiving system re-computes the checksum and compares it with the value sent along with the data. If both the computed values match, the data is assumed to be free from transmission errors. However, if the computed values don't match, TCP will detect a possible change in received data, and the receiver will request for the re-transmission of the lost or corrupted data packets. Please note that while the checksum operation helps to ensure data integrity, it is not entirely foolproof as it might not detect all possible errors, particularly those that involve multiple bit changes. +Learn more from the following resources: + +- [@article@Internet Checksum - Wikipedia](https://en.wikipedia.org/wiki/Internet_checksum) +- [@official@Computing the Internet Checksum RFC 1071 - IETF](https://datatracker.ietf.org/doc/html/rfc1071) +- [@article@Transmission Control Protocol - Wikipedia](https://en.wikipedia.org/wiki/Transmission_Control_Protocol) diff --git a/src/data/roadmaps/server-side-game-developer/content/checksum@tBOvBpDi3SOKZjAmkxdM0.md b/src/data/roadmaps/server-side-game-developer/content/checksum@tBOvBpDi3SOKZjAmkxdM0.md index cb57d5370903..2942b503df89 100644 --- a/src/data/roadmaps/server-side-game-developer/content/checksum@tBOvBpDi3SOKZjAmkxdM0.md +++ b/src/data/roadmaps/server-side-game-developer/content/checksum@tBOvBpDi3SOKZjAmkxdM0.md @@ -1,3 +1,8 @@ # Checksum -The `checksum` is an important element in UDP that ensures the integrity and validation of the data being transmitted. It computes the total sum of all the bytes in a packet and incorporates it as an additional `checksum` field in the UDP header. When the packet arrives at its destination, this process is repeated and compared with the included `checksum`. If a match is observed, the packet is deemed valid. If not, it signifies that an error occurred during transmission possibly due to noise or any third-party interference. In such a case, the packet is simply dropped, as UDP does not initiate any retransmission or error correction procedure. This is why a perfect output cannot be guaranteed with UDP, nor can it determine whether all the recipients are receiving the packets properly. \ No newline at end of file +The `checksum` is an important element in UDP that ensures the integrity and validation of the data being transmitted. It computes the total sum of all the bytes in a packet and incorporates it as an additional `checksum` field in the UDP header. When the packet arrives at its destination, this process is repeated and compared with the included `checksum`. If a match is observed, the packet is deemed valid. If not, it signifies that an error occurred during transmission possibly due to noise or any third-party interference. In such a case, the packet is simply dropped, as UDP does not initiate any retransmission or error correction procedure. This is why a perfect output cannot be guaranteed with UDP, nor can it determine whether all the recipients are receiving the packets properly. +Learn more from the following resources: + +- [@article@User Datagram Protocol - Wikipedia](https://en.wikipedia.org/wiki/User_Datagram_Protocol) +- [@article@How is TCP and UDP Checksum Calculated - slashroot.in](https://www.slashroot.in/how-is-tcp-and-udp-checksum-calculated) +- [@article@Calculating the UDP Checksum - SecurityNik](https://www.securitynik.com/2015/08/calculating-udp-checksum-with-taste-of.html) diff --git a/src/data/roadmaps/server-side-game-developer/content/cipher@1788KFqsQBkYARqA0T5GX.md b/src/data/roadmaps/server-side-game-developer/content/cipher@1788KFqsQBkYARqA0T5GX.md index 4844cc607166..1e35a456c821 100644 --- a/src/data/roadmaps/server-side-game-developer/content/cipher@1788KFqsQBkYARqA0T5GX.md +++ b/src/data/roadmaps/server-side-game-developer/content/cipher@1788KFqsQBkYARqA0T5GX.md @@ -1,3 +1,8 @@ # Cipher -**Cipher** is a vital component in the field of cryptography and is used to encrypt and decrypt information. It is essentially a series of well-defined steps or algorithms followed to convert sensitive information or data into a form that appears to be random and meaningless. This transformed information can only be turned back into its original form with a specific decryption key. Based on their methodology, ciphers are broadly classified into two categories: block ciphers and stream ciphers. Block ciphers work on a chunk of data at once, whereas stream ciphers work on a individual bits or bytes. Examples of ciphers include: Caesar Cipher, Monoalphabetic Cipher, and Vigenere Cipher among others. Usage of ciphers enhances the security in server-side game development by ensuring that player data remains confidential and is not subjected to unauthorized access or manipulation. \ No newline at end of file +**Cipher** is a vital component in the field of cryptography and is used to encrypt and decrypt information. It is essentially a series of well-defined steps or algorithms followed to convert sensitive information or data into a form that appears to be random and meaningless. This transformed information can only be turned back into its original form with a specific decryption key. Based on their methodology, ciphers are broadly classified into two categories: block ciphers and stream ciphers. Block ciphers work on a chunk of data at once, whereas stream ciphers work on a individual bits or bytes. Examples of ciphers include: Caesar Cipher, Monoalphabetic Cipher, and Vigenere Cipher among others. Usage of ciphers enhances the security in server-side game development by ensuring that player data remains confidential and is not subjected to unauthorized access or manipulation. +Learn more from the following resources: + +- [@article@Cipher - Wikipedia](https://en.wikipedia.org/wiki/Cipher) +- [@article@Block Cipher - Wikipedia](https://en.wikipedia.org/wiki/Block_cipher) +- [@article@Stream Cipher - Wikipedia](https://en.wikipedia.org/wiki/Stream_cipher) diff --git a/src/data/roadmaps/server-side-game-developer/content/cloud-ml@XvvlvDKfYRCcYtTdWohsd.md b/src/data/roadmaps/server-side-game-developer/content/cloud-ml@XvvlvDKfYRCcYtTdWohsd.md index e04fa6596821..b62e0f32318b 100644 --- a/src/data/roadmaps/server-side-game-developer/content/cloud-ml@XvvlvDKfYRCcYtTdWohsd.md +++ b/src/data/roadmaps/server-side-game-developer/content/cloud-ml@XvvlvDKfYRCcYtTdWohsd.md @@ -1,3 +1,8 @@ # Cloud ML -`Cloud Machine Learning` or `Cloud ML` is a branch of Artificial Intelligence that utilizes cloud computing services to provide machine learning capabilities. It enables developers and data scientists to build, train, and deploy machine learning models in a cloud-based environment. Cloud ML platforms usually offer a range of pre-trained models and services for tasks like image recognition, natural language understanding, and predictive analytics. These platforms support popular ML frameworks, such as TensorFlow and PyTorch, which can be used to design custom models. Importantly, Cloud ML abstracts the complex infrastructure management associated with large-scale ML computations providing users with more agile, scalable, and accessible machine learning solutions. \ No newline at end of file +`Cloud Machine Learning` or `Cloud ML` is a branch of Artificial Intelligence that utilizes cloud computing services to provide machine learning capabilities. It enables developers and data scientists to build, train, and deploy machine learning models in a cloud-based environment. Cloud ML platforms usually offer a range of pre-trained models and services for tasks like image recognition, natural language understanding, and predictive analytics. These platforms support popular ML frameworks, such as TensorFlow and PyTorch, which can be used to design custom models. Importantly, Cloud ML abstracts the complex infrastructure management associated with large-scale ML computations providing users with more agile, scalable, and accessible machine learning solutions. +Learn more from the following resources: + +- [@official@Amazon SageMaker - AWS](https://aws.amazon.com/sagemaker/) +- [@official@Google Cloud Vertex AI Documentation](https://cloud.google.com/vertex-ai/docs) +- [@article@Machine Learning - Wikipedia](https://en.wikipedia.org/wiki/Machine_learning) diff --git a/src/data/roadmaps/server-side-game-developer/content/cloud@hhtqvFfTCuVPT0OPu4Y1a.md b/src/data/roadmaps/server-side-game-developer/content/cloud@hhtqvFfTCuVPT0OPu4Y1a.md index fbaf3da0cb8d..18274b635f04 100644 --- a/src/data/roadmaps/server-side-game-developer/content/cloud@hhtqvFfTCuVPT0OPu4Y1a.md +++ b/src/data/roadmaps/server-side-game-developer/content/cloud@hhtqvFfTCuVPT0OPu4Y1a.md @@ -1,3 +1,8 @@ # Cloud -The **cloud** refers to servers that are accessed over the Internet, and the software and databases that run on those servers. By using cloud technology, data can be accessed from anywhere via the Internet, rather than from a local server or a personal computer. Cloud services are typically provided by different companies, such as Google, Amazon, and Microsoft. There are three main types of cloud computing: Infrastructure as a Service (IaaS), Platform as a Service (PaaS) and Software as a Service (SaaS). Examples of the cloud in gaming include multiplayer online games, game streaming and digital distribution platforms. The cloud is also used in game development for testing, development, and distribution of games. \ No newline at end of file +The **cloud** refers to servers that are accessed over the Internet, and the software and databases that run on those servers. By using cloud technology, data can be accessed from anywhere via the Internet, rather than from a local server or a personal computer. Cloud services are typically provided by different companies, such as Google, Amazon, and Microsoft. There are three main types of cloud computing: Infrastructure as a Service (IaaS), Platform as a Service (PaaS) and Software as a Service (SaaS). Examples of the cloud in gaming include multiplayer online games, game streaming and digital distribution platforms. The cloud is also used in game development for testing, development, and distribution of games. +Learn more from the following resources: + +- [@official@What is Cloud Computing - AWS](https://aws.amazon.com/what-is-cloud-computing/) +- [@official@Google Cloud Documentation Overview](https://cloud.google.com/docs/overview) +- [@article@Cloud Computing - Wikipedia](https://en.wikipedia.org/wiki/Cloud_computing) diff --git a/src/data/roadmaps/server-side-game-developer/content/concurrency-java@RT9XvlxvIM_hHTtNmbva3.md b/src/data/roadmaps/server-side-game-developer/content/concurrency-java@RT9XvlxvIM_hHTtNmbva3.md index 29a4785e9a98..0dd7a969941f 100644 --- a/src/data/roadmaps/server-side-game-developer/content/concurrency-java@RT9XvlxvIM_hHTtNmbva3.md +++ b/src/data/roadmaps/server-side-game-developer/content/concurrency-java@RT9XvlxvIM_hHTtNmbva3.md @@ -1,3 +1,8 @@ # Concurrency (Java) -Concurrency is a property of systems that allows multiple tasks to run in an overlapped or simultaneous manner. This is widely used in server side game development where it is common to have multiple players interfacing with the system at the same time. It is essential to keep the system responsive and efficient under high load. Concurrency is often achieved through multithreading or asynchronous programming. Multithreading involves multiple threads of execution within a single program, with each thread running on a separate processor core. Asynchronous programming, on the other hand, achieves concurrency by allowing tasks to progress without waiting for other tasks to complete. This can be particularly useful in situations where tasks involve I/O operations or network requests, which can take a significant amount of time to complete, and would otherwise block the execution of other tasks. \ No newline at end of file +Concurrency is a property of systems that allows multiple tasks to run in an overlapped or simultaneous manner. This is widely used in server side game development where it is common to have multiple players interfacing with the system at the same time. It is essential to keep the system responsive and efficient under high load. Concurrency is often achieved through multithreading or asynchronous programming. Multithreading involves multiple threads of execution within a single program, with each thread running on a separate processor core. Asynchronous programming, on the other hand, achieves concurrency by allowing tasks to progress without waiting for other tasks to complete. This can be particularly useful in situations where tasks involve I/O operations or network requests, which can take a significant amount of time to complete, and would otherwise block the execution of other tasks. +Learn more from the following resources: + +- [@official@Synchronization - Java Tutorial](https://docs.oracle.com/javase/tutorial/essential/concurrency/sync.html) +- [@article@Java Concurrency - Wikipedia](https://en.wikipedia.org/wiki/Java_concurrency) +- [@article@Java Concurrency Tutorial - Jenkov](https://jenkov.com/tutorials/java-concurrency/index.html) diff --git a/src/data/roadmaps/server-side-game-developer/content/condition-variable@xR6pERldq4wPl9GVLHAhT.md b/src/data/roadmaps/server-side-game-developer/content/condition-variable@xR6pERldq4wPl9GVLHAhT.md index fc1afc29efae..e258bd8a468d 100644 --- a/src/data/roadmaps/server-side-game-developer/content/condition-variable@xR6pERldq4wPl9GVLHAhT.md +++ b/src/data/roadmaps/server-side-game-developer/content/condition-variable@xR6pERldq4wPl9GVLHAhT.md @@ -1,3 +1,8 @@ # Condition Variable -A `condition variable` is an object that has the ability to block the calling thread until notified to resume. It's used in conjunction with a `mutex` (or `lock`) in the synchronization of threads. A condition variable is made up of a mutex (or lock) and a waiting queue. Typically, a condition variable is used when a thread needs to wait until a certain condition is met. The thread will lock the mutex, check the condition, and if the condition isn't met, it will enter the waiting queue and unlock the mutex. When the condition is met, another thread will notify the condition variable, prompt it to wake up a thread from the waiting queue, and relock the mutex. It's important to mention that condition variables are subject to spurious wakeups and lost wakeups, hence developers need to manage them carefully. \ No newline at end of file +A `condition variable` is an object that has the ability to block the calling thread until notified to resume. It's used in conjunction with a `mutex` (or `lock`) in the synchronization of threads. A condition variable is made up of a mutex (or lock) and a waiting queue. Typically, a condition variable is used when a thread needs to wait until a certain condition is met. The thread will lock the mutex, check the condition, and if the condition isn't met, it will enter the waiting queue and unlock the mutex. When the condition is met, another thread will notify the condition variable, prompt it to wake up a thread from the waiting queue, and relock the mutex. It's important to mention that condition variables are subject to spurious wakeups and lost wakeups, hence developers need to manage them carefully. +Visit the following resources to learn more: + +- [@official@Using Condition Variables - IBM](https://www.ibm.com/docs/ssw_aix_71/com.ibm.aix.genprogc/condition_variables.htm) +- [@article@Condition Variables – ModernesC++](https://www.modernescpp.com/index.php/condition-variables/) +- [@official@std::condition\_variable - cppreference](https://en.cppreference.com/cpp/thread/condition_variable) diff --git a/src/data/roadmaps/server-side-game-developer/content/congestion-control@1GML0Jsfdb1Fn-0PNryiQ.md b/src/data/roadmaps/server-side-game-developer/content/congestion-control@1GML0Jsfdb1Fn-0PNryiQ.md index 447c6cf622b7..d0589010f205 100644 --- a/src/data/roadmaps/server-side-game-developer/content/congestion-control@1GML0Jsfdb1Fn-0PNryiQ.md +++ b/src/data/roadmaps/server-side-game-developer/content/congestion-control@1GML0Jsfdb1Fn-0PNryiQ.md @@ -12,4 +12,7 @@ game performance, especially in high-traffic scenarios. Visit the following resources to learn more: -- [@article@Congestion Control in Linux TCP](https://www.usenix.org/conference/2002-usenix-annual-technical-conference/congestion-control-linux-tcp) \ No newline at end of file +- [@article@Congestion Control in Linux TCP](https://www.usenix.org/conference/2002-usenix-annual-technical-conference/congestion-control-linux-tcp) +- [@article@TCP Congestion Control - Wikipedia](https://en.wikipedia.org/wiki/TCP_congestion_control) +- [@article@TCP Congestion Control Guide - SynchroNet](https://synchronet.net/congestion-control-in-tcp/) +- [@official@RFC 8085: UDP Usage Guidelines - IETF](https://www.rfc-editor.org/rfc/rfc8085.html) diff --git a/src/data/roadmaps/server-side-game-developer/content/congestion-control@jsNsyrGzegVnjIF2l52vI.md b/src/data/roadmaps/server-side-game-developer/content/congestion-control@jsNsyrGzegVnjIF2l52vI.md index c4ff37adf45b..bb334c09c5fa 100644 --- a/src/data/roadmaps/server-side-game-developer/content/congestion-control@jsNsyrGzegVnjIF2l52vI.md +++ b/src/data/roadmaps/server-side-game-developer/content/congestion-control@jsNsyrGzegVnjIF2l52vI.md @@ -1,3 +1,8 @@ # Congestion Control -`Congestion Control` is a critical feature of TCP, but not inherently a part of UDP. The primary purpose of congestion control is to prevent too much data from being sent into the network such that it can't handle the traffic, leading to packet loss. TCP's congestion control mechanism adjusts the data send rate based on the perceived network congestion. UDP does not provide congestion control by itself. However, this does not mean congestion control can't be implemented if you're using UDP. Developers can implement a custom congestion control mechanism over UDP, but it requires substantial understanding and careful management to achieve this without creating network or server performance issues. \ No newline at end of file +`Congestion Control` is a critical feature of TCP, but not inherently a part of UDP. The primary purpose of congestion control is to prevent too much data from being sent into the network such that it can't handle the traffic, leading to packet loss. TCP's congestion control mechanism adjusts the data send rate based on the perceived network congestion. UDP does not provide congestion control by itself. However, this does not mean congestion control can't be implemented if you're using UDP. Developers can implement a custom congestion control mechanism over UDP, but it requires substantial understanding and careful management to achieve this without creating network or server performance issues. +Visit the following resources to learn more: + +- [@article@Congestion Control in Computer Networks - GeeksforGeeks](https://www.geeksforgeeks.org/computer-networks/congestion-control-in-computer-networks/) +- [@article@How is congestion avoided when using UDP? - Stack Exchange](https://networkengineering.stackexchange.com/questions/79588/how-is-congestion-avoided-when-using-udp) +- [@article@Congestion Control - Wikipedia](https://en.wikipedia.org/wiki/Congestion_control) diff --git a/src/data/roadmaps/server-side-game-developer/content/connection-hijacking@ubRiY3jdh3iS3diN482IU.md b/src/data/roadmaps/server-side-game-developer/content/connection-hijacking@ubRiY3jdh3iS3diN482IU.md index c03671663807..85cf703a2011 100644 --- a/src/data/roadmaps/server-side-game-developer/content/connection-hijacking@ubRiY3jdh3iS3diN482IU.md +++ b/src/data/roadmaps/server-side-game-developer/content/connection-hijacking@ubRiY3jdh3iS3diN482IU.md @@ -1,3 +1,8 @@ # Connection Hijacking -`Connection hijacking`, also known as session hijacking, is a serious security threat in the realm of server side game development. It refers to the exploitation of a valid computer session, or more precisely, the intrusion of an unauthorized user into a valid connection between two nodes or endpoints. The attacker intercepts the traffic between these two nodes, thereby 'hijacking' the connection. In game development, this could involve intercepting information between a game server and a client's system. Connection hijacking could expose sensitive data, tamper with the data in transit, or even redirect clients to rogue servers. Hence, implementing necessary security protocols to mitigate such vulnerability is crucial. \ No newline at end of file +`Connection hijacking`, also known as session hijacking, is a serious security threat in the realm of server side game development. It refers to the exploitation of a valid computer session, or more precisely, the intrusion of an unauthorized user into a valid connection between two nodes or endpoints. The attacker intercepts the traffic between these two nodes, thereby 'hijacking' the connection. In game development, this could involve intercepting information between a game server and a client's system. Connection hijacking could expose sensitive data, tamper with the data in transit, or even redirect clients to rogue servers. Hence, implementing necessary security protocols to mitigate such vulnerability is crucial. +Visit the following resources to learn more: + +- [@article@What is Session Hijacking - Imperva](https://www.imperva.com/learn/application-security/session-hijacking/) +- [@official@Session Hijacking Attack - OWASP](https://owasp.org/www-community/attacks/Session_hijacking_attack) +- [@article@Session Hijacking Attack Prevention - Contrast Security](https://www.contrastsecurity.com/glossary/session-hijacking) diff --git a/src/data/roadmaps/server-side-game-developer/content/connection@5sI3RHaLudq4TfpjoYeOp.md b/src/data/roadmaps/server-side-game-developer/content/connection@5sI3RHaLudq4TfpjoYeOp.md index d026d02bbd41..e3c754b9907a 100644 --- a/src/data/roadmaps/server-side-game-developer/content/connection@5sI3RHaLudq4TfpjoYeOp.md +++ b/src/data/roadmaps/server-side-game-developer/content/connection@5sI3RHaLudq4TfpjoYeOp.md @@ -1,3 +1,8 @@ # Connection -`Connection` in server-side game development refers to the establishment of a link between the game server and the game client (usually the player's device). This connection can either be persistent or non-persistent, depending on the game’s requirements. Persistent connections remain active as long as the user is logged in, facilitating real-time communication between the server and the client. Non-persistent connections, on the other hand, are established and discontinued as needed. This element is crucial in multiplayer games where the server handles the synchronization of data among multiple clients, enabling players to interact with each other in the same virtual environment. \ No newline at end of file +`Connection` in server-side game development refers to the establishment of a link between the game server and the game client (usually the player's device). This connection can either be persistent or non-persistent, depending on the game’s requirements. Persistent connections remain active as long as the user is logged in, facilitating real-time communication between the server and the client. Non-persistent connections, on the other hand, are established and discontinued as needed. This element is crucial in multiplayer games where the server handles the synchronization of data among multiple clients, enabling players to interact with each other in the same virtual environment. +Visit the following resources to learn more: + +- [@article@Persistent vs Non-Persistent Connections - DEV Community](https://dev.to/ibmdeveloper/persistent-vs-non-persistent-connections-creating-a-multiplayer-game-server-episode-2-5cm1) +- [@article@Game Server Protocols: Starting out - 1024 Monkeys](https://1024monkeys.wordpress.com/2015/01/03/game-server-protocols-part-1-starting-out/) +- [@official@Connection management in HTTP/1.x - MDN](https://developer.mozilla.org/en-US/docs/Web/HTTP/Guides/Connection_management_in_HTTP_1.x) diff --git a/src/data/roadmaps/server-side-game-developer/content/containerization@k3FJY26SVxdZx4MLLE25h.md b/src/data/roadmaps/server-side-game-developer/content/containerization@k3FJY26SVxdZx4MLLE25h.md index 715980823862..f05ae9d3eb8e 100644 --- a/src/data/roadmaps/server-side-game-developer/content/containerization@k3FJY26SVxdZx4MLLE25h.md +++ b/src/data/roadmaps/server-side-game-developer/content/containerization@k3FJY26SVxdZx4MLLE25h.md @@ -1,3 +1,8 @@ # Containerization -Containerization in game development refers to the usage of software like Docker, Kubernetes, or similar tools to encapsulate the game's server-side functionality into a single, deployable package. These units, known as containers, include everything the software needs to run, such as libraries, system tools, code, and runtime. Containers are platform-agnostic, meaning they can work across different operating environments in the same way. This enables developers to create a consistent experience, reduce the risk of software conflicts, and facilitate easier updates and deployment of their games. Unlike Virtual Machines (VMs), containers do not include whole operating systems, which makes them more lightweight and efficient to run. Developers can run multiple containers on the same machine, each handling different aspects of the server-side functionality. Containers can also communicate with each other, enabling more efficient use of resources. \ No newline at end of file +Containerization in game development refers to the usage of software like Docker, Kubernetes, or similar tools to encapsulate the game's server-side functionality into a single, deployable package. These units, known as containers, include everything the software needs to run, such as libraries, system tools, code, and runtime. Containers are platform-agnostic, meaning they can work across different operating environments in the same way. This enables developers to create a consistent experience, reduce the risk of software conflicts, and facilitate easier updates and deployment of their games. Unlike Virtual Machines (VMs), containers do not include whole operating systems, which makes them more lightweight and efficient to run. Developers can run multiple containers on the same machine, each handling different aspects of the server-side functionality. Containers can also communicate with each other, enabling more efficient use of resources. +Visit the following resources to learn more: + +- [@article@Optimize Game Servers Hosting with Containers - AWS](https://aws.amazon.com/blogs/gametech/optimize-game-servers-hosting-with-containers/) +- [@article@Package Your Game Server in a Docker Container - Epic Games](https://dev.epicgames.com/community/learning/tutorials/qBj7/unreal-engine-fab-package-your-game-server-in-a-docker-container-get-it-running-in-your-pc-online) +- [@official@Get Started with Docker - Docker Docs](https://docs.docker.com/get-started/) diff --git a/src/data/roadmaps/server-side-game-developer/content/coroutine@o0Y_hM0KXUApfsXG4PvOY.md b/src/data/roadmaps/server-side-game-developer/content/coroutine@o0Y_hM0KXUApfsXG4PvOY.md index 0070eef8bbf0..3fc4030c7bd7 100644 --- a/src/data/roadmaps/server-side-game-developer/content/coroutine@o0Y_hM0KXUApfsXG4PvOY.md +++ b/src/data/roadmaps/server-side-game-developer/content/coroutine@o0Y_hM0KXUApfsXG4PvOY.md @@ -10,4 +10,7 @@ developers an efficient way to write non-blocking code while maintaining readabi Visit the following resources to learn more: - [@documentation@C++ Coroutines (cppreference)](https://en.cppreference.com/w/cpp/language/coroutines) -- [@documentation@Python Coroutines and Tasks](https://docs.python.org/3/library/asyncio-task.html) +- [@documentation@Python Coroutines and Tasks](https://docs.python.org/3/library/asyncio-task.html) +- [@official@Write and Run Coroutines - Unity Manual](https://docs.unity3d.com/Manual/Coroutines.html) +- [@official@Coroutines Guide - Kotlin Documentation](https://kotlinlang.org/docs/coroutines-guide.html) +- [@article@Coroutines for Game Design - Stack Overflow](https://stackoverflow.com/questions/1247894/coroutines-for-game-design) diff --git a/src/data/roadmaps/server-side-game-developer/content/couchbase@6KTj_giX2k9l2lPd_Fp-d.md b/src/data/roadmaps/server-side-game-developer/content/couchbase@6KTj_giX2k9l2lPd_Fp-d.md index 31e335daae23..8eb368d357ee 100644 --- a/src/data/roadmaps/server-side-game-developer/content/couchbase@6KTj_giX2k9l2lPd_Fp-d.md +++ b/src/data/roadmaps/server-side-game-developer/content/couchbase@6KTj_giX2k9l2lPd_Fp-d.md @@ -1,3 +1,8 @@ # Couchbase -Couchbase is a NoSQL database technology that provides flexible data models suitable for server-side game development. It provides high-performance and easy scalability, offering a comprehensive platform for managing, manipulating and optimizing data in real-time. The technology behind Couchbase combines the powerful performance of key-value stores with the flexible querying capabilities of SQL-like querying systems. This makes it particularly valuable in gaming environments where performance and flexibility are crucial. Moreover, Couchbase also provides document database capabilities, allowing for complex documents to be stored in a format that can be easily manipulated for individual needs. With its high performance, flexible querying, and document database capabilities, Couchbase is a powerful tool for server-side game developers, and mastering it can significantly enhance your development capabilities. \ No newline at end of file +Couchbase is a NoSQL database technology that provides flexible data models suitable for server-side game development. It provides high-performance and easy scalability, offering a comprehensive platform for managing, manipulating and optimizing data in real-time. The technology behind Couchbase combines the powerful performance of key-value stores with the flexible querying capabilities of SQL-like querying systems. This makes it particularly valuable in gaming environments where performance and flexibility are crucial. Moreover, Couchbase also provides document database capabilities, allowing for complex documents to be stored in a format that can be easily manipulated for individual needs. With its high performance, flexible querying, and document database capabilities, Couchbase is a powerful tool for server-side game developers, and mastering it can significantly enhance your development capabilities. +Visit the following resources to learn more: + +- [@official@Start Here! Getting Started with Couchbase - Couchbase Docs](https://docs.couchbase.com/server/current/getting-started/start-here.html) +- [@article@Introduction to Couchbase - GeeksforGeeks](https://www.geeksforgeeks.org/dbms/introduction-to-couchbase/) +- [@official@Couchbase Documentation](https://docs.couchbase.com/home/index.html) diff --git a/src/data/roadmaps/server-side-game-developer/content/dal@dt_SmZuwklLimhupvjxC1.md b/src/data/roadmaps/server-side-game-developer/content/dal@dt_SmZuwklLimhupvjxC1.md index 5e65c8c3ced2..1551fde78301 100644 --- a/src/data/roadmaps/server-side-game-developer/content/dal@dt_SmZuwklLimhupvjxC1.md +++ b/src/data/roadmaps/server-side-game-developer/content/dal@dt_SmZuwklLimhupvjxC1.md @@ -1,3 +1,8 @@ # DAL -The term **DAL** stands for **Data Access Layer**. It represents a layer of an application that simplifies the interaction with the persistent storage of data. Typically, the DAL is implemented in a separate module, package, or library in your application that directly communicates with the database, thereby enabling the application services and modules to invoke a simple API for CRUD operations (Create, retrieve, update, and delete database entries) and database transactions. The DAL helps maintain the application’s database schema and manage connections to the database. Popular libraries and frameworks like SQLAlchemy for Python, Sequelize for Node.js, and Hibernate for Java among others provide a robust DAL implementation. These tools abstract the lower-level details of the data source into a higher-level programming interface. \ No newline at end of file +The term **DAL** stands for **Data Access Layer**. It represents a layer of an application that simplifies the interaction with the persistent storage of data. Typically, the DAL is implemented in a separate module, package, or library in your application that directly communicates with the database, thereby enabling the application services and modules to invoke a simple API for CRUD operations (Create, retrieve, update, and delete database entries) and database transactions. The DAL helps maintain the application’s database schema and manage connections to the database. Popular libraries and frameworks like SQLAlchemy for Python, Sequelize for Node.js, and Hibernate for Java among others provide a robust DAL implementation. These tools abstract the lower-level details of the data source into a higher-level programming interface. +Visit the following resources to learn more: + +- [@official@Designing the Infrastructure Persistence Layer - Microsoft Learn](https://learn.microsoft.com/en-us/dotnet/architecture/microservices/microservice-ddd-cqrs-patterns/infrastructure-persistence-layer-design) +- [@official@Creating a Data Access Layer (C#) - Microsoft Learn](https://learn.microsoft.com/en-us/aspnet/web-forms/overview/data-access/introduction/creating-a-data-access-layer-cs) +- [@article@Repository Pattern Explained - Steven Giesel](https://steven-giesel.com/blogPost/9fa7fe83-3ede-4ecb-ab27-4012b1333c0e) diff --git a/src/data/roadmaps/server-side-game-developer/content/data-clustering@XCJvgUSS7-oDR-XGdDY33.md b/src/data/roadmaps/server-side-game-developer/content/data-clustering@XCJvgUSS7-oDR-XGdDY33.md index 14fcbbdc85b8..453512ec4624 100644 --- a/src/data/roadmaps/server-side-game-developer/content/data-clustering@XCJvgUSS7-oDR-XGdDY33.md +++ b/src/data/roadmaps/server-side-game-developer/content/data-clustering@XCJvgUSS7-oDR-XGdDY33.md @@ -1,3 +1,8 @@ # Data Clustering -`Data Clustering` refers to the process of segregating data into various groups or clusters. These organized subsets of data, or clusters, contain similar data points that exhibit common traits, attributes, or characteristics. Clustering is essentially a type of unsupervised machine learning where the data is unlabeled, and the algorithm identifies similarities to group them together. There are several methods used for data clustering including partitioning methods like K-means, hierarchical methods, density-based methods like DBSCAN, and grid-based methods. These methods differ based on how they form the clusters and the types of data they work best with. Data clustering aids in the organization of large amounts of data, making it easier for developers to handle, understand, and utilize in game development. \ No newline at end of file +`Data Clustering` refers to the process of segregating data into various groups or clusters. These organized subsets of data, or clusters, contain similar data points that exhibit common traits, attributes, or characteristics. Clustering is essentially a type of unsupervised machine learning where the data is unlabeled, and the algorithm identifies similarities to group them together. There are several methods used for data clustering including partitioning methods like K-means, hierarchical methods, density-based methods like DBSCAN, and grid-based methods. These methods differ based on how they form the clusters and the types of data they work best with. Data clustering aids in the organization of large amounts of data, making it easier for developers to handle, understand, and utilize in game development. +Visit the following resources to learn more: + +- [@official@Clustering - scikit-learn Documentation](https://scikit-learn.org/stable/modules/clustering.html) +- [@article@DBSCAN Clustering in ML - GeeksforGeeks](https://www.geeksforgeeks.org/machine-learning/dbscan-clustering-in-ml-density-based-clustering/) +- [@article@DBSCAN vs K-Means: A Guide in Python - New Horizons](https://www.newhorizons.com/resources/blog/dbscan-vs-kmeans-a-guide-in-python) diff --git a/src/data/roadmaps/server-side-game-developer/content/data-transfer@5bJUcx3v4dpdlIsx7bFvK.md b/src/data/roadmaps/server-side-game-developer/content/data-transfer@5bJUcx3v4dpdlIsx7bFvK.md index 84107afc7de5..71bc434e9be0 100644 --- a/src/data/roadmaps/server-side-game-developer/content/data-transfer@5bJUcx3v4dpdlIsx7bFvK.md +++ b/src/data/roadmaps/server-side-game-developer/content/data-transfer@5bJUcx3v4dpdlIsx7bFvK.md @@ -1,3 +1,8 @@ # Data Transfer -Data transfer in server-side game development refers to the movement of data between the server and client or among various components of the server itself. Game data, such as player scores, game states, and updates, are frequently transferred to ensure a consistent and updated gaming environment. Various methods are used for data transfer, including RESTful APIs, websockets, and protocol buffers. The choice of method often depends on factors such as the size and type of data, the target platform, and the specific needs of the game. Remember, efficient and secure data transfer is essential for providing a smooth and engaging gaming experience. \ No newline at end of file +Data transfer in server-side game development refers to the movement of data between the server and client or among various components of the server itself. Game data, such as player scores, game states, and updates, are frequently transferred to ensure a consistent and updated gaming environment. Various methods are used for data transfer, including RESTful APIs, websockets, and protocol buffers. The choice of method often depends on factors such as the size and type of data, the target platform, and the specific needs of the game. Remember, efficient and secure data transfer is essential for providing a smooth and engaging gaming experience. +Learn more from the following resources: + +- [@article@Beginner's Guide to Game Networking - pvigier's blog](https://pvigier.github.io/2019/09/08/beginner-guide-game-networking.html) +- [@article@HTTP, WebSocket, gRPC, or WebRTC — Which Protocol is Best? - GetStream](https://getstream.io/blog/communication-protocols/) +- [@article@Network Protocols behind Server Push, Online Gaming, and Emails - ByteByteGo](https://blog.bytebytego.com/p/network-protocols-behind-server-push) diff --git a/src/data/roadmaps/server-side-game-developer/content/databases@FLFaGZDg2MSG6_YHnWETM.md b/src/data/roadmaps/server-side-game-developer/content/databases@FLFaGZDg2MSG6_YHnWETM.md index af57387dac92..341fe7875ef7 100644 --- a/src/data/roadmaps/server-side-game-developer/content/databases@FLFaGZDg2MSG6_YHnWETM.md +++ b/src/data/roadmaps/server-side-game-developer/content/databases@FLFaGZDg2MSG6_YHnWETM.md @@ -1,3 +1,8 @@ # Databases -Databases are structured sets of data. In terms of server-side game development, databases are extremely vital. They store information like user profiles, game states, rankings, and so much more. You have various types of databases to choose from such as relational databases (MySQL, PostgreSQL), NoSQL databases (MongoDB, Cassandra), and in-memory databases (Redis, Memcached). These databases have their own primary language for interaction, like SQL for relational databases. Most importantly, as a game developer, one needs to plan database schemas wisely to ensure efficient data retrieval and storage. Knowledge of indexing and a solid understanding of ACID (Atomicity, Consistency, Isolation, Durability) properties assists in developing robust game backends. \ No newline at end of file +Databases are structured sets of data. In terms of server-side game development, databases are extremely vital. They store information like user profiles, game states, rankings, and so much more. You have various types of databases to choose from such as relational databases (MySQL, PostgreSQL), NoSQL databases (MongoDB, Cassandra), and in-memory databases (Redis, Memcached). These databases have their own primary language for interaction, like SQL for relational databases. Most importantly, as a game developer, one needs to plan database schemas wisely to ensure efficient data retrieval and storage. Knowledge of indexing and a solid understanding of ACID (Atomicity, Consistency, Isolation, Durability) properties assists in developing robust game backends. +Learn more from the following resources: + +- [@article@Game Database Architecture: Complete Backend Guide 2025 - Generalist Programmer](https://generalistprogrammer.com/tutorials/game-database-architecture-complete-backend-guide-2025) +- [@article@Player Data Schema: MongoDB vs Postgres for Game Backends - SuperCraft](https://gsb.supercraft.host/blog/player-data-schema-design-nosql-vs-sql/) +- [@article@From the MMO Trenches: Using PostgreSQL for the Game Database - jahej](https://jahej.com/alt/2011_08_08_from-the-mmo-trenches-using-postgresql-for-the-game-database.html) diff --git a/src/data/roadmaps/server-side-game-developer/content/datagram-construction@jnQAzUUnwpJgoRuRIFtSe.md b/src/data/roadmaps/server-side-game-developer/content/datagram-construction@jnQAzUUnwpJgoRuRIFtSe.md index db236bac9f6c..dded0df50410 100644 --- a/src/data/roadmaps/server-side-game-developer/content/datagram-construction@jnQAzUUnwpJgoRuRIFtSe.md +++ b/src/data/roadmaps/server-side-game-developer/content/datagram-construction@jnQAzUUnwpJgoRuRIFtSe.md @@ -1,3 +1,8 @@ # Datagram Construction -Datagram construction is a fundamental process in server-side game development, especially when dealing with UDP (User Datagram Protocol). In this context, a datagram is a basic transfer unit associated with a packet-switched network, which typically encompasses a header and payload data. The process of datagram construction involves encapsulating the specific game data (such as player position, game state, etc.) in the datagram payload and setting appropriate values in the datagram header such as Source and Destination IP addresses, Checksum and other protocol-specific values. Constructing and parsing datagrams correctly is crucial for ensuring reliable and efficient communication between the game server and clients. \ No newline at end of file +Datagram construction is a fundamental process in server-side game development, especially when dealing with UDP (User Datagram Protocol). In this context, a datagram is a basic transfer unit associated with a packet-switched network, which typically encompasses a header and payload data. The process of datagram construction involves encapsulating the specific game data (such as player position, game state, etc.) in the datagram payload and setting appropriate values in the datagram header such as Source and Destination IP addresses, Checksum and other protocol-specific values. Constructing and parsing datagrams correctly is crucial for ensuring reliable and efficient communication between the game server and clients. +Learn more from the following resources: + +- [@article@User Datagram Protocol (UDP) Packet Header - NetworkLessons](https://networklessons.com/ip-routing/user-datagram-protocol-udp-packet-header) +- [@article@User Datagram Protocol (UDP) - Khan Academy](https://www.khanacademy.org/computing/computers-and-internet/xcae6f4a7ff015e7d:the-internet/xcae6f4a7ff015e7d:transporting-packets/a/user-datagram-protocol-udp) +- [@article@User Datagram Protocol - UDP - GeeksforGeeks](https://www.geeksforgeeks.org/computer-networks/user-datagram-protocol-udp/) diff --git a/src/data/roadmaps/server-side-game-developer/content/datagram@wD_HWc9YxPhlkilt585pg.md b/src/data/roadmaps/server-side-game-developer/content/datagram@wD_HWc9YxPhlkilt585pg.md index 61adc6344bdf..9feda3316aae 100644 --- a/src/data/roadmaps/server-side-game-developer/content/datagram@wD_HWc9YxPhlkilt585pg.md +++ b/src/data/roadmaps/server-side-game-developer/content/datagram@wD_HWc9YxPhlkilt585pg.md @@ -1,3 +1,8 @@ # Datagram -A **Datagram** is the basic unit of data transfer in network communication using protocols such as User Datagram Protocol (UDP). Each datagram operates independently of each other, meaning they may be received in a different order than they were sent, or they might not be received at all. Therefore, unlike TCP (Transmission Control Protocol), UDP does not guarantee that datagrams are delivered in the same order that they were sent, or even at all - hence known as connectionless protocol. However, it is faster and more efficient for applications that do not require delivery guarantees, such as voice over IP, live video broadcasts, and other real-time applications. Each datagram contains information about the sender, the intended recipient, and the data that it is intended to communicate along with its size and other specifications. \ No newline at end of file +A **Datagram** is the basic unit of data transfer in network communication using protocols such as User Datagram Protocol (UDP). Each datagram operates independently of each other, meaning they may be received in a different order than they were sent, or they might not be received at all. Therefore, unlike TCP (Transmission Control Protocol), UDP does not guarantee that datagrams are delivered in the same order that they were sent, or even at all - hence known as connectionless protocol. However, it is faster and more efficient for applications that do not require delivery guarantees, such as voice over IP, live video broadcasts, and other real-time applications. Each datagram contains information about the sender, the intended recipient, and the data that it is intended to communicate along with its size and other specifications. +Learn more from the following resources: + +- [@article@What Is User Datagram Protocol (UDP)? - Fortinet](https://www.fortinet.com/resources/cyberglossary/user-datagram-protocol-udp) +- [@article@UDP (User Datagram Protocol) Explained in Details - ClouDNS](https://www.cloudns.net/blog/udp-user-datagram-protocol-explained-in-details/) +- [@article@Understanding UDP Protocol: Applications and Security - Cavli Wireless](https://www.cavliwireless.com/blog/not-mini/understanding-udp-protocol-applications-and-security) diff --git a/src/data/roadmaps/server-side-game-developer/content/deep-learning@jkWvfp4GqckYPQ48GtjlR.md b/src/data/roadmaps/server-side-game-developer/content/deep-learning@jkWvfp4GqckYPQ48GtjlR.md index 628d0854b339..ca8f4541193e 100644 --- a/src/data/roadmaps/server-side-game-developer/content/deep-learning@jkWvfp4GqckYPQ48GtjlR.md +++ b/src/data/roadmaps/server-side-game-developer/content/deep-learning@jkWvfp4GqckYPQ48GtjlR.md @@ -1,3 +1,8 @@ # Deep Learning -Deep Learning is a subset of machine learning that imitates the workings of the human brain in processing data and creating patterns for decision-making. This technique utilizes multiple layers of algorithms (or neural networks) to process information. Deep learning involves training a model using large volumes of data and neural network architectures that contain many layers. A server-side game developer might use deep learning algorithms to create complex AI characters, improve game physics, or even analyze player data. Deep learning can be supervised, semi-supervised or unsupervised and it's extensively applied in various domains such as voice recognition, image recognition, natural language processing, etc. It is a crucial element for many modern AI applications. \ No newline at end of file +Deep Learning is a subset of machine learning that imitates the workings of the human brain in processing data and creating patterns for decision-making. This technique utilizes multiple layers of algorithms (or neural networks) to process information. Deep learning involves training a model using large volumes of data and neural network architectures that contain many layers. A server-side game developer might use deep learning algorithms to create complex AI characters, improve game physics, or even analyze player data. Deep learning can be supervised, semi-supervised or unsupervised and it's extensively applied in various domains such as voice recognition, image recognition, natural language processing, etc. It is a crucial element for many modern AI applications. +Learn more from the following resources: + +- [@article@Neural Networks — Machine Learning Crash Course - Google Developers](https://developers.google.com/machine-learning/crash-course/neural-networks) +- [@article@Introduction to Neural Networks - GeeksforGeeks](https://www.geeksforgeeks.org/deep-learning/neural-networks-a-beginners-guide/) +- [@interactive@A Neural Network Playground - TensorFlow](https://playground.tensorflow.org/) diff --git a/src/data/roadmaps/server-side-game-developer/content/denial-of-service@TbXJO__4xSnzK1fvvJK86.md b/src/data/roadmaps/server-side-game-developer/content/denial-of-service@TbXJO__4xSnzK1fvvJK86.md index a2ab2932d663..3e72c47cf27a 100644 --- a/src/data/roadmaps/server-side-game-developer/content/denial-of-service@TbXJO__4xSnzK1fvvJK86.md +++ b/src/data/roadmaps/server-side-game-developer/content/denial-of-service@TbXJO__4xSnzK1fvvJK86.md @@ -1,3 +1,9 @@ # Denial of Service -Denial of Service (DoS) is a malicious attempt to disrupt the regular functioning of a network, service, or server by overwhelming the network or server with a flood of internet traffic. The most common type of DoS attack involves flooding the target with unnecessary requests in an attempt to overload the system. In a Distributed Denial of Service (DDoS) attack, multiple computers are used to carry out the cyber attack. For servers, these attacks can significantly affect the availability and performance of games, causing a poor experience for the users. \ No newline at end of file +Denial of Service (DoS) is a malicious attempt to disrupt the regular functioning of a network, service, or server by overwhelming the network or server with a flood of internet traffic. The most common type of DoS attack involves flooding the target with unnecessary requests in an attempt to overload the system. In a Distributed Denial of Service (DDoS) attack, multiple computers are used to carry out the cyber attack. For servers, these attacks can significantly affect the availability and performance of games, causing a poor experience for the users. + +Learn more from the following resources: + +- [@article@10 Best Practices to Prevent DDoS Attacks - SecurityScorecard](https://securityscorecard.com/blog/best-practices-to-prevent-ddos-attacks/) +- [@article@Defending Against Distributed Denial of Service (DDoS) Attacks - Cyber.gc.ca](https://www.cyber.gc.ca/en/guidance/defending-against-distributed-denial-service-ddos-attacks-itsm80110) +- [@article@DDoS Attacks: How It Works & Mitigation Strategies - Darktrace](https://www.darktrace.com/cyber-ai-glossary/ddos-attack) diff --git a/src/data/roadmaps/server-side-game-developer/content/dependency-injection@uTlxyDOtvt_Qp0gXLWO-j.md b/src/data/roadmaps/server-side-game-developer/content/dependency-injection@uTlxyDOtvt_Qp0gXLWO-j.md index f889d0644a80..58cf449c205c 100644 --- a/src/data/roadmaps/server-side-game-developer/content/dependency-injection@uTlxyDOtvt_Qp0gXLWO-j.md +++ b/src/data/roadmaps/server-side-game-developer/content/dependency-injection@uTlxyDOtvt_Qp0gXLWO-j.md @@ -1,3 +1,9 @@ # Dependency Injection -`Dependency Injection` (DI) is a programming technique that makes a class independent of its dependencies. This is achieved by decoupling the use of an object from its creation. In this technique, instead of a class creating an object itself, an object is supplied or "injected" to the class by an external entity. The actual creation and binding of dependencies are managed by a 'container', which injects the dependencies into the respective classes. Dependency Injection can be done in three ways: Constructor Injection, Setter Injection, and Interface Injection. Each of these methods involves moving the responsibility of the object creation and binding to another class or method. \ No newline at end of file +`Dependency Injection` (DI) is a programming technique that makes a class independent of its dependencies. This is achieved by decoupling the use of an object from its creation. In this technique, instead of a class creating an object itself, an object is supplied or "injected" to the class by an external entity. The actual creation and binding of dependencies are managed by a 'container', which injects the dependencies into the respective classes. Dependency Injection can be done in three ways: Constructor Injection, Setter Injection, and Interface Injection. Each of these methods involves moving the responsibility of the object creation and binding to another class or method. + +Learn more from the following resources: + +- [@article@Dependency Injection in .NET - Microsoft Learn](https://learn.microsoft.com/en-us/dotnet/core/extensions/dependency-injection/overview) +- [@article@Design Patterns Explained - Dependency Injection - Stackify](https://stackify.com/dependency-injection/) +- [@article@Dependency Injection: A Guide With Examples - Built In](https://builtin.com/articles/dependency-injection) diff --git a/src/data/roadmaps/server-side-game-developer/content/descriptor@OAyMj6uLSv1yJ87YAjyZu.md b/src/data/roadmaps/server-side-game-developer/content/descriptor@OAyMj6uLSv1yJ87YAjyZu.md index a2554d0e6829..8379b9ed79ad 100644 --- a/src/data/roadmaps/server-side-game-developer/content/descriptor@OAyMj6uLSv1yJ87YAjyZu.md +++ b/src/data/roadmaps/server-side-game-developer/content/descriptor@OAyMj6uLSv1yJ87YAjyZu.md @@ -1,3 +1,9 @@ # Descriptor -In the context of socket programming, a **descriptor** is simply an identifier for a resource. With the use of these descriptors, socket applications can interact with system resources such as network connections, files, or data streams. For instance, in C-based languages such as C++, socket programming frequently makes use of file descriptors. These are integer values used by the operating system to identify open files and network sockets. It is crucial for a server-side game developer to understand and make efficient use of descriptors to control and manage all the network protocols, ensuring seamless game experiences. \ No newline at end of file +In the context of socket programming, a **descriptor** is simply an identifier for a resource. With the use of these descriptors, socket applications can interact with system resources such as network connections, files, or data streams. For instance, in C-based languages such as C++, socket programming frequently makes use of file descriptors. These are integer values used by the operating system to identify open files and network sockets. It is crucial for a server-side game developer to understand and make efficient use of descriptors to control and manage all the network protocols, ensuring seamless game experiences. + +Learn more from the following resources: + +- [@article@open(2) - Linux Manual Page - man7.org](https://man7.org/linux/man-pages/man2/open.2.html) +- [@article@C++ Socket Programming - TutorialsPoint](https://www.tutorialspoint.com/cplusplus/cpp_socket_programming.htm) +- [@article@Read from a File or Socket - IBM Documentation](https://www.ibm.com/docs/en/zos/3.1.0?topic=functions-read-read-from-file-socket) diff --git a/src/data/roadmaps/server-side-game-developer/content/design-patterns@gB-TYpgUDV47bxznNJhYn.md b/src/data/roadmaps/server-side-game-developer/content/design-patterns@gB-TYpgUDV47bxznNJhYn.md index 26c54c06a93b..889f7a9de3a6 100644 --- a/src/data/roadmaps/server-side-game-developer/content/design-patterns@gB-TYpgUDV47bxznNJhYn.md +++ b/src/data/roadmaps/server-side-game-developer/content/design-patterns@gB-TYpgUDV47bxznNJhYn.md @@ -1,3 +1,9 @@ # Design Patterns -Design Patterns represent best practices developed by experienced software engineers. They are reusable solutions to common problems that occur in software design and fulfill the requirement to decouple the system as much as possible. Design patterns categorize into Creational, Structural, and Behavioural types. Creational type includes patterns like Singleton, Prototype and Factory; Structural includes Adapter, Composite, and Proxy; Behavioural includes Observer, Strategy, Template, and Visitor. Every design pattern has its own particular structure defined that programmers can follow to solve a particular design problem in your programming code. \ No newline at end of file +Design Patterns represent best practices developed by experienced software engineers. They are reusable solutions to common problems that occur in software design and fulfill the requirement to decouple the system as much as possible. Design patterns categorize into Creational, Structural, and Behavioural types. Creational type includes patterns like Singleton, Prototype and Factory; Structural includes Adapter, Composite, and Proxy; Behavioural includes Observer, Strategy, Template, and Visitor. Every design pattern has its own particular structure defined that programmers can follow to solve a particular design problem in your programming code. + +Learn more from the following resources: + +- [@article@Gang of Four Design Patterns Explained - DigitalOcean](https://www.digitalocean.com/community/tutorials/gangs-of-four-gof-design-patterns) +- [@article@Design Patterns - SourceMaking](https://sourcemaking.com/design_patterns) +- [@article@Design Patterns - Refactoring Guru](https://refactoring.guru/design-patterns) diff --git a/src/data/roadmaps/server-side-game-developer/content/determinism@zFx1jjt1hKgCpYHFTzbZZ.md b/src/data/roadmaps/server-side-game-developer/content/determinism@zFx1jjt1hKgCpYHFTzbZZ.md index d0de0d2bc7f1..045aa4896c52 100644 --- a/src/data/roadmaps/server-side-game-developer/content/determinism@zFx1jjt1hKgCpYHFTzbZZ.md +++ b/src/data/roadmaps/server-side-game-developer/content/determinism@zFx1jjt1hKgCpYHFTzbZZ.md @@ -1,3 +1,9 @@ # Determinism -"Determinism" in the context of server side game development is a principle that highlights predictability and consistency in the system's output given specific and consistent inputs. It implies that a system will always produce the same outcome if the initial conditions and the sequence of events leading up to the outcome are identical. Determinism is incredibly important and beneficial in multi-player gaming situations like MMORPGs where synchronized and equal gameplay across all user instances is key. This level of predictability helps in offering a fair play environment to all players and in ease of debugging and replaying certain sequences for the developers. \ No newline at end of file +"Determinism" in the context of server side game development is a principle that highlights predictability and consistency in the system's output given specific and consistent inputs. It implies that a system will always produce the same outcome if the initial conditions and the sequence of events leading up to the outcome are identical. Determinism is incredibly important and beneficial in multi-player gaming situations like MMORPGs where synchronized and equal gameplay across all user instances is key. This level of predictability helps in offering a fair play environment to all players and in ease of debugging and replaying certain sequences for the developers. + +Learn more from the following resources: + +- [@article@Game Networking Demystied Part III: Lockstep - Ruoyu Sun](https://ruoyusun.com/2019/04/06/game-networking-3.html) +- [@article@How Do We Make Online Games Deterministic? - Stack Exchange](https://gamedev.stackexchange.com/questions/101181/how-do-we-make-online-games-deterministic) +- [@opensource@Deterministic Lockstep Demo - GitHub](https://github.com/pietrobassi/deterministic-lockstep-demo) diff --git a/src/data/roadmaps/server-side-game-developer/content/dhcp@aTHJh-xw8soCxC1bIDdXm.md b/src/data/roadmaps/server-side-game-developer/content/dhcp@aTHJh-xw8soCxC1bIDdXm.md index d458b676aa2b..e9ba6e1a64e5 100644 --- a/src/data/roadmaps/server-side-game-developer/content/dhcp@aTHJh-xw8soCxC1bIDdXm.md +++ b/src/data/roadmaps/server-side-game-developer/content/dhcp@aTHJh-xw8soCxC1bIDdXm.md @@ -1,3 +1,9 @@ # DHCP -DHCP, or Dynamic Host Configuration Protocol, is an internet protocol that enables automatic assignment of IP addresses to devices on a network. Its key role in network systems is to eliminate the manual task of assigning IP addresses in a large network. DHCP can be implemented in small, medium, or large networks encompassing hundreds of computers or even more. It involves a DHCP server, which is responsible for allocating IP addresses and controlling the process. This server maintains a pool of IP addresses, which it assigns to devices as they connect to the network. DHCP also handles release and renewal of these IP addresses as devices leave and rejoin the network. \ No newline at end of file +DHCP, or Dynamic Host Configuration Protocol, is an internet protocol that enables automatic assignment of IP addresses to devices on a network. Its key role in network systems is to eliminate the manual task of assigning IP addresses in a large network. DHCP can be implemented in small, medium, or large networks encompassing hundreds of computers or even more. It involves a DHCP server, which is responsible for allocating IP addresses and controlling the process. This server maintains a pool of IP addresses, which it assigns to devices as they connect to the network. DHCP also handles release and renewal of these IP addresses as devices leave and rejoin the network. + +Learn more from the following resources: + +- [@article@DHCP Basics - Microsoft Learn](https://learn.microsoft.com/en-us/windows-server/troubleshoot/dynamic-host-configuration-protocol-basics) +- [@article@Dynamic Host Configuration Protocol - Wikipedia](https://en.wikipedia.org/wiki/Dynamic_Host_Configuration_Protocol) +- [@article@Introduction to DHCP - NetworkLessons](https://networklessons.com/ip-services/introduction-to-dhcp) diff --git a/src/data/roadmaps/server-side-game-developer/content/dns@yNytLrQAMKBw4t73YRL3J.md b/src/data/roadmaps/server-side-game-developer/content/dns@yNytLrQAMKBw4t73YRL3J.md index 579c0740836c..7aa4dcec079b 100644 --- a/src/data/roadmaps/server-side-game-developer/content/dns@yNytLrQAMKBw4t73YRL3J.md +++ b/src/data/roadmaps/server-side-game-developer/content/dns@yNytLrQAMKBw4t73YRL3J.md @@ -1,3 +1,9 @@ # DNS -**Domain Name System (DNS)** is an internet service that translates domain names into IP addresses. The internet uses IP addresses to locate and connect different computers, but these numerical addresses can be difficult to remember or use practically. Therefore, DNS allows users to type in a domain name, such as www.example.com, and it translates this name into the equivalent IP address, such as 192.0.2.1. It is used every time you visit a website, send an email, or connect to any service on the internet. DNS serves as the internet's phone book, ensuring that every domain name corresponds to the correct IP address. \ No newline at end of file +**Domain Name System (DNS)** is an internet service that translates domain names into IP addresses. The internet uses IP addresses to locate and connect different computers, but these numerical addresses can be difficult to remember or use practically. Therefore, DNS allows users to type in a domain name, such as www.example.com, and it translates this name into the equivalent IP address, such as 192.0.2.1. It is used every time you visit a website, send an email, or connect to any service on the internet. DNS serves as the internet's phone book, ensuring that every domain name corresponds to the correct IP address. + +Learn more from the following resources: + +- [@article@What Is the DNS Protocol? - IBM](https://www.ibm.com/think/topics/dns-protocol) +- [@article@Domain Name System - Wikipedia](https://en.wikipedia.org/wiki/Domain_Name_System) +- [@article@How DNS Works - freeCodeCamp](https://www.freecodecamp.org/news/how-dns-works-the-internets-address-book/) diff --git a/src/data/roadmaps/server-side-game-developer/content/docker-compose@yAf7VDX7dyaT5AdlNnuKD.md b/src/data/roadmaps/server-side-game-developer/content/docker-compose@yAf7VDX7dyaT5AdlNnuKD.md index 042072606e40..ca1487dfadab 100644 --- a/src/data/roadmaps/server-side-game-developer/content/docker-compose@yAf7VDX7dyaT5AdlNnuKD.md +++ b/src/data/roadmaps/server-side-game-developer/content/docker-compose@yAf7VDX7dyaT5AdlNnuKD.md @@ -1,3 +1,9 @@ # Docker Compose -`Docker Compose` is a tool that allows you to define and manage multiple containers as a single entity. The containers are defined in a `docker-compose.yml` file using a YAML format. This tool is primarily focused on the runtime aspects of your application such as service definitions, configuration, and connections. With `Docker Compose`, you can start, stop, and manage the entire stack of services with a single command. This makes it a very powerful tool for managing multi-container applications. It is also a good method to define a local development environment that mimics your production environment. \ No newline at end of file +`Docker Compose` is a tool that allows you to define and manage multiple containers as a single entity. The containers are defined in a `docker-compose.yml` file using a YAML format. This tool is primarily focused on the runtime aspects of your application such as service definitions, configuration, and connections. With `Docker Compose`, you can start, stop, and manage the entire stack of services with a single command. This makes it a very powerful tool for managing multi-container applications. It is also a good method to define a local development environment that mimics your production environment. + +Learn more from the following resources: + +- [@official@Docker Compose Quickstart - Docker Docs](https://docs.docker.com/compose/gettingstarted/) +- [@official@Docker Compose Overview - Docker Docs](https://docs.docker.com/compose/) +- [@article@A Beginners Guide to Docker Compose - Better Stack](https://betterstack.com/community/guides/scaling-docker/docker-compose-getting-started/) diff --git a/src/data/roadmaps/server-side-game-developer/content/docker@zW_7VLeEHQp8fp_f5N__0.md b/src/data/roadmaps/server-side-game-developer/content/docker@zW_7VLeEHQp8fp_f5N__0.md index 3db2daf6d607..680ed927a09b 100644 --- a/src/data/roadmaps/server-side-game-developer/content/docker@zW_7VLeEHQp8fp_f5N__0.md +++ b/src/data/roadmaps/server-side-game-developer/content/docker@zW_7VLeEHQp8fp_f5N__0.md @@ -1,3 +1,9 @@ # Docker -"Docker" is an open-source platform that allows developers to automate the deployment, scaling, and management of applications. It uses containerization technologies to wrap up an application with its runtime environment into a container, which can then be run on almost any operating system. Docker containers are lightweight and fast because they do not need the extra load of a hypervisor, but run directly within the host machine's kernel. Additionally, Docker ensures that the application runs seamlessly in any environment by bundling its own software, libraries and system tools. Docker really simplifies the process of managing and deploying services in a distributed environment and breaking down tasks into separate services. \ No newline at end of file +"Docker" is an open-source platform that allows developers to automate the deployment, scaling, and management of applications. It uses containerization technologies to wrap up an application with its runtime environment into a container, which can then be run on almost any operating system. Docker containers are lightweight and fast because they do not need the extra load of a hypervisor, but run directly within the host machine's kernel. Additionally, Docker ensures that the application runs seamlessly in any environment by bundling its own software, libraries and system tools. Docker really simplifies the process of managing and deploying services in a distributed environment and breaking down tasks into separate services. + +Learn more from the following resources: + +- [@article@A Docker Tutorial for Beginners](https://docker-curriculum.com/) +- [@official@Docker 101 Tutorial - Docker](https://www.docker.com/101-tutorial/) +- [@opensource@Docker Getting Started Tutorial - GitHub](https://github.com/docker/getting-started) diff --git a/src/data/roadmaps/server-side-game-developer/content/dump-analysis@1c6EqGv1g-d8M1i0vKImb.md b/src/data/roadmaps/server-side-game-developer/content/dump-analysis@1c6EqGv1g-d8M1i0vKImb.md index 0ff1a75aebdc..2a03c7a61ac7 100644 --- a/src/data/roadmaps/server-side-game-developer/content/dump-analysis@1c6EqGv1g-d8M1i0vKImb.md +++ b/src/data/roadmaps/server-side-game-developer/content/dump-analysis@1c6EqGv1g-d8M1i0vKImb.md @@ -1,3 +1,9 @@ # Dump Analysis -**Dump Analysis** is a highly useful technique in server-side game development, primarily used for debugging and troubleshooting. It involves studying the 'dump' or all the information within a system when a program crashes or fails. This dump typically includes the system's memory, the active processes, thread stacks, and more. By analyzing this data, developers can get an insight into what caused the failure. Dump analysis can be manual, using debuggers like WinDbg, lldb, gdb, or automated with tools such as Microsoft's Automatic Debugging Tool (ADPlus) and DebugDiag. Note that the complexity of dump analysis can vary depending on the nature of the program crash or the size of the dump. \ No newline at end of file +**Dump Analysis** is a highly useful technique in server-side game development, primarily used for debugging and troubleshooting. It involves studying the 'dump' or all the information within a system when a program crashes or fails. This dump typically includes the system's memory, the active processes, thread stacks, and more. By analyzing this data, developers can get an insight into what caused the failure. Dump analysis can be manual, using debuggers like WinDbg, lldb, gdb, or automated with tools such as Microsoft's Automatic Debugging Tool (ADPlus) and DebugDiag. Note that the complexity of dump analysis can vary depending on the nature of the program crash or the size of the dump. + +Learn more from the following resources: + +- [@official@WinDbg Installation and Overview - Microsoft Learn](https://learn.microsoft.com/en-us/windows-hardware/drivers/debugger/) +- [@article@Basic Hang Dump Analysis Using WinDbg - Poppastring](https://www.poppastring.com/blog/basic-hang-dump-analysis-using-windbg) +- [@official@LLDB Tutorial - LLVM](https://lldb.llvm.org/use/tutorial.html) diff --git a/src/data/roadmaps/server-side-game-developer/content/dynamodb@9vc7sFE_XakYXtKRMxLXi.md b/src/data/roadmaps/server-side-game-developer/content/dynamodb@9vc7sFE_XakYXtKRMxLXi.md index 94038183523b..0e423b5ea7e9 100644 --- a/src/data/roadmaps/server-side-game-developer/content/dynamodb@9vc7sFE_XakYXtKRMxLXi.md +++ b/src/data/roadmaps/server-side-game-developer/content/dynamodb@9vc7sFE_XakYXtKRMxLXi.md @@ -1,3 +1,9 @@ # Dynamo DB -DynamoDB is a NoSQL database service provided by Amazon that delivers reliable performance at any scale. It's a fully managed, multiregion, multimaster database that offers built-in security, backup and restore, and in-memory caching. It's meant to support applications with large scale, low latency requirements. Developers can create database tables that can store and fetch any amount of data and can serve traffic from a few requests per month to millions of requests per second. As a part of AWS, DynamoDB integrates well with other AWS services and provides developers with high availability across multiple geographical regions. \ No newline at end of file +DynamoDB is a NoSQL database service provided by Amazon that delivers reliable performance at any scale. It's a fully managed, multiregion, multimaster database that offers built-in security, backup and restore, and in-memory caching. It's meant to support applications with large scale, low latency requirements. Developers can create database tables that can store and fetch any amount of data and can serve traffic from a few requests per month to millions of requests per second. As a part of AWS, DynamoDB integrates well with other AWS services and provides developers with high availability across multiple geographical regions. + +Learn more from the following resources: + +- [@official@What is Amazon DynamoDB? - AWS Docs](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/Introduction.html) +- [@official@Getting Started with DynamoDB - AWS Docs](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/GettingStartedDynamoDB.html) +- [@article@Amazon DynamoDB Unleashed: Complete Tutorial for Beginners - Dev.to](https://dev.to/fvgmspec/amazon-dynamodb-unleashed-complete-tutorial-for-beginners-49d4) diff --git a/src/data/roadmaps/server-side-game-developer/content/erlang@QGtGx5LBEWa1DD3Y7ztUy.md b/src/data/roadmaps/server-side-game-developer/content/erlang@QGtGx5LBEWa1DD3Y7ztUy.md index 965db26b4d70..8b5231af0a6b 100644 --- a/src/data/roadmaps/server-side-game-developer/content/erlang@QGtGx5LBEWa1DD3Y7ztUy.md +++ b/src/data/roadmaps/server-side-game-developer/content/erlang@QGtGx5LBEWa1DD3Y7ztUy.md @@ -1,3 +1,9 @@ # Erlang -Erlang is a functional, general-purpose concurrent programming language that supports distributed computation. It originated in the late 1980s, born from Ericson Inc., with the aim to improve the development of telephony applications. Erlang has built-in support for concurrency, distribution and fault tolerance which make it a popular choice for developing large scale, real-time systems. The language is mostly used in sectors where systems must continue to work despite errors, such as banking, eCommerce, computer telephony and instant messaging. Over the years, Erlang has been employed in blockchain development, internet of things (IoT) and online gaming programming where robust server-side development is required. \ No newline at end of file +Erlang is a functional, general-purpose concurrent programming language that supports distributed computation. It originated in the late 1980s, born from Ericson Inc., with the aim to improve the development of telephony applications. Erlang has built-in support for concurrency, distribution and fault tolerance which make it a popular choice for developing large scale, real-time systems. The language is mostly used in sectors where systems must continue to work despite errors, such as banking, eCommerce, computer telephony and instant messaging. Over the years, Erlang has been employed in blockchain development, internet of things (IoT) and online gaming programming where robust server-side development is required. + +Learn more from the following resources: + +- [@article@Learn You Some Erlang for Great Good!](https://learnyousomeerlang.com/introduction) +- [@article@Erlang-powered Game-like Applications - Erlang Forums](https://erlangforums.com/t/ideas-projects-of-erlang-powered-game-like-applications/971) +- [@article@Erlang Programming Language - Wikipedia](https://en.wikipedia.org/wiki/Erlang_(programming_language)) diff --git a/src/data/roadmaps/server-side-game-developer/content/error-detection@vFM311xSa5OqNVove2f6j.md b/src/data/roadmaps/server-side-game-developer/content/error-detection@vFM311xSa5OqNVove2f6j.md index 8fe6bb808e81..5446d29634a1 100644 --- a/src/data/roadmaps/server-side-game-developer/content/error-detection@vFM311xSa5OqNVove2f6j.md +++ b/src/data/roadmaps/server-side-game-developer/content/error-detection@vFM311xSa5OqNVove2f6j.md @@ -11,4 +11,7 @@ in multiplayer games, ensuring smooth gameplay and synchronization across player Visit the following resources to learn more: - [@article@Error Detection Code – Checksum](https://www.geeksforgeeks.org/error-detection-code-checksum/) -- [@article@Error Control in TCP](https://www.cisco.com/c/en/us/support/docs/ip/tcp/13733-40.html) \ No newline at end of file +- [@article@Error Control in TCP](https://www.cisco.com/c/en/us/support/docs/ip/tcp/13733-40.html) +- [@article@Error Detection in Computer Networks - GeeksforGeeks](https://www.geeksforgeeks.org/computer-networks/error-detection-in-computer-networks/) +- [@article@Cyclic Redundancy Check - Wikipedia](https://en.wikipedia.org/wiki/Cyclic_redundancy_check) +- [@article@Detecting and Correcting Bit Errors - Princeton University](https://www.cs.princeton.edu/courses/archive/spring19/cos463/lectures/L08-error-control.pdf) diff --git a/src/data/roadmaps/server-side-game-developer/content/fiber@TVJrlUsg30YIM1yjsZfJI.md b/src/data/roadmaps/server-side-game-developer/content/fiber@TVJrlUsg30YIM1yjsZfJI.md index d9355e6a7568..b81fd45e37e9 100644 --- a/src/data/roadmaps/server-side-game-developer/content/fiber@TVJrlUsg30YIM1yjsZfJI.md +++ b/src/data/roadmaps/server-side-game-developer/content/fiber@TVJrlUsg30YIM1yjsZfJI.md @@ -1,3 +1,8 @@ # Fiber -`Fiber` is a way to manage concurrency at a more granular level than threads. While threads represent a sequence of instructions that can run concurrently with other threads, a fiber is a unit of execution which only runs on its initiating thread. Fibers are scheduled by the application, not the operating system. They are great tools for implementing co-operative multitasking where you have many tasks that you want to have run concurrently, but you want to have explicit control on when they are switched in and out. For server-side game development, fibres can be particularly useful in dealing with multiple user requests, where each request might have its own fiber. \ No newline at end of file +`Fiber` is a way to manage concurrency at a more granular level than threads. While threads represent a sequence of instructions that can run concurrently with other threads, a fiber is a unit of execution which only runs on its initiating thread. Fibers are scheduled by the application, not the operating system. They are great tools for implementing co-operative multitasking where you have many tasks that you want to have run concurrently, but you want to have explicit control on when they are switched in and out. For server-side game development, fibres can be particularly useful in dealing with multiple user requests, where each request might have its own fiber. +Learn more from the following resources: + +- [@article@Green Thread - Wikipedia](https://en.wikipedia.org/wiki/Green_thread) +- [@article@Introduction to ZIO Fibers - ZIO](https://zio.dev/reference/fiber/) +- [@article@Difference Between Fibers and Threads - Cbrix](https://www.cbrix.com/difference-between-fibers-and-threads-a-comprehensive-guide/) diff --git a/src/data/roadmaps/server-side-game-developer/content/frp@xDYOvIbXc-iJ2zOKqe0YL.md b/src/data/roadmaps/server-side-game-developer/content/frp@xDYOvIbXc-iJ2zOKqe0YL.md index 7df2f1064427..c0f9a37f699d 100644 --- a/src/data/roadmaps/server-side-game-developer/content/frp@xDYOvIbXc-iJ2zOKqe0YL.md +++ b/src/data/roadmaps/server-side-game-developer/content/frp@xDYOvIbXc-iJ2zOKqe0YL.md @@ -1,3 +1,8 @@ # FRP -`Functional Reactive Programming (FRP)` is an approach to programming that combines functional and reactive concepts, mainly used in front-end and server-side development especially in games. FRP helps to deal with dependent changes, effectively handling 'time-varying values'. It is the elegant solution to describe systems where the current state depends on the future or the past state in a clear and efficient way. Its major concepts include streams (sequences of events over time), observers (consumers of values from a stream), and observables (producers of values), which are the heart of the FRP system. Through these characteristics, it manages data flows and propagation of change making software logic more readable and easier to understand. \ No newline at end of file +`Functional Reactive Programming (FRP)` is an approach to programming that combines functional and reactive concepts, mainly used in front-end and server-side development especially in games. FRP helps to deal with dependent changes, effectively handling 'time-varying values'. It is the elegant solution to describe systems where the current state depends on the future or the past state in a clear and efficient way. Its major concepts include streams (sequences of events over time), observers (consumers of values from a stream), and observables (producers of values), which are the heart of the FRP system. Through these characteristics, it manages data flows and propagation of change making software logic more readable and easier to understand. +Learn more from the following resources: + +- [@article@The Introduction to Reactive Programming You've Been Missing - Andre Staltz](https://gist.github.com/staltz/868e7e9bc2a7b8c1f754) +- [@article@Functional Reactive Programming: A Comprehensive Guide - AlgoCademy](https://algocademy.com/blog/functional-reactive-programming-a-comprehensive-guide-for-modern-developers/) +- [@article@Observable - ReactiveX](https://reactivex.io/documentation/observable.html) diff --git a/src/data/roadmaps/server-side-game-developer/content/function@YPvm8XD_FaFYCQ-b7-KsH.md b/src/data/roadmaps/server-side-game-developer/content/function@YPvm8XD_FaFYCQ-b7-KsH.md index 3e61c14ccfb6..c457effa3885 100644 --- a/src/data/roadmaps/server-side-game-developer/content/function@YPvm8XD_FaFYCQ-b7-KsH.md +++ b/src/data/roadmaps/server-side-game-developer/content/function@YPvm8XD_FaFYCQ-b7-KsH.md @@ -1,3 +1,8 @@ # Function -In server-side game development, functions are a fundamental building block of programming. These are reusable pieces of code designed to perform a particular task. Developers create functions to streamline code, improve readability, and enhance the efficiency of their program. Functions can take parameters as input and return a result. The syntax for declaring a function varies from one programming language to another. However, the basic structure remains the same. It usually starts with a function keyword, followed by the function name and parentheses `()`. Inside these parentheses, we can pass parameters. These parameters are then utilized within the function's body enclosed within curly brackets `{}`. The outputs are typically returned using a return statement. Remember, each function should ideally perform one task, and the function name should accurately represent its purpose to make the code self-explanatory. \ No newline at end of file +In server-side game development, functions are a fundamental building block of programming. These are reusable pieces of code designed to perform a particular task. Developers create functions to streamline code, improve readability, and enhance the efficiency of their program. Functions can take parameters as input and return a result. The syntax for declaring a function varies from one programming language to another. However, the basic structure remains the same. It usually starts with a function keyword, followed by the function name and parentheses `()`. Inside these parentheses, we can pass parameters. These parameters are then utilized within the function's body enclosed within curly brackets `{}`. The outputs are typically returned using a return statement. Remember, each function should ideally perform one task, and the function name should accurately represent its purpose to make the code self-explanatory. +Learn more from the following resources: + +- [@article@First-class Function - Wikipedia](https://en.wikipedia.org/wiki/First-class_function) +- [@article@First-class Function - MDN Web Docs](https://developer.mozilla.org/en-US/docs/Glossary/First-class_Function) +- [@article@First-Class Functions and Closures in Python - freeCodeCamp](https://www.freecodecamp.org/news/first-class-functions-and-closures-in-python/) diff --git a/src/data/roadmaps/server-side-game-developer/content/functional-programming@HXSWvhgT4L5w6xgOO-3kj.md b/src/data/roadmaps/server-side-game-developer/content/functional-programming@HXSWvhgT4L5w6xgOO-3kj.md index 2796ce373dbc..106953fc5f3c 100644 --- a/src/data/roadmaps/server-side-game-developer/content/functional-programming@HXSWvhgT4L5w6xgOO-3kj.md +++ b/src/data/roadmaps/server-side-game-developer/content/functional-programming@HXSWvhgT4L5w6xgOO-3kj.md @@ -1,3 +1,9 @@ # Functional Programming `Functional programming` is a programming paradigm that treats computation as the evaluation of mathematical functions and avoids changing-state and mutable data. In functional programming, functions are first-class citizens. This means that functions can be passed as arguments to other functions, returned as values from other functions, and assigned to variables. Examples of functional programming languages include Haskell, Lisp, and Scala. At the heart of functional programming are the concepts of immutability and pure functions. A pure function is a function that provides the same output for the same input and has no side effects. Immutability avoids changes to variables or objects once they've been created, which makes functional programs easier to debug and test. + +Learn more from the following resources: + +- [@article@Functional Programming - Wikipedia](https://en.wikipedia.org/wiki/Functional_programming) +- [@article@Functional Programming Paradigm - GeeksforGeeks](https://www.geeksforgeeks.org/blogs/functional-programming-paradigm/) +- [@article@Functional Programming Concepts in F# - Microsoft](https://learn.microsoft.com/en-us/dotnet/fsharp/tutorials/functional-programming-concepts) diff --git a/src/data/roadmaps/server-side-game-developer/content/future--promises@zbIbPlqTNSbJUkqH9iLQv.md b/src/data/roadmaps/server-side-game-developer/content/future--promises@zbIbPlqTNSbJUkqH9iLQv.md index 14faf7ba355d..8e5df65abd89 100644 --- a/src/data/roadmaps/server-side-game-developer/content/future--promises@zbIbPlqTNSbJUkqH9iLQv.md +++ b/src/data/roadmaps/server-side-game-developer/content/future--promises@zbIbPlqTNSbJUkqH9iLQv.md @@ -1,3 +1,9 @@ # Future & Promises `Futures and promises` or simply `Promises` in programming is a pattern used for handling asynchronous operations. A `Promise` is an object that might produce a single value or error in the future either through a non-blocking way or in an asynchronous way. A `Promise` has three states - pending, resolved (success), and rejected (error). The Promise transitions from the Pending state to either an accomplished Resolved state, or Rejected state. These status changes are irreversible, meaning once the Promise reaches either Resolved or Rejected state, it cannot transition to any other state. + +Learn more from the following resources: + +- [@article@Futures and Promises - Wikipedia](https://en.wikipedia.org/wiki/Futures_and_promises) +- [@article@Promise - MDN Web Docs](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise) +- [@article@Asynchronous Programming Patterns - Microsoft](https://learn.microsoft.com/en-us/dotnet/standard/asynchronous-programming-patterns/) diff --git a/src/data/roadmaps/server-side-game-developer/content/gcp@wD6dUrS-tP2gpCHPghFp5.md b/src/data/roadmaps/server-side-game-developer/content/gcp@wD6dUrS-tP2gpCHPghFp5.md index fa6d91515a5c..4b16ad545742 100644 --- a/src/data/roadmaps/server-side-game-developer/content/gcp@wD6dUrS-tP2gpCHPghFp5.md +++ b/src/data/roadmaps/server-side-game-developer/content/gcp@wD6dUrS-tP2gpCHPghFp5.md @@ -1,3 +1,8 @@ # Google Cloud Platform -**Google Cloud Platform (GCP)** is a suite of public cloud computing services offered by Google. It provides a range of services including compute, storage, networking, Big Data, machine learning, and the internet of things (IoT), plus cloud management, security, and developer tools. The core cloud computing products in GCP consist of Google Compute Engine, Google App Engine, Google Container Engine, Google Cloud Storage, and Google Cloud SQL. Google also offers cloud services for source code management, load balancing, security and privacy, and more. The architecture of GCP is built on the same infrastructure that Google uses for its global products such as YouTube, Google Search, and Google Maps. \ No newline at end of file +**Google Cloud Platform (GCP)** is a suite of public cloud computing services offered by Google. It provides a range of services including compute, storage, networking, Big Data, machine learning, and the internet of things (IoT), plus cloud management, security, and developer tools. The core cloud computing products in GCP consist of Google Compute Engine, Google App Engine, Google Container Engine, Google Cloud Storage, and Google Cloud SQL. Google also offers cloud services for source code management, load balancing, security and privacy, and more. The architecture of GCP is built on the same infrastructure that Google uses for its global products such as YouTube, Google Search, and Google Maps. +Learn more from the following resources: + +- [@article@Set Up a Multiplayer Game Server with Google Cloud - Google Cloud Blog](https://cloud.google.com/blog/products/media-entertainment/set-up-a-multiplayer-game-server-with-google-cloud) +- [@article@Google Cloud Game Servers with Mark Mandel - Google Cloud Podcast](https://www.gcppodcast.com/post/episode-246-google-cloud-game-servers-with-mark-mandel/) +- [@article@Building Real-Time Multiplayer Game with Cloud Spanner - Google Cloud](https://cloud.google.com/blog/topics/developers-practitioners/building-real-time-multiplayer-game-with-cloud-spanner) diff --git a/src/data/roadmaps/server-side-game-developer/content/go@d5iQYn97vuoxJnCFGPdOa.md b/src/data/roadmaps/server-side-game-developer/content/go@d5iQYn97vuoxJnCFGPdOa.md index 59448b2167ee..433981c92a5b 100644 --- a/src/data/roadmaps/server-side-game-developer/content/go@d5iQYn97vuoxJnCFGPdOa.md +++ b/src/data/roadmaps/server-side-game-developer/content/go@d5iQYn97vuoxJnCFGPdOa.md @@ -1 +1,7 @@ -# Go \ No newline at end of file +# Go + +Learn more from the following resources: + +- [@article@Making a Multiplayer Game with Go and gRPC - Mortenson](https://mortenson.coffee/blog/making-multiplayer-game-go-and-grpc) +- [@article@Effective Go - Go Dev](https://go.dev/doc/effective_go) +- [@article@A Tour of Go: Concurrency - Go Dev](https://go.dev/tour/concurrency) diff --git a/src/data/roadmaps/server-side-game-developer/content/goroutine-go@f-L_eaZd0EjBW9-n9Pllt.md b/src/data/roadmaps/server-side-game-developer/content/goroutine-go@f-L_eaZd0EjBW9-n9Pllt.md index 86bbfc55cbe6..662acea48230 100644 --- a/src/data/roadmaps/server-side-game-developer/content/goroutine-go@f-L_eaZd0EjBW9-n9Pllt.md +++ b/src/data/roadmaps/server-side-game-developer/content/goroutine-go@f-L_eaZd0EjBW9-n9Pllt.md @@ -1,3 +1,8 @@ # goroutine (Go) -`Goroutine` is a lightweight thread managed by the Go runtime. They are functions or methods that run concurrently with other functions or methods in the Go programming language. Goroutines are cheaper than threads as they use less memory, and their creation and destruction are more efficient in terms of performance. Unlike threads in other languages, the Go runtime manages the scheduling of Goroutines, taking a lot of the complexities away from the developer. Goroutines are one of the unique features of Go, making it an excellent choice for concurrent programming, especially useful in server-side game development. \ No newline at end of file +`Goroutine` is a lightweight thread managed by the Go runtime. They are functions or methods that run concurrently with other functions or methods in the Go programming language. Goroutines are cheaper than threads as they use less memory, and their creation and destruction are more efficient in terms of performance. Unlike threads in other languages, the Go runtime manages the scheduling of Goroutines, taking a lot of the complexities away from the developer. Goroutines are one of the unique features of Go, making it an excellent choice for concurrent programming, especially useful in server-side game development. +Learn more from the following resources: + +- [@article@Goroutines in Go: A Practical Guide to Concurrency - GetStream](https://getstream.io/blog/goroutines-go-concurrency-guide/) +- [@article@Learn How to Use Concurrency in Go - TheServerSide](https://www.theserverside.com/tutorial/Learn-how-to-use-concurrency-in-Go-with-this-tutorial) +- [@article@Learn Concurrency in Go - Go Wiki](https://go.dev/wiki/LearnConcurrency) diff --git a/src/data/roadmaps/server-side-game-developer/content/grpc@_uqTTBUYAzDHbEUkDzmzg.md b/src/data/roadmaps/server-side-game-developer/content/grpc@_uqTTBUYAzDHbEUkDzmzg.md index 274eb1ee6fe8..836a3b51dfe8 100644 --- a/src/data/roadmaps/server-side-game-developer/content/grpc@_uqTTBUYAzDHbEUkDzmzg.md +++ b/src/data/roadmaps/server-side-game-developer/content/grpc@_uqTTBUYAzDHbEUkDzmzg.md @@ -1,3 +1,8 @@ # gRPC -`gRPC` (Google Remote Procedure Call) is a high-performance, open-source universal RPC framework designed by Google. The gRPC framework supports a wide range of languages, and it is based on the proto3 protocol buffer (protobuf) language. It uses Protocol Buffers as the interface definition language for defining the method parameters service and return types. gRPC is designed to work over a variety of different pluggable transports and also supports load balancing, tracing, health checking and authentication. It's functionality is particularly suited for point-to-point services within a microservice architecture. \ No newline at end of file +`gRPC` (Google Remote Procedure Call) is a high-performance, open-source universal RPC framework designed by Google. The gRPC framework supports a wide range of languages, and it is based on the proto3 protocol buffer (protobuf) language. It uses Protocol Buffers as the interface definition language for defining the method parameters service and return types. gRPC is designed to work over a variety of different pluggable transports and also supports load balancing, tracing, health checking and authentication. It's functionality is particularly suited for point-to-point services within a microservice architecture. +Learn more from the following resources: + +- [@article@Introduction to gRPC - gRPC.io](https://grpc.io/docs/what-is-grpc/introduction/) +- [@article@gRPC Documentation - gRPC.io](https://grpc.io/docs/) +- [@article@How to Get Started with gRPC - OneUptime](https://oneuptime.com/blog/post/2026-02-20-grpc-getting-started/view) diff --git a/src/data/roadmaps/server-side-game-developer/content/heavy-vs-lightweight@OYXKtl4A-vaK6yGO6hS6n.md b/src/data/roadmaps/server-side-game-developer/content/heavy-vs-lightweight@OYXKtl4A-vaK6yGO6hS6n.md index 438b629825d0..cf4fe2aaa71a 100644 --- a/src/data/roadmaps/server-side-game-developer/content/heavy-vs-lightweight@OYXKtl4A-vaK6yGO6hS6n.md +++ b/src/data/roadmaps/server-side-game-developer/content/heavy-vs-lightweight@OYXKtl4A-vaK6yGO6hS6n.md @@ -2,4 +2,10 @@ TCP (Transmission Control Protocol) is often described as a "heavyweight" protocol because it provides numerous features such as error-checking, guaranteed delivery, and order-of-arrival of data packets, which makes it more complex to implement in the server. This complexity results in additional server load, making it heavier in terms of processing resources and system requirements. -On the other hand, UDP (User Datagram Protocol) is known as a "lightweight" protocol. It is simpler and faster because it does not offer the same extensive features as TCP. UDP does not guarantee delivery, does not require initial handshake establishment between communicating systems, and does not put data packets in order, thereby reducing the computation and rendering it lightweight. \ No newline at end of file +On the other hand, UDP (User Datagram Protocol) is known as a "lightweight" protocol. It is simpler and faster because it does not offer the same extensive features as TCP. UDP does not guarantee delivery, does not require initial handshake establishment between communicating systems, and does not put data packets in order, thereby reducing the computation and rendering it lightweight. + +Learn more from the following resources: + +- [@article@Difference Between Process and Thread - GeeksforGeeks](https://www.geeksforgeeks.org/operating-systems/difference-between-process-and-thread/) +- [@article@Operating Systems: Threads - UIC](https://www.cs.uic.edu/~jbell/CourseNotes/OperatingSystems/4_Threads.html) +- [@article@Lightweight vs Heavyweight Processes - Stack Overflow](https://stackoverflow.com/questions/6004069/lightweight-vs-heavyweight-processes) diff --git a/src/data/roadmaps/server-side-game-developer/content/io_uring@YH7u1FKh85wz78J0stuzS.md b/src/data/roadmaps/server-side-game-developer/content/io_uring@YH7u1FKh85wz78J0stuzS.md index d72e19e4bbf1..e700914f4cc1 100644 --- a/src/data/roadmaps/server-side-game-developer/content/io_uring@YH7u1FKh85wz78J0stuzS.md +++ b/src/data/roadmaps/server-side-game-developer/content/io_uring@YH7u1FKh85wz78J0stuzS.md @@ -11,4 +11,7 @@ game servers to handle thousands of concurrent connections with minimal CPU usag Visit the following resources to learn more: - [@documentation@Linux io_uring_enter](https://man7.org/linux/man-pages/man2/io_uring_enter.2.html) -- [@article@Efficient Networking with io_uring](https://lwn.net/Articles/776703/) \ No newline at end of file +- [@article@Efficient Networking with io_uring](https://lwn.net/Articles/776703/) +- [@article@io_uring by Example: Introduction - Unixism](https://unixism.net/2020/04/io-uring-by-example-part-1-introduction/) +- [@documentation@io_uring(7) Linux Manual Page - man7.org](https://man7.org/linux/man-pages/man7/io_uring.7.html) +- [@article@Why You Should Use io_uring for Network I/O - Red Hat](https://developers.redhat.com/articles/2023/04/12/why-you-should-use-iouring-network-io) diff --git a/src/data/roadmaps/server-side-game-developer/content/iocp@7pgdOZomhGilBTwfJLMbm.md b/src/data/roadmaps/server-side-game-developer/content/iocp@7pgdOZomhGilBTwfJLMbm.md index 9aaf53eb0bc4..078605cace55 100644 --- a/src/data/roadmaps/server-side-game-developer/content/iocp@7pgdOZomhGilBTwfJLMbm.md +++ b/src/data/roadmaps/server-side-game-developer/content/iocp@7pgdOZomhGilBTwfJLMbm.md @@ -11,4 +11,7 @@ choice for high-performance Windows-based game networking. Visit the following resources to learn more: -- [@documentation@Microsoft IOCP Documentation](https://learn.microsoft.com/en-us/windows/win32/fileio/i-o-completion-ports) \ No newline at end of file +- [@documentation@Microsoft IOCP Documentation](https://learn.microsoft.com/en-us/windows/win32/fileio/i-o-completion-ports) +- [@article@I/O Completion Ports Advantages and Disadvantages - Stack Overflow](https://stackoverflow.com/questions/5283032/i-o-completion-ports-advantages-and-disadvantages) +- [@article@IO Completion Ports - Matt Godbolt](https://xania.org/200807/iocp) +- [@article@Asynchronous I/O in Windows for Unix Programmers - Ryan Dahl](https://tinyclouds.org/iocp-links/) diff --git a/src/data/roadmaps/server-side-game-developer/content/ip-addressing@3ZcJNDCHw2pFzewmoB-03.md b/src/data/roadmaps/server-side-game-developer/content/ip-addressing@3ZcJNDCHw2pFzewmoB-03.md index 545af4428d9c..f257ccc3dc0d 100644 --- a/src/data/roadmaps/server-side-game-developer/content/ip-addressing@3ZcJNDCHw2pFzewmoB-03.md +++ b/src/data/roadmaps/server-side-game-developer/content/ip-addressing@3ZcJNDCHw2pFzewmoB-03.md @@ -1,3 +1,9 @@ # IP Addressing -IP (Internet Protocol) addressing is a fundamental aspect of networking, at the core of interaction between systems in a network. Each device connected to a network must have a unique address, known as an IP address, to communicate with other devices. In version 4 of the IP protocol (IPv4), these addresses are usually represented as four numbers, each ranging from 0 to 255, separated by periods (e.g., 192.168.1.1). The newer standard, IPv6, introduced to deal with the shortage of available IPv4 addresses, employs a more complex notation using hexadecimal numbers and colons. However, the purpose remains the same: to uniquely identify each device on a network. IP addresses can be either static (permanently assigned to a device) or dynamic (assigned temporarily from a pool of addresses). \ No newline at end of file +IP (Internet Protocol) addressing is a fundamental aspect of networking, at the core of interaction between systems in a network. Each device connected to a network must have a unique address, known as an IP address, to communicate with other devices. In version 4 of the IP protocol (IPv4), these addresses are usually represented as four numbers, each ranging from 0 to 255, separated by periods (e.g., 192.168.1.1). The newer standard, IPv6, introduced to deal with the shortage of available IPv4 addresses, employs a more complex notation using hexadecimal numbers and colons. However, the purpose remains the same: to uniquely identify each device on a network. IP addresses can be either static (permanently assigned to a device) or dynamic (assigned temporarily from a pool of addresses). + +Learn more from the following resources: + +- [@article@TCP/IP Addressing and Subnetting - Microsoft Learn](https://learn.microsoft.com/en-us/troubleshoot/windows-client/networking/tcpip-addressing-and-subnetting) +- [@article@What is an IP Address? - GeeksforGeeks](https://www.geeksforgeeks.org/computer-science-fundamentals/what-is-an-ip-address/) +- [@course@Fundamentals of Computer Networking - Microsoft Learn](https://learn.microsoft.com/en-us/training/modules/network-fundamentals/) diff --git a/src/data/roadmaps/server-side-game-developer/content/ip@tg94V7K0mgYhpkUMp_Scv.md b/src/data/roadmaps/server-side-game-developer/content/ip@tg94V7K0mgYhpkUMp_Scv.md index 0cb9fd508a36..6eaf896a63bf 100644 --- a/src/data/roadmaps/server-side-game-developer/content/ip@tg94V7K0mgYhpkUMp_Scv.md +++ b/src/data/roadmaps/server-side-game-developer/content/ip@tg94V7K0mgYhpkUMp_Scv.md @@ -1,3 +1,9 @@ # IP -**Internet Protocol (IP)** is the primary method used to send and receive messages on the internet. It's a set of rules that dictate how data should be delivered over the internet. An IP address is a unique string of numbers separated by periods that identifies each device using the Internet Protocol to communicate over a network. There are two types: IPv4 and IPv6. IPv4, the most common, consists of four groups of numbers, each ranging from 0 to 255. For example, "192.168.0.1". On the other hand, IPv6, the next-generation protocol, provides about 340 undecillion addresses, ensuring the ability to provide unique IPs for every device on the planet. For instance, "2001:0db8:85a3:0000:0000:8a2e:0370:7334". Each IP address can be static (permanent) or dynamic (changeable), depending on your network configurations. \ No newline at end of file +**Internet Protocol (IP)** is the primary method used to send and receive messages on the internet. It's a set of rules that dictate how data should be delivered over the internet. An IP address is a unique string of numbers separated by periods that identifies each device using the Internet Protocol to communicate over a network. There are two types: IPv4 and IPv6. IPv4, the most common, consists of four groups of numbers, each ranging from 0 to 255. For example, "192.168.0.1". On the other hand, IPv6, the next-generation protocol, provides about 340 undecillion addresses, ensuring the ability to provide unique IPs for every device on the planet. For instance, "2001:0db8:85a3:0000:0000:8a2e:0370:7334". Each IP address can be static (permanent) or dynamic (changeable), depending on your network configurations. + +Learn more from the following resources: + +- [@article@What is Internet Protocol (IP)? - GeeksforGeeks](https://www.geeksforgeeks.org/computer-networks/what-is-internet-protocol-ip/) +- [@article@IP Network (Internet Protocol Network) - Kentik](https://www.kentik.com/kentipedia/ip-network/) +- [@article@Introduction to IP (Internet Protocol) V4 - NetworkLessons](https://networklessons.com/subnetting/internet-protocol) diff --git a/src/data/roadmaps/server-side-game-developer/content/ipv4@pHVB0K8Vtk3ToD6n_f1wv.md b/src/data/roadmaps/server-side-game-developer/content/ipv4@pHVB0K8Vtk3ToD6n_f1wv.md index 3dcac0e1487f..b187008320e4 100644 --- a/src/data/roadmaps/server-side-game-developer/content/ipv4@pHVB0K8Vtk3ToD6n_f1wv.md +++ b/src/data/roadmaps/server-side-game-developer/content/ipv4@pHVB0K8Vtk3ToD6n_f1wv.md @@ -1,3 +1,9 @@ # IPv4 -`IPv4`, or Internet Protocol Version 4, is the fourth version of IP (Internet Protocol). It's a foundational protocol that routes most of the Internet traffic today, even with the growing reach of IPv6. `IPv4` is responsible for identifying devices on a network through an addressing system. The `IPv4` uses a 32-bit address schema allowing for a total of just over 4 billion addresses. Most importantly, `IPv4` determines how data is sent and received over network devices. This standard of `IPv4` helps to route data between networks and has been foundational in the creation of the modern Internet. \ No newline at end of file +`IPv4`, or Internet Protocol Version 4, is the fourth version of IP (Internet Protocol). It's a foundational protocol that routes most of the Internet traffic today, even with the growing reach of IPv6. `IPv4` is responsible for identifying devices on a network through an addressing system. The `IPv4` uses a 32-bit address schema allowing for a total of just over 4 billion addresses. Most importantly, `IPv4` determines how data is sent and received over network devices. This standard of `IPv4` helps to route data between networks and has been foundational in the creation of the modern Internet. + +Learn more from the following resources: + +- [@article@How IPv4 Works - A Handbook for Developers - freeCodeCamp](https://www.freecodecamp.org/news/how-ipv4-works-a-handbook-for-developers/) +- [@article@What is Internet Protocol Version 4 (IPv4) - GeeksforGeeks](https://www.geeksforgeeks.org/computer-networks/what-is-ipv4/) +- [@article@IPv4 Header Structure and Fields Explained - ComputerNetworkingNotes](https://www.computernetworkingnotes.com/networking-tutorials/ipv4-header-structure-and-fields-explained.html) diff --git a/src/data/roadmaps/server-side-game-developer/content/ipv6@TqBlAMfhARhlJed6xD7eg.md b/src/data/roadmaps/server-side-game-developer/content/ipv6@TqBlAMfhARhlJed6xD7eg.md index 935b042a9b60..b8803e24bf95 100644 --- a/src/data/roadmaps/server-side-game-developer/content/ipv6@TqBlAMfhARhlJed6xD7eg.md +++ b/src/data/roadmaps/server-side-game-developer/content/ipv6@TqBlAMfhARhlJed6xD7eg.md @@ -1,3 +1,9 @@ # IPv6 -IPv6, which stands for Internet Protocol version 6, is the most recent version of the Internet Protocol (IP), formulated to rectify the impending issue of IPv4 address exhaustion. Unlike IPv4, which uses 32-bit address, IPv6 employs a 128-bit address, enabling a massive number of unique IP addresses to exist. This augments the capacity of the internet to accommodate an array of networks and devices, serving as a sustainable solution for an ever-expanding digital world. IPv6 also provides enhanced functionalities including simplified header format, improved support for extensions and options, built-in security using IPsec, and better support for QoS (Quality of Service). In server side game development, IPv6 ensures smooth and lag-free game experiences to players by enabling direct peer-to-peer connections. \ No newline at end of file +IPv6, which stands for Internet Protocol version 6, is the most recent version of the Internet Protocol (IP), formulated to rectify the impending issue of IPv4 address exhaustion. Unlike IPv4, which uses 32-bit address, IPv6 employs a 128-bit address, enabling a massive number of unique IP addresses to exist. This augments the capacity of the internet to accommodate an array of networks and devices, serving as a sustainable solution for an ever-expanding digital world. IPv6 also provides enhanced functionalities including simplified header format, improved support for extensions and options, built-in security using IPsec, and better support for QoS (Quality of Service). In server side game development, IPv6 ensures smooth and lag-free game experiences to players by enabling direct peer-to-peer connections. + +Learn more from the following resources: + +- [@article@Introduction to IPv6 - NetworkLessons](https://networklessons.com/ipv6/introduction-to-ipv6) +- [@course@IPv6 Fundamentals - NetworkAcademy](https://www.networkacademy.io/ccna/ipv6) +- [@article@IPv6 Address - Wikipedia](https://en.wikipedia.org/wiki/IPv6_address) diff --git a/src/data/roadmaps/server-side-game-developer/content/java@LG8JPL1po-gEs1V5JyC8F.md b/src/data/roadmaps/server-side-game-developer/content/java@LG8JPL1po-gEs1V5JyC8F.md index a8b4b0f4a08d..8acf95f78b0c 100644 --- a/src/data/roadmaps/server-side-game-developer/content/java@LG8JPL1po-gEs1V5JyC8F.md +++ b/src/data/roadmaps/server-side-game-developer/content/java@LG8JPL1po-gEs1V5JyC8F.md @@ -1,3 +1,9 @@ # Java -Java is an object-oriented programming language that is class-based and designed to have as few implementation dependencies as possible. It was originally developed by James Gosling at Sun Microsystems and released in 1995 as a core component of Sun Microsystems' Java platform. The language's syntax has much in common with C and C++, but its object model is simpler and has less low-level facilities. Java applications are typically compiled to bytecode that can run on any Java Virtual Machine (JVM), making Java applications highly portable. Java is a general-purpose programming language and is used widely for server-side applications, particularly in high-performance environments where speed and scalability are critical. \ No newline at end of file +Java is an object-oriented programming language that is class-based and designed to have as few implementation dependencies as possible. It was originally developed by James Gosling at Sun Microsystems and released in 1995 as a core component of Sun Microsystems' Java platform. The language's syntax has much in common with C and C++, but its object model is simpler and has less low-level facilities. Java applications are typically compiled to bytecode that can run on any Java Virtual Machine (JVM), making Java applications highly portable. Java is a general-purpose programming language and is used widely for server-side applications, particularly in high-performance environments where speed and scalability are critical. + +Learn more from the following resources: + +- [@official@Netty - Asynchronous Event-Driven Network Framework](https://netty.io/) +- [@article@A Quick Guide to Java on Netty - Okta Developer](https://developer.okta.com/blog/2019/11/25/java-netty-webflux) +- [@official@libGDX Networking Guide](https://libgdx.com/wiki/networking) diff --git a/src/data/roadmaps/server-side-game-developer/content/javascript@ufufnULqsglE5VhEIAdSI.md b/src/data/roadmaps/server-side-game-developer/content/javascript@ufufnULqsglE5VhEIAdSI.md index 5e73bd8ea419..de30f51924cd 100644 --- a/src/data/roadmaps/server-side-game-developer/content/javascript@ufufnULqsglE5VhEIAdSI.md +++ b/src/data/roadmaps/server-side-game-developer/content/javascript@ufufnULqsglE5VhEIAdSI.md @@ -1,3 +1,9 @@ # JavaScript -JavaScript (often abbreviated as JS) is a high-level, interpreted programming language that conforms to the ECMAScript specification. It plays a key role in web development as it is one of the three core languages of the World Wide Web, along with HTML and CSS. In server-side game development, JavaScript can be utilized through runtime environments such as Node.js. Over the years, JavaScript has evolved to incorporate additional features, such as support for object-oriented and functional programming styles. It is dynamically-typed, and supports event-driven programming, which is especially handy in game development for handling user inputs and system events. Despite its name, JavaScript is not related to Java. \ No newline at end of file +JavaScript (often abbreviated as JS) is a high-level, interpreted programming language that conforms to the ECMAScript specification. It plays a key role in web development as it is one of the three core languages of the World Wide Web, along with HTML and CSS. In server-side game development, JavaScript can be utilized through runtime environments such as Node.js. Over the years, JavaScript has evolved to incorporate additional features, such as support for object-oriented and functional programming styles. It is dynamically-typed, and supports event-driven programming, which is especially handy in game development for handling user inputs and system events. Despite its name, JavaScript is not related to Java. + +Learn more from the following resources: + +- [@official@Socket.IO - Real-Time Bidirectional Event-Based Communication](https://socket.io/) +- [@article@Express/Node.js Server-Side Development - MDN](https://developer.mozilla.org/en-US/docs/Learn_web_development/Extensions/Server-side/Express_Nodejs) +- [@article@WebSocket API - MDN Web Docs](https://developer.mozilla.org/en-US/docs/Web/API/WebSockets_API) diff --git a/src/data/roadmaps/server-side-game-developer/content/json@y0ZJQQfi8Qx6sB4WnZlP5.md b/src/data/roadmaps/server-side-game-developer/content/json@y0ZJQQfi8Qx6sB4WnZlP5.md index 7bf98a227e93..9d9de49a39a1 100644 --- a/src/data/roadmaps/server-side-game-developer/content/json@y0ZJQQfi8Qx6sB4WnZlP5.md +++ b/src/data/roadmaps/server-side-game-developer/content/json@y0ZJQQfi8Qx6sB4WnZlP5.md @@ -1,3 +1,9 @@ # JSON -**JSON (JavaScript Object Notation)** is a lightweight data-interchange format that is easy to read and write for humans, also easy to parse and generate for machines. JSON is a text format that is completely language independent but uses conventions familiar to programmers of the C family of languages, including C, C++, C#, Java, JavaScript, Perl, and Python. In JSON, data is organized in name-value pairs and array data types. It is commonly used for transmitting data in server to web applications and vice versa. \ No newline at end of file +**JSON (JavaScript Object Notation)** is a lightweight data-interchange format that is easy to read and write for humans, also easy to parse and generate for machines. JSON is a text format that is completely language independent but uses conventions familiar to programmers of the C family of languages, including C, C++, C#, Java, JavaScript, Perl, and Python. In JSON, data is organized in name-value pairs and array data types. It is commonly used for transmitting data in server to web applications and vice versa. + +Learn more from the following resources: + +- [@article@JSON Official Website - json.org](https://www.json.org/) +- [@article@RFC 8259 - The JSON Data Interchange Format - IETF](https://datatracker.ietf.org/doc/html/rfc8259) +- [@article@A Beginner's Guide to JSON - Stack Overflow](https://stackoverflow.blog/2022/06/02/a-beginners-guide-to-json-the-data-format-for-the-internet/) diff --git a/src/data/roadmaps/server-side-game-developer/content/kqueue@caK32NMMrn-3BGAXZoPPr.md b/src/data/roadmaps/server-side-game-developer/content/kqueue@caK32NMMrn-3BGAXZoPPr.md index 1500340cbc20..af3aebee2891 100644 --- a/src/data/roadmaps/server-side-game-developer/content/kqueue@caK32NMMrn-3BGAXZoPPr.md +++ b/src/data/roadmaps/server-side-game-developer/content/kqueue@caK32NMMrn-3BGAXZoPPr.md @@ -11,4 +11,7 @@ multiplayer game servers, ensuring low-latency interactions and optimized resour Visit the following resources to learn more: - [@documentation@FreeBSD kqueue Documentation](https://man.freebsd.org/cgi/man.cgi?query=kqueue) -- [@documentation@macOS kqueue API Reference](https://developer.apple.com/library/archive/documentation/System/Conceptual/ManPages_iPhoneOS/man2/kqueue.2.html) \ No newline at end of file +- [@documentation@macOS kqueue API Reference](https://developer.apple.com/library/archive/documentation/System/Conceptual/ManPages_iPhoneOS/man2/kqueue.2.html) +- [@article@Kernel Queue: The Complete Guide - Habr](https://habr.com/en/articles/600123/) +- [@article@Using Kernel Queues (kqueue) Notifications in Swift - RDerik](https://rderik.com/blog/using-kernel-queues-kqueue-notifications-in-swift/) +- [@article@Kqueue Madness - FreeBSD Foundation](https://freebsdfoundation.org/wp-content/uploads/2014/05/Kqueue-Madness.pdf) diff --git a/src/data/roadmaps/server-side-game-developer/content/kubernetes@lUBUUoETjfADmM4OPtwwX.md b/src/data/roadmaps/server-side-game-developer/content/kubernetes@lUBUUoETjfADmM4OPtwwX.md index 20559a231e6e..50236b83970d 100644 --- a/src/data/roadmaps/server-side-game-developer/content/kubernetes@lUBUUoETjfADmM4OPtwwX.md +++ b/src/data/roadmaps/server-side-game-developer/content/kubernetes@lUBUUoETjfADmM4OPtwwX.md @@ -1,3 +1,9 @@ # Kubernetes -Kubernetes, often referred to as K8s, is an open-source platform designed to automate deploying, scaling, and operating application containers. It organizes containers into clusters to provide a flexible, powerful foundation for distributed systems. The platform was originally developed by Google, drawing on their long experience with managing containerized applications. It groups an application's containers into logical units for easy management and discovery. Kubernetes offers features like automatic bin packing, horizontal scaling, automated rollouts and rollbacks, and storage orchestration, among many others. It supports a variety of underlying infrastructures, from physical servers to virtual machines and cloud-based deployments, allowing you to run your apps wherever and however you choose. \ No newline at end of file +Kubernetes, often referred to as K8s, is an open-source platform designed to automate deploying, scaling, and operating application containers. It organizes containers into clusters to provide a flexible, powerful foundation for distributed systems. The platform was originally developed by Google, drawing on their long experience with managing containerized applications. It groups an application's containers into logical units for easy management and discovery. Kubernetes offers features like automatic bin packing, horizontal scaling, automated rollouts and rollbacks, and storage orchestration, among many others. It supports a variety of underlying infrastructures, from physical servers to virtual machines and cloud-based deployments, allowing you to run your apps wherever and however you choose. + +Learn more from the following resources: + +- [@official@Learn Kubernetes Basics - Kubernetes](https://kubernetes.io/docs/tutorials/kubernetes-basics/) +- [@official@Getting Started with Kubernetes](https://kubernetes.io/docs/setup/) +- [@official@Kubernetes Tutorials](https://kubernetes.io/docs/tutorials/) diff --git a/src/data/roadmaps/server-side-game-developer/content/link-capacity@OzY-LPcfj1sBm_0F0WbIJ.md b/src/data/roadmaps/server-side-game-developer/content/link-capacity@OzY-LPcfj1sBm_0F0WbIJ.md index 61cf575f6ce9..273b13c5b8f5 100644 --- a/src/data/roadmaps/server-side-game-developer/content/link-capacity@OzY-LPcfj1sBm_0F0WbIJ.md +++ b/src/data/roadmaps/server-side-game-developer/content/link-capacity@OzY-LPcfj1sBm_0F0WbIJ.md @@ -1,3 +1,9 @@ # Link Capacity -Link capacity, also known as bandwidth, refers to the maximum amount of data that can be transmitted over a network link within a given period of time. It is usually measured in bits per second (bps), kilobits per second (Kbps), megabits per second (Mbps), gigabits per second (Gbps), or terabits per second (Tbps). The link capacity is a critical factor in determining the throughput and latency of a server, impacting the overall performance and efficiency of the network communication. Please note that link capacity can be affected by various factors such as the quality of the transmission medium, the distance between the source and destination, and the network congestion. \ No newline at end of file +Link capacity, also known as bandwidth, refers to the maximum amount of data that can be transmitted over a network link within a given period of time. It is usually measured in bits per second (bps), kilobits per second (Kbps), megabits per second (Mbps), gigabits per second (Gbps), or terabits per second (Tbps). The link capacity is a critical factor in determining the throughput and latency of a server, impacting the overall performance and efficiency of the network communication. Please note that link capacity can be affected by various factors such as the quality of the transmission medium, the distance between the source and destination, and the network congestion. + +Learn more from the following resources: + +- [@article@Bandwidth, Latency and Throughput - Network Academy](https://www.networkacademy.io/ccna/network-fundamentals/bandwidth-latency-throughput) +- [@article@Latency vs Throughput vs Bandwidth - Kentik](https://www.kentik.com/kentipedia/latency-vs-throughput-vs-bandwidth/) +- [@article@What is Network Bandwidth? - NetAlly](https://www.netally.com/network-performance/what-is-network-bandwidth/) diff --git a/src/data/roadmaps/server-side-game-developer/content/max-segment-scaling@1l5dhQWYPhUSg-cy5pSlK.md b/src/data/roadmaps/server-side-game-developer/content/max-segment-scaling@1l5dhQWYPhUSg-cy5pSlK.md index 76a95d35ac7d..170a3883fa4f 100644 --- a/src/data/roadmaps/server-side-game-developer/content/max-segment-scaling@1l5dhQWYPhUSg-cy5pSlK.md +++ b/src/data/roadmaps/server-side-game-developer/content/max-segment-scaling@1l5dhQWYPhUSg-cy5pSlK.md @@ -1,3 +1,9 @@ # Max Segment Scaling -`Max Segment Scaling (MSS)` is a TCP feature that defines the maximum amount of data that can be received in a single TCP segment. It is specified during the TCP connection establishment phase. The MSS is calculated as the data link layer Maximum Transmission Unit (MTU) minus the size of the TCP and IP headers. The mechanism helps to avoid fragmentation at the IP layer, ensuring the data packets sent are optimal for the network path taken, preventing potential transmission inefficiencies or packet loss issues. \ No newline at end of file +`Max Segment Scaling (MSS)` is a TCP feature that defines the maximum amount of data that can be received in a single TCP segment. It is specified during the TCP connection establishment phase. The MSS is calculated as the data link layer Maximum Transmission Unit (MTU) minus the size of the TCP and IP headers. The mechanism helps to avoid fragmentation at the IP layer, ensuring the data packets sent are optimal for the network path taken, preventing potential transmission inefficiencies or packet loss issues. + +Learn more from the following resources: + +- [@article@RFC 6691 - TCP Options and Maximum Segment Size (MSS) - IETF](https://www.rfc-editor.org/rfc/rfc6691.html) +- [@article@Maximum Segment Size - Wikipedia](https://en.wikipedia.org/wiki/Maximum_segment_size) +- [@article@Description of Windows TCP Features - Microsoft Learn](https://learn.microsoft.com/en-us/troubleshoot/windows-server/networking/description-tcp-features) diff --git a/src/data/roadmaps/server-side-game-developer/content/memcached@ayeezKxQkXAPJMTShsOBU.md b/src/data/roadmaps/server-side-game-developer/content/memcached@ayeezKxQkXAPJMTShsOBU.md index cca0fa490310..1fb1e41dd790 100644 --- a/src/data/roadmaps/server-side-game-developer/content/memcached@ayeezKxQkXAPJMTShsOBU.md +++ b/src/data/roadmaps/server-side-game-developer/content/memcached@ayeezKxQkXAPJMTShsOBU.md @@ -1,3 +1,9 @@ # Memcached -`Memcached` is a high-performance, distributed memory object caching system that is generic in nature, but intended for use in speeding up dynamic web applications by alleviating database loads. It does this by storing data and objects in dynamic memory to reduce the frequency with which an external data source must be read. `Memcached` is fundamentally a key-value store that operates over the network. It uses a client–server architecture where the servers maintain a common view of the data set. The clients are responsible for partitioning data and determining to which servers data items are to be written or from which servers they are to be read. \ No newline at end of file +`Memcached` is a high-performance, distributed memory object caching system that is generic in nature, but intended for use in speeding up dynamic web applications by alleviating database loads. It does this by storing data and objects in dynamic memory to reduce the frequency with which an external data source must be read. `Memcached` is fundamentally a key-value store that operates over the network. It uses a client–server architecture where the servers maintain a common view of the data set. The clients are responsible for partitioning data and determining to which servers data items are to be written or from which servers they are to be read. + +Learn more from the following resources: + +- [@official@Memcached Documentation](https://docs.memcached.org/) +- [@article@Distributed Caching with Memcached - Linux Journal](https://www.linuxjournal.com/article/7451) +- [@article@Designing a Distributed Cache: Redis and Memcached at Scale - DEV](https://dev.to/sgchris/designing-a-distributed-cache-redis-and-memcached-at-scale-1if3) diff --git a/src/data/roadmaps/server-side-game-developer/content/message-queues@cw7WdFfL5HpeZ_n8wYk2t.md b/src/data/roadmaps/server-side-game-developer/content/message-queues@cw7WdFfL5HpeZ_n8wYk2t.md index 186b7ffbda83..6109fd63f05b 100644 --- a/src/data/roadmaps/server-side-game-developer/content/message-queues@cw7WdFfL5HpeZ_n8wYk2t.md +++ b/src/data/roadmaps/server-side-game-developer/content/message-queues@cw7WdFfL5HpeZ_n8wYk2t.md @@ -1,3 +1,9 @@ # Message Queues -Message queues are a fundamental element of server-side game development, primarily used for communication and data exchange between different processes, threads, or microservices. A message queue operates on the principle of first-in, first-out (FIFO). In the typical process, a sender submits messages to the queue, and receivers extract messages from the queue. This mechanism ensures seamless coordination between different parts of a system performing at different speeds and allows asynchronous information exchange. Features such as persistence, delivery acknowledgement, prioritization, and scheduling are commonly associated with message queues. Different technologies support message queues including RabbitMQ, Apache Kafka, and AWS SQS among others. The choice of the appropriate message queue technology can depend on specific requirements, such as the relevant programming language and the expected size and rate of message traffic. \ No newline at end of file +Message queues are a fundamental element of server-side game development, primarily used for communication and data exchange between different processes, threads, or microservices. A message queue operates on the principle of first-in, first-out (FIFO). In the typical process, a sender submits messages to the queue, and receivers extract messages from the queue. This mechanism ensures seamless coordination between different parts of a system performing at different speeds and allows asynchronous information exchange. Features such as persistence, delivery acknowledgement, prioritization, and scheduling are commonly associated with message queues. Different technologies support message queues including RabbitMQ, Apache Kafka, and AWS SQS among others. The choice of the appropriate message queue technology can depend on specific requirements, such as the relevant programming language and the expected size and rate of message traffic. + +Learn more from the following resources: + +- [@article@What's the Difference Between Kafka and RabbitMQ? - AWS](https://aws.amazon.com/compare/the-difference-between-rabbitmq-and-kafka/) +- [@article@Message Queue System Design Guide - System Design Handbook](https://www.systemdesignhandbook.com/guides/message-queue-system-design/) +- [@article@Message Queues System Design - GeeksforGeeks](https://www.geeksforgeeks.org/system-design/message-queues-system-design/) diff --git a/src/data/roadmaps/server-side-game-developer/content/mongodb@HYxtPW401-J6aYcTuiGnx.md b/src/data/roadmaps/server-side-game-developer/content/mongodb@HYxtPW401-J6aYcTuiGnx.md index 32186d987d19..8a6750e924e9 100644 --- a/src/data/roadmaps/server-side-game-developer/content/mongodb@HYxtPW401-J6aYcTuiGnx.md +++ b/src/data/roadmaps/server-side-game-developer/content/mongodb@HYxtPW401-J6aYcTuiGnx.md @@ -1,3 +1,9 @@ # MongoDB -MongoDB is a source-available NoSQL database program that uses a document-oriented database model. This model supports a variety of data types and enables you to store them in one place. MongoDB uses JSON-like documents coupled with optional schemas. What distinctly characterizes MongoDB is its scalability and flexibility that allow schemas to evolve with business needs. It can run over multiple servers, the data is duplicated to facilitate keeping the system up and the data available. Also, MongoDB supports rich queries through its powerful querying and aggregation tools. These capabilities encourage fast development and iterations. However, bear in mind that like any database, MongoDB is not a one-size-fit-all solution and understanding its best use cases is crucial for maximizing its benefits. \ No newline at end of file +MongoDB is a source-available NoSQL database program that uses a document-oriented database model. This model supports a variety of data types and enables you to store them in one place. MongoDB uses JSON-like documents coupled with optional schemas. What distinctly characterizes MongoDB is its scalability and flexibility that allow schemas to evolve with business needs. It can run over multiple servers, the data is duplicated to facilitate keeping the system up and the data available. Also, MongoDB supports rich queries through its powerful querying and aggregation tools. These capabilities encourage fast development and iterations. However, bear in mind that like any database, MongoDB is not a one-size-fit-all solution and understanding its best use cases is crucial for maximizing its benefits. + +Learn more from the following resources: + +- [@official@Getting Started with MongoDB - MongoDB Docs](https://www.mongodb.com/docs/manual/tutorial/getting-started/) +- [@official@MongoDB Basics - MongoDB](https://www.mongodb.com/resources/products/fundamentals/basics) +- [@article@MongoDB Getting Started - W3Schools](https://www.w3schools.com/mongodb/mongodb_get_started.php) diff --git a/src/data/roadmaps/server-side-game-developer/content/ms-sql@QMNUAKAuRI9lyf2_jUPsj.md b/src/data/roadmaps/server-side-game-developer/content/ms-sql@QMNUAKAuRI9lyf2_jUPsj.md index 42217f53df95..0ea14e78133c 100644 --- a/src/data/roadmaps/server-side-game-developer/content/ms-sql@QMNUAKAuRI9lyf2_jUPsj.md +++ b/src/data/roadmaps/server-side-game-developer/content/ms-sql@QMNUAKAuRI9lyf2_jUPsj.md @@ -1,3 +1,9 @@ # MS SQL Server -Microsoft SQL Server (MSSQL) is a relational database management system (RDBMS) developed by Microsoft. MSSQL provides an environment used to generate databases that can be accessed from workstations, the internet, or other media such as a personal digital assistant (PDA). Basically, MSSQL is a server-based SQL repository that provides back-end storage for applications. It supports a wide variety of transaction processing, business intelligence and analytics applications in corporate IT environments. MSSQL has various editions with different features to fulfill users' requirements, ranging from a free edition, Express, to the comprehensive Enterprise edition. \ No newline at end of file +Microsoft SQL Server (MSSQL) is a relational database management system (RDBMS) developed by Microsoft. MSSQL provides an environment used to generate databases that can be accessed from workstations, the internet, or other media such as a personal digital assistant (PDA). Basically, MSSQL is a server-based SQL repository that provides back-end storage for applications. It supports a wide variety of transaction processing, business intelligence and analytics applications in corporate IT environments. MSSQL has various editions with different features to fulfill users' requirements, ranging from a free edition, Express, to the comprehensive Enterprise edition. + +Learn more from the following resources: + +- [@official@SQL Server Technical Documentation - Microsoft Learn](https://learn.microsoft.com/en-us/sql/sql-server/?view=sql-server-ver17) +- [@article@SQL Server Tutorial - sqlservertutorial.net](https://www.sqlservertutorial.net/) +- [@official@Get Started with SQL Server 2025 - Microsoft Learn](https://learn.microsoft.com/en-us/training/modules/introduction-to-sql-server/) diff --git a/src/data/roadmaps/server-side-game-developer/content/multithreading@3QSLUMKD0G08N3MIb1cG7.md b/src/data/roadmaps/server-side-game-developer/content/multithreading@3QSLUMKD0G08N3MIb1cG7.md index 4edd3af77af2..7c905024a1f7 100644 --- a/src/data/roadmaps/server-side-game-developer/content/multithreading@3QSLUMKD0G08N3MIb1cG7.md +++ b/src/data/roadmaps/server-side-game-developer/content/multithreading@3QSLUMKD0G08N3MIb1cG7.md @@ -1,3 +1,8 @@ # Multithreading -Multithreading, a specialized form of multitasking, is the ability of a central processing unit (CPU) to manage multiple executions of instructions concurrently. This essentially means that multiple threads or mini-processes are executing independently yet sharing the resources of a single CPU. In programming, threads are a way to improve the application responsiveness and perform multiple operations simultaneously without requiring multiple CPUs or computers. Threads within a process share the same data space with the main thread and can, therefore, communicate more quickly with each other than if they were separate processes. Developers often use multithreading in server-side game development to manage complex operations with high efficiency. \ No newline at end of file +Multithreading, a specialized form of multitasking, is the ability of a central processing unit (CPU) to manage multiple executions of instructions concurrently. This essentially means that multiple threads or mini-processes are executing independently yet sharing the resources of a single CPU. In programming, threads are a way to improve the application responsiveness and perform multiple operations simultaneously without requiring multiple CPUs or computers. Threads within a process share the same data space with the main thread and can, therefore, communicate more quickly with each other than if they were separate processes. Developers often use multithreading in server-side game development to manage complex operations with high efficiency. +Learn more from the following resources: + +- [@article@Concurrency - Oracle Java Tutorials](https://docs.oracle.com/javase/tutorial/essential/concurrency/index.html) +- [@article@Modern Multithreading and Concurrency in C++ - Educative](https://www.educative.io/blog/modern-multithreading-and-concurrency-in-cpp) +- [@article@Multithreaded design for a game server - Stack Exchange](https://gamedev.stackexchange.com/questions/181838/multithreaded-design-for-a-game-server) diff --git a/src/data/roadmaps/server-side-game-developer/content/multithreading@_jd91rrAXGbJI9RhXlSx8.md b/src/data/roadmaps/server-side-game-developer/content/multithreading@_jd91rrAXGbJI9RhXlSx8.md index bfd2145fa48d..e52bb670619e 100644 --- a/src/data/roadmaps/server-side-game-developer/content/multithreading@_jd91rrAXGbJI9RhXlSx8.md +++ b/src/data/roadmaps/server-side-game-developer/content/multithreading@_jd91rrAXGbJI9RhXlSx8.md @@ -1,3 +1,8 @@ # Multithreading -`Multithreading 2` in game development usually refers to an advanced level of understanding, managing, and implementing multithreaded programming. At this stage, developers are expected to manage inter-thread communications and synchronization effectively. This includes mastering the use of mutexes, locks, semaphores, and condition variables. This level extends to the fine-tuning of performance and resolving complex issues such as race conditions, deadlocks, and starvation. Furthermore, it could cover advanced topics like thread-pools and executing modern multithreaded game architectures efficiently and safely. In multithreading 2, developers learn to leverage more concurrent computing power, thus making the server more performant and responsive. \ No newline at end of file +`Multithreading 2` in game development usually refers to an advanced level of understanding, managing, and implementing multithreaded programming. At this stage, developers are expected to manage inter-thread communications and synchronization effectively. This includes mastering the use of mutexes, locks, semaphores, and condition variables. This level extends to the fine-tuning of performance and resolving complex issues such as race conditions, deadlocks, and starvation. Furthermore, it could cover advanced topics like thread-pools and executing modern multithreaded game architectures efficiently and safely. In multithreading 2, developers learn to leverage more concurrent computing power, thus making the server more performant and responsive. +Learn more from the following resources: + +- [@article@Multithreading Problems In Game Design - Erik McClure](https://erikmcclure.com/blog/multithreading-problems-in-game-design/) +- [@article@Multi Threading in Game Development - Reddit](https://www.reddit.com/r/gamedev/comments/44fux4/multi_threading_in_game_development/) +- [@article@Multi-Threaded Game Server Design - Spirited Snowcat](https://spirited.io/multi-threaded-game-server-design/) diff --git a/src/data/roadmaps/server-side-game-developer/content/mutex@G_BEJKkJ1_Nc43aosy_iS.md b/src/data/roadmaps/server-side-game-developer/content/mutex@G_BEJKkJ1_Nc43aosy_iS.md index 03abb2617198..64d6f3ab62cd 100644 --- a/src/data/roadmaps/server-side-game-developer/content/mutex@G_BEJKkJ1_Nc43aosy_iS.md +++ b/src/data/roadmaps/server-side-game-developer/content/mutex@G_BEJKkJ1_Nc43aosy_iS.md @@ -1,3 +1,8 @@ # Mutex -`Mutex`, short for mutual exclusion, is a synchronization method used by developers to prevent multiple threads from concurrently accessing some shared resource or part of code. It is a locking mechanism that enforces limits to ensure that only one thread can perform certain operations at a time. If a `mutex` is locked by one thread, the other threads trying to lock it will be blocked until the owner thread unlocks it. This tool is essential especially in multi-threaded programming environments to avoid conditions like race conditions where the program's behavior may depend on the sequence of scheduling or timings of the threads. \ No newline at end of file +`Mutex`, short for mutual exclusion, is a synchronization method used by developers to prevent multiple threads from concurrently accessing some shared resource or part of code. It is a locking mechanism that enforces limits to ensure that only one thread can perform certain operations at a time. If a `mutex` is locked by one thread, the other threads trying to lock it will be blocked until the owner thread unlocks it. This tool is essential especially in multi-threaded programming environments to avoid conditions like race conditions where the program's behavior may depend on the sequence of scheduling or timings of the threads. +Learn more from the following resources: + +- [@article@Mutex vs Semaphore - GeeksforGeeks](https://www.geeksforgeeks.org/operating-systems/mutex-vs-semaphore/) +- [@article@Synchronization - CS 341](https://cs341.cs.illinois.edu/coursebook/Synchronization) +- [@official@Using mutexes - IBM](https://www.ibm.com/docs/en/aix/7.1.0?topic=programming-using-mutexes) diff --git a/src/data/roadmaps/server-side-game-developer/content/mysql@HsBqd08Ro0VJnx0FlumMQ.md b/src/data/roadmaps/server-side-game-developer/content/mysql@HsBqd08Ro0VJnx0FlumMQ.md index b43044552484..c2de5e3c0fe0 100644 --- a/src/data/roadmaps/server-side-game-developer/content/mysql@HsBqd08Ro0VJnx0FlumMQ.md +++ b/src/data/roadmaps/server-side-game-developer/content/mysql@HsBqd08Ro0VJnx0FlumMQ.md @@ -1,3 +1,9 @@ # MySQL MySQL is an open-source relational database management system (RDBMS) that uses SQL (Structured Query Language) to interact with data. It is developed, marketed, and supported by MySQL AB, a Swedish company, and is written in C and C++. Since it's open-source, you can use MySQL completely free of charge. MySQL is primarily used for online transactions and for consolidating data. You can install it on various platforms like Linux, Windows, macOS and so on. With its comprehensive set of features like support for full-text search, cursors, triggers, stored procedures, it is powerful enough to manage even very large sets of data, making it suitable for a vast range of applications, whether they be web-based or embedded. + +Learn more from the following resources: + +- [@article@MySQL Tutorial - W3Schools](https://www.w3schools.com/mysql/) +- [@article@MySQL Tutorial - GeeksforGeeks](https://www.geeksforgeeks.org/mysql/mysql-tutorial/) +- [@article@Getting Started with MySQL - MySQL Docs](https://dev.mysql.com/doc/mysql-getting-started/en/) diff --git a/src/data/roadmaps/server-side-game-developer/content/oorp@yWj70LpF4LKB8J6GbYvsq.md b/src/data/roadmaps/server-side-game-developer/content/oorp@yWj70LpF4LKB8J6GbYvsq.md index 28cbf423685f..9c8499d89071 100644 --- a/src/data/roadmaps/server-side-game-developer/content/oorp@yWj70LpF4LKB8J6GbYvsq.md +++ b/src/data/roadmaps/server-side-game-developer/content/oorp@yWj70LpF4LKB8J6GbYvsq.md @@ -1,3 +1,8 @@ # OORP -**Object-Oriented Reactive Programming (OORP)** is a programming paradigm that combines object-oriented programming (OOP) and reactive programming. In OORP, developers design the system in terms of objects that communicate with each other through messages. These messages trigger functions or "reactions" in the receiving objects, hence the term "reactive". Each object in OORP encapsulates state and behavior, follows inheritance, and promotes data abstraction, similar to traditional OOP. However, OORP operates in a more event-driven manner, responding to external events, changes, or transactions that occur over time or in response to other objects. \ No newline at end of file +**Object-Oriented Reactive Programming (OORP)** is a programming paradigm that combines object-oriented programming (OOP) and reactive programming. In OORP, developers design the system in terms of objects that communicate with each other through messages. These messages trigger functions or "reactions" in the receiving objects, hence the term "reactive". Each object in OORP encapsulates state and behavior, follows inheritance, and promotes data abstraction, similar to traditional OOP. However, OORP operates in a more event-driven manner, responding to external events, changes, or transactions that occur over time or in response to other objects. +Learn more from the following resources: + +- [@article@Introduction to Reactive Programming - Project Reactor](https://projectreactor.io/docs/core/release/reference/reactiveProgramming.html) +- [@article@Reactive Programming - Wikipedia](https://en.wikipedia.org/wiki/Reactive_programming) +- [@opensource@ReactiveX Overview](https://rxjs.dev/guide/overview) diff --git a/src/data/roadmaps/server-side-game-developer/content/ordered-vs-unordered@WMdCDmFsytsF2AWQXfzC8.md b/src/data/roadmaps/server-side-game-developer/content/ordered-vs-unordered@WMdCDmFsytsF2AWQXfzC8.md index fdeb91792856..9297516f4de7 100644 --- a/src/data/roadmaps/server-side-game-developer/content/ordered-vs-unordered@WMdCDmFsytsF2AWQXfzC8.md +++ b/src/data/roadmaps/server-side-game-developer/content/ordered-vs-unordered@WMdCDmFsytsF2AWQXfzC8.md @@ -1,3 +1,8 @@ # Ordered vs Not Ordered -In the context of TCP vs UDP, "ordered" and "not ordered" refers to the order in which packets are received. In TCP (Transmission Control Protocol), packets are ordered. This means that the packets of data are sent and received in the same order. For example, if packet 1, packet 2, and packet 3 are sent in that order, they will be delivered and read in that exact order whether, packet 2 takes longer to send or not. On the other hand, UDP (User Datagram Protocol) is not ordered. The packets of data are independent of each other. So, if packet 1, packet 2, and packet 3 are sent in that order, they could be received in a different order such as packet 2, packet 1, then packet 3. This happens because UDP doesn't re-order packets as TCP does. \ No newline at end of file +In the context of TCP vs UDP, "ordered" and "not ordered" refers to the order in which packets are received. In TCP (Transmission Control Protocol), packets are ordered. This means that the packets of data are sent and received in the same order. For example, if packet 1, packet 2, and packet 3 are sent in that order, they will be delivered and read in that exact order whether, packet 2 takes longer to send or not. On the other hand, UDP (User Datagram Protocol) is not ordered. The packets of data are independent of each other. So, if packet 1, packet 2, and packet 3 are sent in that order, they could be received in a different order such as packet 2, packet 1, then packet 3. This happens because UDP doesn't re-order packets as TCP does. +Learn more from the following resources: + +- [@article@UDP vs. TCP - Gaffer on Games](http://vodacek.zvb.cz/archiv/685.html) +- [@article@TCP vs UDP: Key Differences Explained - Digital Samba](https://www.digitalsamba.com/blog/tcp-and-udp-protocols) +- [@article@TCP vs UDP - Understanding the differences and use cases - Ostinato](https://ostinato.org/guides/tcp-vs-udp-understanding-differences-and-use-cases) diff --git a/src/data/roadmaps/server-side-game-developer/content/orm@OyxWMFy8s7Lxko_K89fjo.md b/src/data/roadmaps/server-side-game-developer/content/orm@OyxWMFy8s7Lxko_K89fjo.md index bc4e42f26e72..9c75db07a32c 100644 --- a/src/data/roadmaps/server-side-game-developer/content/orm@OyxWMFy8s7Lxko_K89fjo.md +++ b/src/data/roadmaps/server-side-game-developer/content/orm@OyxWMFy8s7Lxko_K89fjo.md @@ -1,3 +1,8 @@ # ORM -ORM stands for Object-Relational Mapping. In server-side game development, ORM is a technique that lets you interact with your database, like you would with SQL. In other words, on the server side, you create classes in your programming language (e.g., Python, JavaScript, etc.) that map to the tables in the database. Each instance of a class represents a row in the respective table. ORM libraries and tools provide methods to perform CRUD (Create, Retrieve, Update, Delete) operations without having to write raw SQL statements. Popular examples of ORM tools include Sequelize for JavaScript, SQLAlchemy for Python, and Hibernate for Java. \ No newline at end of file +ORM stands for Object-Relational Mapping. In server-side game development, ORM is a technique that lets you interact with your database, like you would with SQL. In other words, on the server side, you create classes in your programming language (e.g., Python, JavaScript, etc.) that map to the tables in the database. Each instance of a class represents a row in the respective table. ORM libraries and tools provide methods to perform CRUD (Create, Retrieve, Update, Delete) operations without having to write raw SQL statements. Popular examples of ORM tools include Sequelize for JavaScript, SQLAlchemy for Python, and Hibernate for Java. +Learn more from the following resources: + +- [@article@Object-Relational Mapping (ORM) Explained - AltexSoft](https://www.altexsoft.com/blog/orm-object-relational-mapping/) +- [@article@Object-relational Mappers (ORMs) - Full Stack Python](https://www.fullstackpython.com/object-relational-mappers-orms.html) +- [@article@Object-relational Mapping - Wikipedia](https://en.wikipedia.org/wiki/Object%E2%80%93relational_mapping) diff --git a/src/data/roadmaps/server-side-game-developer/content/out-of-band-data@3OMu3RM-6pMjqY1jAmC2-.md b/src/data/roadmaps/server-side-game-developer/content/out-of-band-data@3OMu3RM-6pMjqY1jAmC2-.md index 7976c64eb8a0..f49a340a3187 100644 --- a/src/data/roadmaps/server-side-game-developer/content/out-of-band-data@3OMu3RM-6pMjqY1jAmC2-.md +++ b/src/data/roadmaps/server-side-game-developer/content/out-of-band-data@3OMu3RM-6pMjqY1jAmC2-.md @@ -1,3 +1,8 @@ # Out-of-Band Data -"Out of band" data, in the context of server-side game development, refers to data that is transmitted separately from the main data stream. This data is used for managing control information rather than actual game data, for instance, data regarding the status of the server, notifications about issues, or urgent commands. Given its importance, it's often designed to bypass any queueing or buffering systems to be delivered straight to the application, hence its name — it is "out of band" compared to the normal data transmissions in the game. Please note, out of band data needs proper handling to prevent potential vulnerabilities including security issues. \ No newline at end of file +"Out of band" data, in the context of server-side game development, refers to data that is transmitted separately from the main data stream. This data is used for managing control information rather than actual game data, for instance, data regarding the status of the server, notifications about issues, or urgent commands. Given its importance, it's often designed to bypass any queueing or buffering systems to be delivered straight to the application, hence its name — it is "out of band" compared to the normal data transmissions in the game. Please note, out of band data needs proper handling to prevent potential vulnerabilities including security issues. +Learn more from the following resources: + +- [@article@Out-of-band Data - Wikipedia](https://en.wikipedia.org/wiki/Out-of-band_data) +- [@article@Out-of-Band Data - Oracle Programming Interfaces Guide](https://docs.oracle.com/cd/E19683-01/816-5042/sockets-36/index.html) +- [@article@Out of Band Data Overview - Beej's Guide](https://beej.us/298C/oob_overview.html) diff --git a/src/data/roadmaps/server-side-game-developer/content/packet-structure@CCxVnrGDKa1EROXgF_OAm.md b/src/data/roadmaps/server-side-game-developer/content/packet-structure@CCxVnrGDKa1EROXgF_OAm.md index 4a9443685383..3315bcaf950a 100644 --- a/src/data/roadmaps/server-side-game-developer/content/packet-structure@CCxVnrGDKa1EROXgF_OAm.md +++ b/src/data/roadmaps/server-side-game-developer/content/packet-structure@CCxVnrGDKa1EROXgF_OAm.md @@ -1,3 +1,8 @@ # Packet Structure -UDP or User Datagram Protocol is designed to send messages known as datagrams over the network. The packet structure of UDP is relatively simple compared to other protocol types. Each UDP header consists of 4 fields, each of 2 bytes. These 4 fields are namely: Source Port, Destination Port, Length, and Checksum. The `Source Port` is for tracking responses and `Destination Port` is for delivering the datagram on the receiving end. The `Length` specifies the entire datagram size including the header and data while the `Checksum` is used to verify the integrity of the data and header. \ No newline at end of file +UDP or User Datagram Protocol is designed to send messages known as datagrams over the network. The packet structure of UDP is relatively simple compared to other protocol types. Each UDP header consists of 4 fields, each of 2 bytes. These 4 fields are namely: Source Port, Destination Port, Length, and Checksum. The `Source Port` is for tracking responses and `Destination Port` is for delivering the datagram on the receiving end. The `Length` specifies the entire datagram size including the header and data while the `Checksum` is used to verify the integrity of the data and header. +Learn more from the following resources: + +- [@article@User Datagram Protocol (UDP) - Imperva](https://www.imperva.com/learn/ddos/udp-user-datagram-protocol/) +- [@official@UDP Packet Format - Huawei Support](https://support.huawei.com/enterprise/en/doc/EDOC1100174721/23023485/udp-packet-format) +- [@article@User Datagram Protocol - RFC 768](https://datatracker.ietf.org/doc/html/rfc768) diff --git a/src/data/roadmaps/server-side-game-developer/content/packet-vs-datagram@JE3uZ5U6oe6dVzsmglTl2.md b/src/data/roadmaps/server-side-game-developer/content/packet-vs-datagram@JE3uZ5U6oe6dVzsmglTl2.md index a50b09d7a1fd..be65b9887aeb 100644 --- a/src/data/roadmaps/server-side-game-developer/content/packet-vs-datagram@JE3uZ5U6oe6dVzsmglTl2.md +++ b/src/data/roadmaps/server-side-game-developer/content/packet-vs-datagram@JE3uZ5U6oe6dVzsmglTl2.md @@ -6,4 +6,9 @@ A **Packet** is the most general term that just refers to the encapsulated data On the other hand, a **Datagram** is a specific type of data packet. It is an independent, self-contained message sent over the network whose arrival, arrival time, and content are not guaranteed. This term is particularly associated with the UDP (User Datagram Protocol), where each transmission unit is called a datagram. -The difference between packets and datagrams depends largely on the protocol being used to transmit the data. TCP (Transmission Control Protocol) data is typically referred to as a packet, whereas with UDP it is a datagram. \ No newline at end of file +The difference between packets and datagrams depends largely on the protocol being used to transmit the data. TCP (Transmission Control Protocol) data is typically referred to as a packet, whereas with UDP it is a datagram. +Learn more from the following resources: + +- [@article@Datagram - Wikipedia](https://en.wikipedia.org/wiki/Datagram) +- [@article@What are the differences between datagrams, frames, and network packets? - Network Engineering Stack Exchange](https://networkengineering.stackexchange.com/questions/50083/what-are-the-differences-in-the-contents-of-datagrams-frames-and-network-packe) +- [@article@TCP/IP packets and datagrams - Stack Overflow](https://stackoverflow.com/questions/14026858/tcp-ip-packets-and-datagrams) diff --git a/src/data/roadmaps/server-side-game-developer/content/postgresql@dAiEwN7phwMyaitvM5kRl.md b/src/data/roadmaps/server-side-game-developer/content/postgresql@dAiEwN7phwMyaitvM5kRl.md index a881abb45bf0..35a8d11961ab 100644 --- a/src/data/roadmaps/server-side-game-developer/content/postgresql@dAiEwN7phwMyaitvM5kRl.md +++ b/src/data/roadmaps/server-side-game-developer/content/postgresql@dAiEwN7phwMyaitvM5kRl.md @@ -1,3 +1,8 @@ # PostgreSQL -**PostgreSQL** is a powerful, open-source object-relational database system. It extends the SQL language combined with many features that safely store and scale the most complicated data workloads. The origins of PostgreSQL date back to 1986 as part of the POSTGRES project at the University of California at Berkeley. It has earned a strong reputation for its proven architecture, reliability, data integrity, robust feature set, extensibility, and the dedication of the open-source community behind the software to consistently deliver performant and innovative solutions. PostgreSQL runs on all major operating systems and has been ACID-compliant since 2001. It has powerful add-ons like the popular PostGIS geospatial database extender. It can handle ranges, array types and has extensive capabilities for developing at scale. \ No newline at end of file +**PostgreSQL** is a powerful, open-source object-relational database system. It extends the SQL language combined with many features that safely store and scale the most complicated data workloads. The origins of PostgreSQL date back to 1986 as part of the POSTGRES project at the University of California at Berkeley. It has earned a strong reputation for its proven architecture, reliability, data integrity, robust feature set, extensibility, and the dedication of the open-source community behind the software to consistently deliver performant and innovative solutions. PostgreSQL runs on all major operating systems and has been ACID-compliant since 2001. It has powerful add-ons like the popular PostGIS geospatial database extender. It can handle ranges, array types and has extensive capabilities for developing at scale. +Learn more from the following resources: + +- [@official@PostgreSQL Tutorial - PostgreSQL Documentation](https://www.postgresql.org/docs/current/tutorial.html) +- [@article@PostgreSQL Tutorial - Neon](https://neon.com/postgresql/tutorial) +- [@article@PostgreSQL Tutorial: Fundamentals and Resources - Devart](https://www.devart.com/blog/postgresql-tutorial.html) diff --git a/src/data/roadmaps/server-side-game-developer/content/proactor@Tvxe2NemcH21y-eB4bosv.md b/src/data/roadmaps/server-side-game-developer/content/proactor@Tvxe2NemcH21y-eB4bosv.md index c050c885d61e..a19dc9ed188a 100644 --- a/src/data/roadmaps/server-side-game-developer/content/proactor@Tvxe2NemcH21y-eB4bosv.md +++ b/src/data/roadmaps/server-side-game-developer/content/proactor@Tvxe2NemcH21y-eB4bosv.md @@ -1,3 +1,9 @@ # Proactor The **Proactor** pattern is an event-driven application design pattern used in asynchronous programming, and is a variant of the Reactor Pattern, but with an important distinction in terms of control flow handling. Instead of the application explicitly triggering and managing operations, this responsibility is delegated to the asynchronous operation processor, also known as the proactor. The proactor initiates an asynchronous operation, and once the operation is complete, it determines the appropriate service to dispatch the completion event to. In other words, proactors are responsible for initiating asynchronous operations, while completion handlers are responsible for dictating what happens next, after the operations complete. + +Learn more from the following resources: + +- [@article@Proactor pattern - Wikipedia](https://en.wikipedia.org/wiki/Proactor_pattern) +- [@article@The Proactor Design Pattern: Concurrency Without Threads - Boost.Asio](https://www.boost.org/doc/libs/latest/doc/html/boost_asio/overview/core/async.html) +- [@article@If the Proactor Design Pattern is superior for asynchronous I/O - Stack Overflow](https://stackoverflow.com/questions/54798087/if-the-proactor-design-pattern-is-superior-for-asyncronous-i-o-why-isnt-it-def) diff --git a/src/data/roadmaps/server-side-game-developer/content/programming-languages@6ilqzjvI4J1pUCmTJ33PA.md b/src/data/roadmaps/server-side-game-developer/content/programming-languages@6ilqzjvI4J1pUCmTJ33PA.md index 2b2dab86b07e..6e82dc7fe9d7 100644 --- a/src/data/roadmaps/server-side-game-developer/content/programming-languages@6ilqzjvI4J1pUCmTJ33PA.md +++ b/src/data/roadmaps/server-side-game-developer/content/programming-languages@6ilqzjvI4J1pUCmTJ33PA.md @@ -1,3 +1,8 @@ # Programming Languages -Programming languages are an essential part of game development. They create the logic and rules for how your game operates. There are various types of programming languages that a server side game developer can use, such as C++, Python, Ruby, etc. These languages have different syntax and structures, as well as varying degrees of complexity. The complexity and capabilities can affect the game's performance, security, and even its potential compatibility with other platforms. Your choice of language often depends greatly on the specific needs of the project and your personal expertise. Picking up a new language can be time-consuming, so it's important to choose wisely. Markdown is another language that's popular for documentation due to its simplicity and readability, but it isn't typically used to code server-side game elements. \ No newline at end of file +Programming languages are an essential part of game development. They create the logic and rules for how your game operates. There are various types of programming languages that a server side game developer can use, such as C++, Python, Ruby, etc. These languages have different syntax and structures, as well as varying degrees of complexity. The complexity and capabilities can affect the game's performance, security, and even its potential compatibility with other platforms. Your choice of language often depends greatly on the specific needs of the project and your personal expertise. Picking up a new language can be time-consuming, so it's important to choose wisely. Markdown is another language that's popular for documentation due to its simplicity and readability, but it isn't typically used to code server-side game elements. +Learn more from the following resources: + +- [@article@Choosing the Right Programming Language for Game Server Development - Getgud](https://www.getgud.io/blog/choosing-the-right-programming-language-for-game-server-development/) +- [@article@7 Best Programming Languages for Game Development - Pixelfield](https://pixelfield.co.uk/blog/best-programming-language-for-game-development/) +- [@discussion@What programming language does server development typically use? - Reddit](https://www.reddit.com/r/gamedev/comments/efxsm2/what_programming_language_does_server_development/) diff --git a/src/data/roadmaps/server-side-game-developer/content/programming-techniques@tGQu18PWDatW7HvkTP-uh.md b/src/data/roadmaps/server-side-game-developer/content/programming-techniques@tGQu18PWDatW7HvkTP-uh.md index 49b188f65854..5dd843939558 100644 --- a/src/data/roadmaps/server-side-game-developer/content/programming-techniques@tGQu18PWDatW7HvkTP-uh.md +++ b/src/data/roadmaps/server-side-game-developer/content/programming-techniques@tGQu18PWDatW7HvkTP-uh.md @@ -1,3 +1,8 @@ # Programming Techniques -Programming techniques are methods that are used to write series of instructions (code) that a computer can interpret and execute. There are many ways one can write code, unique to both the individual and the programming language they are using. Techniques such as Object-Oriented Programming (OOP) involve the use of encapsulated objects and inheritance. Functional Programming focuses on mathematical functions, avoiding changes in state and mutable data. Procedural Programming focuses on the process of executing predefined steps of functions to achieve the end result, while Event-Driven programming primarily acts upon user interactions, like mouse clicks or key presses. You can choose one technique depending on the game development requirements, the development team's competence, and preference. \ No newline at end of file +Programming techniques are methods that are used to write series of instructions (code) that a computer can interpret and execute. There are many ways one can write code, unique to both the individual and the programming language they are using. Techniques such as Object-Oriented Programming (OOP) involve the use of encapsulated objects and inheritance. Functional Programming focuses on mathematical functions, avoiding changes in state and mutable data. Procedural Programming focuses on the process of executing predefined steps of functions to achieve the end result, while Event-Driven programming primarily acts upon user interactions, like mouse clicks or key presses. You can choose one technique depending on the game development requirements, the development team's competence, and preference. +Learn more from the following resources: + +- [@article@Architecture, Performance, and Games - Game Programming Patterns](https://gameprogrammingpatterns.com/architecture-performance-and-games.html) +- [@article@Fast-Paced Multiplayer: Client-Server Game Architecture - Gabriel Gambetta](https://www.gabrielgambetta.com/client-server-game-architecture.html) +- [@article@Server Architecture: A Noobs Guide - Game Developer](https://www.gamedeveloper.com/programming/server-architecture-a-noobs-guide) diff --git a/src/data/roadmaps/server-side-game-developer/content/protobuf@w2zbab_6Gxw6AWS0N759U.md b/src/data/roadmaps/server-side-game-developer/content/protobuf@w2zbab_6Gxw6AWS0N759U.md index 9eb35bb50de4..1755a77a55f8 100644 --- a/src/data/roadmaps/server-side-game-developer/content/protobuf@w2zbab_6Gxw6AWS0N759U.md +++ b/src/data/roadmaps/server-side-game-developer/content/protobuf@w2zbab_6Gxw6AWS0N759U.md @@ -1,3 +1,8 @@ # Protobuf -`Protobuf`, or Protocol Buffers, is a method developed by Google for serializing structured data. It's both language-neutral and platform-neutral. Google designed it to be smaller and faster than XML. You design your data structures in `.proto` files, then use the Protobuf compiler `protoc` to generate data access classes in your chosen language. Google provides support for several languages including: Java, C++, Python, Objective-C, and C#. Community developed support for even more languages is also available. This gives `protobuf` a great deal of versatility, making it a popular choice for data storage and communication between services. \ No newline at end of file +`Protobuf`, or Protocol Buffers, is a method developed by Google for serializing structured data. It's both language-neutral and platform-neutral. Google designed it to be smaller and faster than XML. You design your data structures in `.proto` files, then use the Protobuf compiler `protoc` to generate data access classes in your chosen language. Google provides support for several languages including: Java, C++, Python, Objective-C, and C#. Community developed support for even more languages is also available. This gives `protobuf` a great deal of versatility, making it a popular choice for data storage and communication between services. +Learn more from the following resources: + +- [@official@Tutorials | Protocol Buffers Documentation](https://protobuf.dev/getting-started/) +- [@official@Language Guide (proto 3) - Protocol Buffers Documentation](https://protobuf.dev/programming-guides/proto3/) +- [@article@Protocol Buffers - Wikipedia](https://en.wikipedia.org/wiki/Protocol_Buffers) diff --git a/src/data/roadmaps/server-side-game-developer/content/pthread@HU0yUyl89WD8WnR9PJn7l.md b/src/data/roadmaps/server-side-game-developer/content/pthread@HU0yUyl89WD8WnR9PJn7l.md index 4471d07bdd5d..ab11dcadb6a9 100644 --- a/src/data/roadmaps/server-side-game-developer/content/pthread@HU0yUyl89WD8WnR9PJn7l.md +++ b/src/data/roadmaps/server-side-game-developer/content/pthread@HU0yUyl89WD8WnR9PJn7l.md @@ -1,3 +1,8 @@ # pthread -`Pthread` or POSIX threads is a standard-based thread programming library for multi-threading development. It provides several functions and methods to efficiently manage multiple threads in a program enhancing concurrency and parallelism. The library enables thread creation, thread joining and cancellation, thread-specific data, and synchronization including mutex locks, read/write locks, and condition variables. Notably, Pthread is an API for C/C++ programming language providing cross-platform support for Linux, Unix, and Windows systems. It's a fundamental tool for server-side game developers to create highly responsive and concurrent applications. \ No newline at end of file +`Pthread` or POSIX threads is a standard-based thread programming library for multi-threading development. It provides several functions and methods to efficiently manage multiple threads in a program enhancing concurrency and parallelism. The library enables thread creation, thread joining and cancellation, thread-specific data, and synchronization including mutex locks, read/write locks, and condition variables. Notably, Pthread is an API for C/C++ programming language providing cross-platform support for Linux, Unix, and Windows systems. It's a fundamental tool for server-side game developers to create highly responsive and concurrent applications. +Learn more from the following resources: + +- [@article@POSIX Threads Programming - LLNL HPC Tutorials](https://hpc-tutorials.llnl.gov/posix/) +- [@article@POSIX thread (pthread) libraries - CMU](https://www.cs.cmu.edu/afs/cs/academic/class/15492-f07/www/pthreads.html) +- [@article@Multi-Threaded Programming with Pthreads - Bogotobogo](https://www.bogotobogo.com/cplusplus/multithreading_pthread.php) diff --git a/src/data/roadmaps/server-side-game-developer/content/pytorch@LTSIfq10qDJMTCnIIyqvb.md b/src/data/roadmaps/server-side-game-developer/content/pytorch@LTSIfq10qDJMTCnIIyqvb.md index e3f4b06efb6a..eb023517d63f 100644 --- a/src/data/roadmaps/server-side-game-developer/content/pytorch@LTSIfq10qDJMTCnIIyqvb.md +++ b/src/data/roadmaps/server-side-game-developer/content/pytorch@LTSIfq10qDJMTCnIIyqvb.md @@ -1,3 +1,8 @@ # Pytorch -**PyTorch** is an open-source machine learning library developed by Facebook Artificial Intelligence Research team for Python-based computation. This powerful tool emphasizes flexibility and allows users to manipulate Tensor computations with the convenience of deep neural networks built on a tape-based autodifferentiation system. It provides a great platform for implementing deep learning models and is very popular for understanding and expressing dynamic neural networks. PyTorch supports dynamic computational graphs, which means the graph structure can be modified during runtime. This is particularly useful while working with recurrent neural networks. It integrates seamlessly with the python data science stack to leverage the power of libraries such as NumPy. \ No newline at end of file +**PyTorch** is an open-source machine learning library developed by Facebook Artificial Intelligence Research team for Python-based computation. This powerful tool emphasizes flexibility and allows users to manipulate Tensor computations with the convenience of deep neural networks built on a tape-based autodifferentiation system. It provides a great platform for implementing deep learning models and is very popular for understanding and expressing dynamic neural networks. PyTorch supports dynamic computational graphs, which means the graph structure can be modified during runtime. This is particularly useful while working with recurrent neural networks. It integrates seamlessly with the python data science stack to leverage the power of libraries such as NumPy. +Learn more from the following resources: + +- [@official@Learn the Basics — PyTorch Tutorials](https://docs.pytorch.org/tutorials/beginner/basics/intro.html) +- [@article@Zero to Mastery Learn PyTorch for Deep Learning](https://www.learnpytorch.io/) +- [@article@Introduction to PyTorch — UvA DL Notebooks](https://uvadlc-notebooks.readthedocs.io/en/latest/tutorial_notebooks/tutorial2/Introduction_to_PyTorch.html) diff --git a/src/data/roadmaps/server-side-game-developer/content/rabbitmq@UESjGrFyUbNf4pQamaBoy.md b/src/data/roadmaps/server-side-game-developer/content/rabbitmq@UESjGrFyUbNf4pQamaBoy.md index 9b9aa5767ce5..aba798e000ff 100644 --- a/src/data/roadmaps/server-side-game-developer/content/rabbitmq@UESjGrFyUbNf4pQamaBoy.md +++ b/src/data/roadmaps/server-side-game-developer/content/rabbitmq@UESjGrFyUbNf4pQamaBoy.md @@ -1,3 +1,9 @@ # RabbitMQ RabbitMQ is an open-source message broker software that implements the Advanced Message Queuing Protocol (AMQP). It's designed to offer a common platform for passing messages between different parts of a system or between separate systems. RabbitMQ allows these parts to speak and understand each other even if they’re written in different programming languages or implemented on different platforms. RabbitMQ is not just limited to AMQP protocol but supports a variety of different messaging protocols including MQTT, STOMP, and more. Also, RabbitMQ is language agnostic, meaning it can be used with almost any programming language. In addition, it comes with a web user interface for managing and monitoring your RabbitMQ server. It's widely used in production systems around the world and can support large scale distributed systems as it supports clustering and fail-over. + +Learn more from the following resources: + +- [@official@RabbitMQ Tutorial: Hello World - RabbitMQ](https://www.rabbitmq.com/tutorials/tutorial-one-python) +- [@article@RabbitMQ for Beginners: What is RabbitMQ? - CloudAMQP](https://www.cloudamqp.com/blog/part1-rabbitmq-for-beginners-what-is-rabbitmq.html) +- [@article@Getting started with RabbitMQ - Lumigo](https://lumigo.io/blog/getting-started-with-rabbitmq/) diff --git a/src/data/roadmaps/server-side-game-developer/content/reactive-approach@LVwGXmZhMewGQy61qwNyu.md b/src/data/roadmaps/server-side-game-developer/content/reactive-approach@LVwGXmZhMewGQy61qwNyu.md index dc437bca9060..ff981e56f693 100644 --- a/src/data/roadmaps/server-side-game-developer/content/reactive-approach@LVwGXmZhMewGQy61qwNyu.md +++ b/src/data/roadmaps/server-side-game-developer/content/reactive-approach@LVwGXmZhMewGQy61qwNyu.md @@ -1,3 +1,8 @@ # Reactive Approach -In the realm of server-side game development, the reactive approach is an important element when dealing with multithreading. This approach is based on the concept of reacting to changes or events happening in the system rather than calling methods or running operations continuously. It incorporates observables, which are objects that represent a stream of data or a series of events, and observers, which are methods that respond to the events or changes in these observables. Reactive programming is based on the observer pattern and is designed to handle asynchronous data calls and events efficiently. This pattern is particularly relevant in situations with a large amount of data, high level of complexity, or stringent real-time requirements. With this approach, it is also simpler to handle concurrency and to write programs that are efficient, clean, and less prone to errors and callback pyramids. \ No newline at end of file +In the realm of server-side game development, the reactive approach is an important element when dealing with multithreading. This approach is based on the concept of reacting to changes or events happening in the system rather than calling methods or running operations continuously. It incorporates observables, which are objects that represent a stream of data or a series of events, and observers, which are methods that respond to the events or changes in these observables. Reactive programming is based on the observer pattern and is designed to handle asynchronous data calls and events efficiently. This pattern is particularly relevant in situations with a large amount of data, high level of complexity, or stringent real-time requirements. With this approach, it is also simpler to handle concurrency and to write programs that are efficient, clean, and less prone to errors and callback pyramids. +Learn more from the following resources: + +- [@article@Intro to ReactiveX](https://reactivex.io/intro.html) +- [@article@The Reactive Manifesto](https://www.reactivemanifesto.org/) +- [@article@Event-driven Architecture and Reactive Programming - Retool](https://retool.com/blog/event-driven-architecture-and-reactive-programming) diff --git a/src/data/roadmaps/server-side-game-developer/content/reactive-approach@Vl-WW0LThrQTOO_tFl51B.md b/src/data/roadmaps/server-side-game-developer/content/reactive-approach@Vl-WW0LThrQTOO_tFl51B.md index 19e971698e37..154c367c8d45 100644 --- a/src/data/roadmaps/server-side-game-developer/content/reactive-approach@Vl-WW0LThrQTOO_tFl51B.md +++ b/src/data/roadmaps/server-side-game-developer/content/reactive-approach@Vl-WW0LThrQTOO_tFl51B.md @@ -1 +1,6 @@ -# Reactive Approach \ No newline at end of file +# Reactive Approach +Learn more from the following resources: + +- [@article@Reactive Programming in Unity Game Development - InnoGames](https://blog.innogames.com/reactive-programming-unity-introduction/) +- [@article@Building a Reactive RESTful Web Service - Spring](https://spring.io/guides/gs/reactive-rest-service) +- [@article@Reactive Extensions - Wikipedia](https://en.wikipedia.org/wiki/Reactive_extensions) diff --git a/src/data/roadmaps/server-side-game-developer/content/reactive-model@p0P3ZGq_QTCop0vMwe7P3.md b/src/data/roadmaps/server-side-game-developer/content/reactive-model@p0P3ZGq_QTCop0vMwe7P3.md index ab0e37022f4c..ab5dc3f065b9 100644 --- a/src/data/roadmaps/server-side-game-developer/content/reactive-model@p0P3ZGq_QTCop0vMwe7P3.md +++ b/src/data/roadmaps/server-side-game-developer/content/reactive-model@p0P3ZGq_QTCop0vMwe7P3.md @@ -1,3 +1,8 @@ # Reactive Model -The Reactive Model is an approach in server-side game development that positions the server as a responder to requests made by the client. In this model, the server is not running its own threads, but simply reacting to incoming requests from clients. It focuses on asynchronous I/O operations, meaning that the system doesn't stall or wait for data to be written or read. When the client sends a request, the server reacts by performing a specific action, like accepting a network connection or reading data. It is built around the idea of event-driven programming, where logic is coded against events, ideally resulting in highly scalable systems. It's often used in conjunction with non-blocking I/O models, such as Node.js or other event-driven architectures. \ No newline at end of file +The Reactive Model is an approach in server-side game development that positions the server as a responder to requests made by the client. In this model, the server is not running its own threads, but simply reacting to incoming requests from clients. It focuses on asynchronous I/O operations, meaning that the system doesn't stall or wait for data to be written or read. When the client sends a request, the server reacts by performing a specific action, like accepting a network connection or reading data. It is built around the idea of event-driven programming, where logic is coded against events, ideally resulting in highly scalable systems. It's often used in conjunction with non-blocking I/O models, such as Node.js or other event-driven architectures. +Learn more from the following resources: + +- [@article@Introduction to RxJava: Observable Pattern - HackerNoon](https://hackernoon.com/introduction-to-rxjava-observable-pattern-ym493yn4) +- [@article@Characteristics of Reactive Systems - AWS](https://docs.aws.amazon.com/whitepapers/latest/reactive-systems-on-aws/characteristics-of-reactive-systems.html) +- [@article@Comparing Two High-Performance I/O Design Patterns - Artima](https://www.artima.com/articles/comparing-two-high-performance-io-design-patterns) diff --git a/src/data/roadmaps/server-side-game-developer/content/reactor@7mYpgn2gr-5vAYW-UR7_x.md b/src/data/roadmaps/server-side-game-developer/content/reactor@7mYpgn2gr-5vAYW-UR7_x.md index c1270e7443cf..1a7032878306 100644 --- a/src/data/roadmaps/server-side-game-developer/content/reactor@7mYpgn2gr-5vAYW-UR7_x.md +++ b/src/data/roadmaps/server-side-game-developer/content/reactor@7mYpgn2gr-5vAYW-UR7_x.md @@ -1,3 +1,8 @@ # Reactor -The **Reactor** is a design pattern that deals with synchronous I/O multiplexing. It is a part of the server side game development concept where it mainly handles service requests delivered concurrently to an application by one or more clients. The reactor allows multiple requests to be managed efficiently by the resources of a single thread. It uses an event loop and callbacks to control and manage all the different I/O streams. Often, Reactor is combined with the Proactor pattern to achieve concurrency and efficiency in utilizing system resources. \ No newline at end of file +The **Reactor** is a design pattern that deals with synchronous I/O multiplexing. It is a part of the server side game development concept where it mainly handles service requests delivered concurrently to an application by one or more clients. The reactor allows multiple requests to be managed efficiently by the resources of a single thread. It uses an event loop and callbacks to control and manage all the different I/O streams. Often, Reactor is combined with the Proactor pattern to achieve concurrency and efficiency in utilizing system resources. +Learn more from the following resources: + +- [@article@Reactor Pattern - Wikipedia](https://en.wikipedia.org/wiki/Reactor_pattern) +- [@article@What is Reactor Pattern in Node.js? - GeeksforGeeks](https://www.geeksforgeeks.org/node-js/what-is-reactor-pattern-in-node-js/) +- [@article@Reactor Pattern in Java - Java Design Patterns](https://java-design-patterns.com/patterns/reactor/) diff --git a/src/data/roadmaps/server-side-game-developer/content/redis@7YNaELVcoV7DV1Fa06USi.md b/src/data/roadmaps/server-side-game-developer/content/redis@7YNaELVcoV7DV1Fa06USi.md index c3d46a13712c..2f2f7606e39a 100644 --- a/src/data/roadmaps/server-side-game-developer/content/redis@7YNaELVcoV7DV1Fa06USi.md +++ b/src/data/roadmaps/server-side-game-developer/content/redis@7YNaELVcoV7DV1Fa06USi.md @@ -1,3 +1,8 @@ # Redis -`Redis` is an open-source, in-memory data structure store that can be used as a database, a cache, and a message broker. It provides support for various data structures such as strings, hashes, lists, sets, sorted sets with range queries, bitmaps, and more. Redis also allows atomic operations like appending to a string; increasing and decreasing hash, array and sorted sets values; computing set intersection, union and difference; and much more. An interesting feature of Redis is its ability to create transactions and also publish and subscribe to channels. It is a great choice for high-performance software like games because of its versatile nature and efficient performance. \ No newline at end of file +`Redis` is an open-source, in-memory data structure store that can be used as a database, a cache, and a message broker. It provides support for various data structures such as strings, hashes, lists, sets, sorted sets with range queries, bitmaps, and more. Redis also allows atomic operations like appending to a string; increasing and decreasing hash, array and sorted sets values; computing set intersection, union and difference; and much more. An interesting feature of Redis is its ability to create transactions and also publish and subscribe to channels. It is a great choice for high-performance software like games because of its versatile nature and efficient performance. +Learn more from the following resources: + +- [@documentation@Redis as an In-Memory Data Structure Store - Redis](https://redis.io/docs/latest/develop/get-started/data-store/) +- [@article@What is Redis? - IBM](https://www.ibm.com/think/topics/redis) +- [@article@Introduction to Redis - Severalnines](https://severalnines.com/blog/introduction-redis-what-it-what-are-use-cases-etc/) diff --git a/src/data/roadmaps/server-side-game-developer/content/registered-io@94hJX1iGifDzIuaU3zU5j.md b/src/data/roadmaps/server-side-game-developer/content/registered-io@94hJX1iGifDzIuaU3zU5j.md index e20eb6039714..9f7632e37e89 100644 --- a/src/data/roadmaps/server-side-game-developer/content/registered-io@94hJX1iGifDzIuaU3zU5j.md +++ b/src/data/roadmaps/server-side-game-developer/content/registered-io@94hJX1iGifDzIuaU3zU5j.md @@ -12,4 +12,7 @@ and lower latency. Visit the following resources to learn more: -- [@documentation@Microsoft Registered I/O (RIO)](https://learn.microsoft.com/en-us/previous-versions/windows/it-pro/windows-server-2012-r2-and-2012/hh997032(v=ws.11)) \ No newline at end of file +- [@documentation@Microsoft Registered I/O (RIO)](https://learn.microsoft.com/en-us/previous-versions/windows/it-pro/windows-server-2012-r2-and-2012/hh997032(v=ws.11)) +- [@article@RIO then IOCP then just plain old Winsock2](https://wirepair.org/2023/08/19/rio-then-iocp-then-just-plain-old-winsock2/) +- [@article@Windows Overlapped IO vs Registered IO (RIO) vs IOCP - Stack Overflow](https://stackoverflow.com/questions/73878597/what-are-the-differences-between-windows-overlapped-io-registered-io-rio-and) +- [@article@What is io_uring? - Lord of the io_uring](https://unixism.net/loti/what_is_io_uring.html) diff --git a/src/data/roadmaps/server-side-game-developer/content/reliability@2jDV-ovvrkBbTTLk5VbR9.md b/src/data/roadmaps/server-side-game-developer/content/reliability@2jDV-ovvrkBbTTLk5VbR9.md index 0a9f91ee9596..00c3ba3c3fdb 100644 --- a/src/data/roadmaps/server-side-game-developer/content/reliability@2jDV-ovvrkBbTTLk5VbR9.md +++ b/src/data/roadmaps/server-side-game-developer/content/reliability@2jDV-ovvrkBbTTLk5VbR9.md @@ -1,3 +1,8 @@ # Reliability -The **Reliability** in terms of IP (Internet Protocol) generally refers to the dependability and consistency of the network connections. It's essentially about how reliable the data transfer is over the network. IP itself is an unreliable protocol, meaning it doesn't guarantee the delivery of data packets. This is where protocols like TCP (Transmission Control Protocol) come in. TCP adds a layer of reliability to IP by ensuring the delivery of the data packets, ordering them correctly and error-checking. This ensures that game data synchronizes correctly across the server and clients without any loss, providing consistency and a smooth gameplay experience. However, the full guarantees of TCP come with some additional overhead; therefore, some games might prefer to use unreliable protocols when high performance is more critical than absolute reliability. \ No newline at end of file +The **Reliability** in terms of IP (Internet Protocol) generally refers to the dependability and consistency of the network connections. It's essentially about how reliable the data transfer is over the network. IP itself is an unreliable protocol, meaning it doesn't guarantee the delivery of data packets. This is where protocols like TCP (Transmission Control Protocol) come in. TCP adds a layer of reliability to IP by ensuring the delivery of the data packets, ordering them correctly and error-checking. This ensures that game data synchronizes correctly across the server and clients without any loss, providing consistency and a smooth gameplay experience. However, the full guarantees of TCP come with some additional overhead; therefore, some games might prefer to use unreliable protocols when high performance is more critical than absolute reliability. +Learn more from the following resources: + +- [@article@Reliability at the Transport Layer - Williams College](https://www.cs.williams.edu/~tom/courses/336/outlines/lect28_2.html) +- [@article@Reliable Bytes: How TCP Ensures Trustworthy Data Transfer - ITU Online](https://www.ituonline.com/blogs/reliable-bytes-how-tcp-ensures-trustworthy-data-transfer-across-the-internet/) +- [@article@Game Networking - Gaffer On Games](https://gafferongames.com/categories/game-networking/) diff --git a/src/data/roadmaps/server-side-game-developer/content/reliability@Vh81GnOUOZvDOlOyI5PwT.md b/src/data/roadmaps/server-side-game-developer/content/reliability@Vh81GnOUOZvDOlOyI5PwT.md index 508dec9d75b6..7a1a4e8870eb 100644 --- a/src/data/roadmaps/server-side-game-developer/content/reliability@Vh81GnOUOZvDOlOyI5PwT.md +++ b/src/data/roadmaps/server-side-game-developer/content/reliability@Vh81GnOUOZvDOlOyI5PwT.md @@ -1,3 +1,8 @@ # Reliability -Reliability refers to how consistently a data packet can be transferred from one system to another over a network. In terms of the User Datagram Protocol (UDP), it has a lack of reliability built into it. This means UDP does not guarantee that your data will reach its destination, it merely sends the packets without any acknowledgement of receipt. Unlike its counterpart, Transmission Control Protocol (TCP), which implements error-checking mechanisms to ensure data integrity and delivery. In summary, if you require high reliability in your server side game development, protocols other than UDP might need to be considered. \ No newline at end of file +Reliability refers to how consistently a data packet can be transferred from one system to another over a network. In terms of the User Datagram Protocol (UDP), it has a lack of reliability built into it. This means UDP does not guarantee that your data will reach its destination, it merely sends the packets without any acknowledgement of receipt. Unlike its counterpart, Transmission Control Protocol (TCP), which implements error-checking mechanisms to ensure data integrity and delivery. In summary, if you require high reliability in your server side game development, protocols other than UDP might need to be considered. +Learn more from the following resources: + +- [@article@Reliability and Congestion Avoidance over UDP - Gaffer On Games](https://gafferongames.com/post/reliability_ordering_and_congestion_avoidance_over_udp/) +- [@article@Transmission Control Protocol (TCP) - GeeksforGeeks](https://www.geeksforgeeks.org/computer-networks/what-is-transmission-control-protocol-tcp/) +- [@article@UDP Packet Reliability and Re-sending - Stack Overflow](https://gamedev.stackexchange.com/questions/106722/udp-packet-reliability-and-re-sending) diff --git a/src/data/roadmaps/server-side-game-developer/content/reliable-transmission@X2KHWgQZDHSVDsTRMUwSj.md b/src/data/roadmaps/server-side-game-developer/content/reliable-transmission@X2KHWgQZDHSVDsTRMUwSj.md index 64ea3172acd8..6fc584d594ea 100644 --- a/src/data/roadmaps/server-side-game-developer/content/reliable-transmission@X2KHWgQZDHSVDsTRMUwSj.md +++ b/src/data/roadmaps/server-side-game-developer/content/reliable-transmission@X2KHWgQZDHSVDsTRMUwSj.md @@ -12,4 +12,7 @@ preventing desynchronization issues, and ensuring a smooth gaming experience. Visit the following resources to learn more: - [@article@Reliable Transmission](https://book.systemsapproach.org/direct/reliable.html) -- [@article@TCP Reliable Transmission (IETF RFC 793)](https://datatracker.ietf.org/doc/html/rfc793) \ No newline at end of file +- [@article@TCP Reliable Transmission (IETF RFC 793)](https://datatracker.ietf.org/doc/html/rfc793) +- [@article@Automatic Repeat Request (ARQ) - GeeksforGeeks](https://www.geeksforgeeks.org/computer-networks/what-is-arq-automatic-repeat-request/) +- [@article@Difference Between Stop and Wait, GoBackN and Selective Repeat - GeeksforGeeks](https://www.geeksforgeeks.org/difference-between-stop-and-wait-gobackn-and-selective-repeat/) +- [@documentation@RFC 3366 - Advice to Link Designers on Link ARQ - IETF](https://datatracker.ietf.org/doc/html/rfc3366) diff --git a/src/data/roadmaps/server-side-game-developer/content/reliable-vs-unreliable@MoyBGT9bscUe8vMN4J0bG.md b/src/data/roadmaps/server-side-game-developer/content/reliable-vs-unreliable@MoyBGT9bscUe8vMN4J0bG.md index 72483a12d17f..930b80e1fbe5 100644 --- a/src/data/roadmaps/server-side-game-developer/content/reliable-vs-unreliable@MoyBGT9bscUe8vMN4J0bG.md +++ b/src/data/roadmaps/server-side-game-developer/content/reliable-vs-unreliable@MoyBGT9bscUe8vMN4J0bG.md @@ -2,4 +2,9 @@ In the context of network communication, the terms "reliable" and "unreliable" refer to whether or not data sent across the network is guaranteed to reach its destination. Reliable protocols, such as TCP, ensure that data is delivered from sender to receiver without loss. They do this by establishing a connection, dividing data into packets, sending them one by one, and waiting for acknowledgment of receipt from the receiver. Each sent packet is numbered so if any packet doesn't reach the receiver, it will be identified by the missing sequence number and resent. In this way, reliable protocols ensure data integrity and order. -On the other hand, unreliable protocols, such as UDP, do not guarantee delivery. They simply transmit data without any checks to ensure it has been received. If a packet is dropped for any reason, it is not resent. These protocols do not establish a connection nor check for successful data transfer. This leads to potential data loss, but it provides a faster and more efficient transmission process which can be desirable in certain situations. \ No newline at end of file +On the other hand, unreliable protocols, such as UDP, do not guarantee delivery. They simply transmit data without any checks to ensure it has been received. If a packet is dropped for any reason, it is not resent. These protocols do not establish a connection nor check for successful data transfer. This leads to potential data loss, but it provides a faster and more efficient transmission process which can be desirable in certain situations. +Learn more from the following resources: + +- [@article@Introduction to TCP and UDP - NetworkLessons](https://networklessons.com/network-fundamentals/introduction-to-tcp-and-udp) +- [@article@TCP vs UDP: Understanding Network Protocol Fundamentals - PAIML](https://paiml.com/blog/2025-02-26-tcp-vs-udp-fundamentals/) +- [@article@TCP vs UDP: Speed, Reliability, and Application Trade-offs - Patsnap](https://eureka.patsnap.com/article/tcp-vs-udp-speed-reliability-and-application-trade-offs) diff --git a/src/data/roadmaps/server-side-game-developer/content/resource-usage@LkGI0VpJ3WkpPHkJhJgWk.md b/src/data/roadmaps/server-side-game-developer/content/resource-usage@LkGI0VpJ3WkpPHkJhJgWk.md index d60ea4dbc7fb..20e97951ce4b 100644 --- a/src/data/roadmaps/server-side-game-developer/content/resource-usage@LkGI0VpJ3WkpPHkJhJgWk.md +++ b/src/data/roadmaps/server-side-game-developer/content/resource-usage@LkGI0VpJ3WkpPHkJhJgWk.md @@ -1,3 +1,9 @@ # Resource Usage -In server-side game development, **resource usage** broadly refers to how a game uses the server's computational power, memory, storage, and networking capabilities. These resources are crucial in assuring overall game performance and responsiveness. When monitoring resource usage, you typically pay attention to CPU usage, memory utilization, storage capacity, network bandwidth, and database performance. Server-side code must be developed and optimized with these resources in mind, as inefficient code can lead to increased resource usage, potentially causing lag, disconnections, or crashes. Key elements like scalable architecture and serverless technologies are primarily employed to efficiently manage and balance resource usage. Tools and automated solutions are commonly utilized to monitor and manage these resources in real-time, allowing developers to identify potential issues and optimize accordingly. \ No newline at end of file +In server-side game development, **resource usage** broadly refers to how a game uses the server's computational power, memory, storage, and networking capabilities. These resources are crucial in assuring overall game performance and responsiveness. When monitoring resource usage, you typically pay attention to CPU usage, memory utilization, storage capacity, network bandwidth, and database performance. Server-side code must be developed and optimized with these resources in mind, as inefficient code can lead to increased resource usage, potentially causing lag, disconnections, or crashes. Key elements like scalable architecture and serverless technologies are primarily employed to efficiently manage and balance resource usage. Tools and automated solutions are commonly utilized to monitor and manage these resources in real-time, allowing developers to identify potential issues and optimize accordingly. + +Learn more from the following resources: + +- [@article@Server Monitoring Guide - Splunk](https://www.splunk.com/en_us/blog/learn/server-monitoring.html) +- [@article@Server Monitoring Guidebook - ManageEngine](https://www.manageengine.com/network-monitoring/what-is-server-monitoring.html) +- [@article@Ultimate Guide to Server Monitoring - UptimeRobot](https://uptimerobot.com/knowledge-hub/monitoring/ultimate-guide-to-server-monitoring-metrics-tools-and-best-practices/) diff --git a/src/data/roadmaps/server-side-game-developer/content/rest@Oq3GQ5gBUxIl1Qe8NB3LB.md b/src/data/roadmaps/server-side-game-developer/content/rest@Oq3GQ5gBUxIl1Qe8NB3LB.md index bac0f870016a..4e32f8f2b9ab 100644 --- a/src/data/roadmaps/server-side-game-developer/content/rest@Oq3GQ5gBUxIl1Qe8NB3LB.md +++ b/src/data/roadmaps/server-side-game-developer/content/rest@Oq3GQ5gBUxIl1Qe8NB3LB.md @@ -1,3 +1,8 @@ # REST -REST or Representational State Transfer is an architectural style used in web development. REST systems interact through standard operations on web resource's identified through URIs. It utilizes a stateless, client-server, cacheable communication protocol -- virtually always HTTP. In REST architecture, a client sends a request to the server in order to retrieve or modify data. This data can be identified by a URI and has a specific media type (JSON, XML etc). A key feature of REST is that it's stateless, meaning the server does not keep any data between two requests. While the client holds session state. REST is often used in mobile applications, social networking websites, and automated business processes. \ No newline at end of file +REST or Representational State Transfer is an architectural style used in web development. REST systems interact through standard operations on web resource's identified through URIs. It utilizes a stateless, client-server, cacheable communication protocol -- virtually always HTTP. In REST architecture, a client sends a request to the server in order to retrieve or modify data. This data can be identified by a URI and has a specific media type (JSON, XML etc). A key feature of REST is that it's stateless, meaning the server does not keep any data between two requests. While the client holds session state. REST is often used in mobile applications, social networking websites, and automated business processes. +Learn more from the following resources: + +- [@article@Best Practices in API Design - Swagger](https://swagger.io/resources/articles/best-practices-in-api-design/) +- [@article@RESTful API Design Best Practices Guide 2026 - daily.dev](https://daily.dev/blog/restful-api-design-best-practices-guide-2024/) +- [@article@REST API Tutorial - restfulapi.net](https://restfulapi.net/) diff --git a/src/data/roadmaps/server-side-game-developer/content/routing@bYb7nA-Vn9e6VtdbUT3tq.md b/src/data/roadmaps/server-side-game-developer/content/routing@bYb7nA-Vn9e6VtdbUT3tq.md index a4639a92b49d..4a91aab23704 100644 --- a/src/data/roadmaps/server-side-game-developer/content/routing@bYb7nA-Vn9e6VtdbUT3tq.md +++ b/src/data/roadmaps/server-side-game-developer/content/routing@bYb7nA-Vn9e6VtdbUT3tq.md @@ -1,3 +1,8 @@ # Routing -In server-side game development, **routing** refers to the specification of how an application responds to a client request to a particular endpoint, which is a URI (or path) and a specific HTTP request method (GET, POST, etc.). Each route can have one or more handler functions, which are executed when the route is matched. These handler functions, often coming into play within complex multiplayer game scenarios, handle the logic needed for the route, including data transmission, game state updates, etc. The use of properly configured routes ensures the correct data is sent where it is needed, supporting seamless gameplay interactions. \ No newline at end of file +In server-side game development, **routing** refers to the specification of how an application responds to a client request to a particular endpoint, which is a URI (or path) and a specific HTTP request method (GET, POST, etc.). Each route can have one or more handler functions, which are executed when the route is matched. These handler functions, often coming into play within complex multiplayer game scenarios, handle the logic needed for the route, including data transmission, game state updates, etc. The use of properly configured routes ensures the correct data is sent where it is needed, supporting seamless gameplay interactions. +Learn more from the following resources: + +- [@article@Introduction to Routers and Routing - NetworkLessons](https://networklessons.com/ip-routing/introduction-to-routers-and-routing) +- [@article@What is Routing? - Cisco](https://www.cisco.com/site/us/en/learn/topics/networking/what-is-routing.html) +- [@article@What is Routing? Network Routing Explained - AWS](https://aws.amazon.com/what-is/routing/) diff --git a/src/data/roadmaps/server-side-game-developer/content/rpc--rest@YxaroYL_Az0vKRCeu2jsp.md b/src/data/roadmaps/server-side-game-developer/content/rpc--rest@YxaroYL_Az0vKRCeu2jsp.md index e1394ac75e3a..a4edc1396087 100644 --- a/src/data/roadmaps/server-side-game-developer/content/rpc--rest@YxaroYL_Az0vKRCeu2jsp.md +++ b/src/data/roadmaps/server-side-game-developer/content/rpc--rest@YxaroYL_Az0vKRCeu2jsp.md @@ -4,4 +4,9 @@ RPC (Remote Procedure Call) and REST (Representational State Transfer) are two d In the context of game development, both RPC and REST can be used depending on the specific needs of the game and the underlying architecture that supports it. Both of them offer unique characteristics that make them suitable for different aspects or modules inside a game like character control, game state management, real-time networking, etc. While RPC might be more suited for real-time, fast communication, REST can be leveraged for independent, scalable, and stateless nature of its design. -In sum, RPC and REST terms come up frequently in server-side game development due to their importance in determining how your game will communicate between its different parts, especially in multiplayer environments. It is crucial to make the appropriate choice based on your game's requirements and desired user experience. \ No newline at end of file +In sum, RPC and REST terms come up frequently in server-side game development due to their importance in determining how your game will communicate between its different parts, especially in multiplayer environments. It is crucial to make the appropriate choice based on your game's requirements and desired user experience. +Learn more from the following resources: + +- [@article@RPC vs REST - Difference Between API Architectures - AWS](https://aws.amazon.com/compare/the-difference-between-rpc-and-rest/) +- [@article@Understanding the Difference Between RPC and REST for Web APIs - Merge](https://www.merge.dev/blog/understanding-the-difference-between-rpc-and-rest-for-web-apis) +- [@article@Do You Really Know Why You Prefer REST Over RPC? - API Handyman](https://apihandyman.io/do-you-really-know-why-you-prefer-rest-over-rpc/) diff --git a/src/data/roadmaps/server-side-game-developer/content/security@qkO0s9zR0sAnjTRWcrLQY.md b/src/data/roadmaps/server-side-game-developer/content/security@qkO0s9zR0sAnjTRWcrLQY.md index e87571685054..79c282b73209 100644 --- a/src/data/roadmaps/server-side-game-developer/content/security@qkO0s9zR0sAnjTRWcrLQY.md +++ b/src/data/roadmaps/server-side-game-developer/content/security@qkO0s9zR0sAnjTRWcrLQY.md @@ -1,3 +1,8 @@ # Security -In server-side game development, the aspect of IP (Internet Protocol) security is of paramount importance. This primarily involves ensuring the safety of online gaming interactions, protection of sensitive user data being transmitted, and thwarting possible cyber-attacks or threats. This might include mitigation strategies against DDoS (Distributed Denial of Service) attacks, which are common in multiplayer gaming environments, IP spoofing, and session hijacking. Security measures often involve developing secure server architectures, encryption of data in transit and at rest, validation and sanitization of user input, and implementing comprehensive security policies and procedures. Regular risk assessment and vulnerability scanning are also crucial for identifying and addressing potential security loopholes. Therefore, for any game developer, understanding IP security protocols and integrating them into game development processes is essential to provide users with trustworthy gaming environments. \ No newline at end of file +In server-side game development, the aspect of IP (Internet Protocol) security is of paramount importance. This primarily involves ensuring the safety of online gaming interactions, protection of sensitive user data being transmitted, and thwarting possible cyber-attacks or threats. This might include mitigation strategies against DDoS (Distributed Denial of Service) attacks, which are common in multiplayer gaming environments, IP spoofing, and session hijacking. Security measures often involve developing secure server architectures, encryption of data in transit and at rest, validation and sanitization of user input, and implementing comprehensive security policies and procedures. Regular risk assessment and vulnerability scanning are also crucial for identifying and addressing potential security loopholes. Therefore, for any game developer, understanding IP security protocols and integrating them into game development processes is essential to provide users with trustworthy gaming environments. +Learn more from the following resources: + +- [@article@Protect Multiplayer Game Servers From DDoS Attacks - AWS](https://aws.amazon.com/blogs/gametech/protect-multiplayer-game-servers-from-ddos-attacks-using-amazon-gamelift-2/) +- [@article@Securing Your Game Server - Best Practices - Iceline Hosting](https://iceline-hosting.com/blog/securing-your-game-server-best-practicies) +- [@article@How DDoS Attacks Disrupt Gaming - Corero](https://www.corero.com/how-ddos-attacks-disrupt-gaming/) diff --git a/src/data/roadmaps/server-side-game-developer/content/segment-structure@zTCmPUp9j5P1wpGgiboMa.md b/src/data/roadmaps/server-side-game-developer/content/segment-structure@zTCmPUp9j5P1wpGgiboMa.md index 94ff63daf4db..cf334d4180cf 100644 --- a/src/data/roadmaps/server-side-game-developer/content/segment-structure@zTCmPUp9j5P1wpGgiboMa.md +++ b/src/data/roadmaps/server-side-game-developer/content/segment-structure@zTCmPUp9j5P1wpGgiboMa.md @@ -1,3 +1,8 @@ # Segment Structure -TCP (Transmission Control Protocol) uses a method called "segmentation" to manage data transmission. In this approach, TCP divides a stream of data into smaller parts, known as "segments". Each of these segments is then independently sent over the internet. A basic TCP segment consists of a header and the data section. The header contains various fields such as source port, destination port, sequence number, acknowledgment number, data offset, reserved section, control bit, window, checksum, urgent pointer, and options. The rest of the segment is occupied by the data transferred by TCP. Understanding the structure of these segments is crucial for understanding how TCP, and thereby much of the Internet, operates. \ No newline at end of file +TCP (Transmission Control Protocol) uses a method called "segmentation" to manage data transmission. In this approach, TCP divides a stream of data into smaller parts, known as "segments". Each of these segments is then independently sent over the internet. A basic TCP segment consists of a header and the data section. The header contains various fields such as source port, destination port, sequence number, acknowledgment number, data offset, reserved section, control bit, window, checksum, urgent pointer, and options. The rest of the segment is occupied by the data transferred by TCP. Understanding the structure of these segments is crucial for understanding how TCP, and thereby much of the Internet, operates. +Learn more from the following resources: + +- [@article@Services and Segment Structure in TCP - GeeksforGeeks](https://www.geeksforgeeks.org/computer-networks/services-and-segment-structure-in-tcp/) +- [@article@TCP Header: Size, Structure, Options, Format, Checksum - Noction](https://www.noction.com/blog/tcp-header) +- [@article@TCP Header - NetworkLessons](https://networklessons.com/ip-routing/tcp-header) diff --git a/src/data/roadmaps/server-side-game-developer/content/select@5-5toy2CblZPCV9d5QPEo.md b/src/data/roadmaps/server-side-game-developer/content/select@5-5toy2CblZPCV9d5QPEo.md index 9d788c0c63b3..41a401f2748f 100644 --- a/src/data/roadmaps/server-side-game-developer/content/select@5-5toy2CblZPCV9d5QPEo.md +++ b/src/data/roadmaps/server-side-game-developer/content/select@5-5toy2CblZPCV9d5QPEo.md @@ -11,4 +11,6 @@ better performance and scalability. Visit the following resources to learn more: - [@documentation@Linux select API](https://man7.org/linux/man-pages/man2/select.2.html) -- [@article@select vs epoll vs poll](https://devarea.com/linux-io-multiplexing-select-vs-poll-vs-epoll/) \ No newline at end of file +- [@article@I/O Multiplexing: The select and poll Functions - Shichao's Notes](https://notes.shichao.io/unp/ch6/) +- [@article@Linux select() - Synchronous I/O Multiplexing - phoenixNAP](https://phoenixnap.com/kb/linux-select) +- [@documentation@select() - IBM Documentation](https://www.ibm.com/docs/en/zos/3.1.0?topic=functions-select-suspend-execution-pending-multiple-descriptors) diff --git a/src/data/roadmaps/server-side-game-developer/content/selective-ack@SPpOO25b7wpajWDIrKi1u.md b/src/data/roadmaps/server-side-game-developer/content/selective-ack@SPpOO25b7wpajWDIrKi1u.md index 38ffc6c3d4b1..74e07571ee2c 100644 --- a/src/data/roadmaps/server-side-game-developer/content/selective-ack@SPpOO25b7wpajWDIrKi1u.md +++ b/src/data/roadmaps/server-side-game-developer/content/selective-ack@SPpOO25b7wpajWDIrKi1u.md @@ -1,3 +1,8 @@ # Selective Acknowledgement -Selective Acknowledgement (SACK) is a mechanism introduced in TCP to improve its efficiency in handling packet loss in the network. When TCP detects packet loss, it normally retransmits all packets sent after the lost packet, regardless of whether they were received successfully or not. SACK, however, allows the receiver to acknowledge non-consecutive packets, effectively informing the sender exactly which packets were received successfully and which weren't. By using this mechanism, TCP can selectively retransmit only those packets that were lost, saving bandwidth and improving overall performance. \ No newline at end of file +Selective Acknowledgement (SACK) is a mechanism introduced in TCP to improve its efficiency in handling packet loss in the network. When TCP detects packet loss, it normally retransmits all packets sent after the lost packet, regardless of whether they were received successfully or not. SACK, however, allows the receiver to acknowledge non-consecutive packets, effectively informing the sender exactly which packets were received successfully and which weren't. By using this mechanism, TCP can selectively retransmit only those packets that were lost, saving bandwidth and improving overall performance. +Learn more from the following resources: + +- [@article@RFC 2018 - TCP Selective Acknowledgment Options - IETF](https://datatracker.ietf.org/doc/html/rfc2018) +- [@article@RFC 3517: A Conservative Selective Acknowledgment (SACK)-based Loss Recovery Algorithm - IETF](https://www.rfc-editor.org/rfc/rfc3517.html) +- [@article@RFC 2883: An Extension to SACK for D-SACK - IETF](https://www.hjp.at/doc/rfc/rfc2883.html) diff --git a/src/data/roadmaps/server-side-game-developer/content/semaphore@DYvzGc_r0SlOArPPc1gNI.md b/src/data/roadmaps/server-side-game-developer/content/semaphore@DYvzGc_r0SlOArPPc1gNI.md index 2ebca321b1ce..6d105fcb9131 100644 --- a/src/data/roadmaps/server-side-game-developer/content/semaphore@DYvzGc_r0SlOArPPc1gNI.md +++ b/src/data/roadmaps/server-side-game-developer/content/semaphore@DYvzGc_r0SlOArPPc1gNI.md @@ -10,3 +10,7 @@ semaphores help maintain stability in high-performance multiplayer environments. Visit the following resources to learn more: - [@article@Semaphores in Process Synchronization](https://www.geeksforgeeks.org/semaphores-in-process-synchronization/) + +- [@article@Semaphore (programming) - Wikipedia](https://en.wikipedia.org/wiki/Semaphore_(programming)) +- [@article@Synchronization With Semaphores - Oracle](https://docs.oracle.com/cd/E19120-01/open.solaris/816-5137/sync-11157/index.html) +- [@video@What is a Semaphore? How Do They Work? - YouTube](https://www.youtube.com/watch?v=ukM_zzrIeXs) diff --git a/src/data/roadmaps/server-side-game-developer/content/serialization@TS6dz61rUSxm-SqmK6JKe.md b/src/data/roadmaps/server-side-game-developer/content/serialization@TS6dz61rUSxm-SqmK6JKe.md index e05362e173de..ccbea8f60443 100644 --- a/src/data/roadmaps/server-side-game-developer/content/serialization@TS6dz61rUSxm-SqmK6JKe.md +++ b/src/data/roadmaps/server-side-game-developer/content/serialization@TS6dz61rUSxm-SqmK6JKe.md @@ -1,3 +1,8 @@ # Serialization -Serialization in server-side game development is the process of transforming data objects or structures into a format that can be stored, transmitted, and reconstructed later. It's significant because it enables you to save the state of a game, pass it between servers, or send it to clients. The two main types of serialization are binary and XML/JSON. Binary serialization turns your objects into a very compact binary format. XML/JSON serialization turns your objects into a textual format, which is less efficient but more human-readable and easier to debug. Depending on your specific needs, you may choose one over the other. Note also that each of these methods has its own exacerbations in terms of compatibility, performance, and security implications. \ No newline at end of file +Serialization in server-side game development is the process of transforming data objects or structures into a format that can be stored, transmitted, and reconstructed later. It's significant because it enables you to save the state of a game, pass it between servers, or send it to clients. The two main types of serialization are binary and XML/JSON. Binary serialization turns your objects into a very compact binary format. XML/JSON serialization turns your objects into a textual format, which is less efficient but more human-readable and easier to debug. Depending on your specific needs, you may choose one over the other. Note also that each of these methods has its own exacerbations in terms of compatibility, performance, and security implications. +Learn more from the following resources: + +- [@article@Protobuf vs JSON: Performance, Efficiency and API Speed - Gravitee](https://www.gravitee.io/blog/protobuf-vs-json) +- [@article@Data Serialization for Games - Game Developer](https://www.gamedeveloper.com/programming/data-serialization-for-games) +- [@article@Data Serialization Course - That One Game Dev](https://thatonegamedev.com/cpp/my-course-on-data-serialization-is-out/) diff --git a/src/data/roadmaps/server-side-game-developer/content/server-side-development@rQArtuVKGVgLn_fw9yO3b.md b/src/data/roadmaps/server-side-game-developer/content/server-side-development@rQArtuVKGVgLn_fw9yO3b.md index 82927385734a..0b4f8693137d 100644 --- a/src/data/roadmaps/server-side-game-developer/content/server-side-development@rQArtuVKGVgLn_fw9yO3b.md +++ b/src/data/roadmaps/server-side-game-developer/content/server-side-development@rQArtuVKGVgLn_fw9yO3b.md @@ -1,3 +1,8 @@ # Server Side -The term "server-side" refers to operations that are performed by the server in a client-server relationship in a computer network. In games, the server-side is responsible for the logic and rules of the game, data persistence, security, and synchronization of the game state among all connected clients. It essentially handles all processing that isn't done on the client-side. Code run on the server-side can be written in various programming languages, but it's often in PHP, Ruby, Python, .NET, Java, or JavaScript (Node.js). Knowing server-side programming is critical for any game developer to create maintainable, scalable, and secure online games. \ No newline at end of file +The term "server-side" refers to operations that are performed by the server in a client-server relationship in a computer network. In games, the server-side is responsible for the logic and rules of the game, data persistence, security, and synchronization of the game state among all connected clients. It essentially handles all processing that isn't done on the client-side. Code run on the server-side can be written in various programming languages, but it's often in PHP, Ruby, Python, .NET, Java, or JavaScript (Node.js). Knowing server-side programming is critical for any game developer to create maintainable, scalable, and secure online games. +Learn more from the following resources: + +- [@article@Introduction to the Server Side - MDN](https://developer.mozilla.org/en-US/docs/Learn_web_development/Extensions/Server-side/First_steps/Introduction) +- [@article@Learning Server-side Programming through Game Development - Coursera](https://www.coursera.org/learn/learning-server-side-programming-through-game-development) +- [@video@Online Multiplayer JavaScript Game Tutorial - YouTube](https://www.youtube.com/watch?v=HXquxWtE5vA) diff --git a/src/data/roadmaps/server-side-game-developer/content/serverless@DOmbRRK_RRPElOuTB7AAK.md b/src/data/roadmaps/server-side-game-developer/content/serverless@DOmbRRK_RRPElOuTB7AAK.md index b7228b94786d..63330d15ab01 100644 --- a/src/data/roadmaps/server-side-game-developer/content/serverless@DOmbRRK_RRPElOuTB7AAK.md +++ b/src/data/roadmaps/server-side-game-developer/content/serverless@DOmbRRK_RRPElOuTB7AAK.md @@ -1,3 +1,8 @@ # Serverless -**Serverless** is a cloud architecture model where the application developers don't have to provision, scale, and manage servers or runtimes, to build their applications. The name serverless comes from the idea that the tasks traditionally performed by a server are handled elsewhere, abstracting the responsibility of managing servers away from the developer. Developers can write and deploy code without worrying about the underlying infrastructure. A serverless model uses backends as a service (BaaS) and functions as a service (FaaS), providing automatic scaling, patching, and capacity provisioning. Popular examples of serverless providers are AWS Lambda, Google Cloud Functions, and Azure Functions. \ No newline at end of file +**Serverless** is a cloud architecture model where the application developers don't have to provision, scale, and manage servers or runtimes, to build their applications. The name serverless comes from the idea that the tasks traditionally performed by a server are handled elsewhere, abstracting the responsibility of managing servers away from the developer. Developers can write and deploy code without worrying about the underlying infrastructure. A serverless model uses backends as a service (BaaS) and functions as a service (FaaS), providing automatic scaling, patching, and capacity provisioning. Popular examples of serverless providers are AWS Lambda, Google Cloud Functions, and Azure Functions. +Learn more from the following resources: + +- [@article@Building a Serverless Multiplayer Game That Scales - AWS](https://aws.amazon.com/blogs/compute/building-a-serverless-multiplayer-game-that-scales/) +- [@article@Serverless Game Architecture - Ben Hofferber](https://benhofferber.com/code/serverless-game-architecture/) +- [@article@Standalone Game Session Servers with a Serverless Backend - AWS](https://docs.aws.amazon.com/gameliftservers/latest/developerguide/gamelift_quickstart_customservers_designbackend_arch_serverless.html) diff --git a/src/data/roadmaps/server-side-game-developer/content/sharding@3use5vuLBJTk40wOg9S-X.md b/src/data/roadmaps/server-side-game-developer/content/sharding@3use5vuLBJTk40wOg9S-X.md index e6c11341d416..a7d45c657010 100644 --- a/src/data/roadmaps/server-side-game-developer/content/sharding@3use5vuLBJTk40wOg9S-X.md +++ b/src/data/roadmaps/server-side-game-developer/content/sharding@3use5vuLBJTk40wOg9S-X.md @@ -1,3 +1,8 @@ # Sharding -Sharding is a type of database partitioning that separates very large databases into smaller, faster, more easily managed parts called data shards. The word shard means a small part of a whole. Each shard is held on a separate database server instance, to spread load and reduce the risk of a single point of failure. Sharding can be done on a horizontal or vertical basis. Horizontal Sharding, also known as data sharding, involves putting different rows onto different tables. Vertical Sharding, on the other hand, involves putting different columns onto different tables. It's possible to shard on the basis of certain columns, and databases can be sharded in many different ways. Sharding is a complex process, but proper planning can allow for increased scalability and performance improvements. \ No newline at end of file +Sharding is a type of database partitioning that separates very large databases into smaller, faster, more easily managed parts called data shards. The word shard means a small part of a whole. Each shard is held on a separate database server instance, to spread load and reduce the risk of a single point of failure. Sharding can be done on a horizontal or vertical basis. Horizontal Sharding, also known as data sharding, involves putting different rows onto different tables. Vertical Sharding, on the other hand, involves putting different columns onto different tables. It's possible to shard on the basis of certain columns, and databases can be sharded in many different ways. Sharding is a complex process, but proper planning can allow for increased scalability and performance improvements. +Learn more from the following resources: + +- [@article@A Comprehensive Guide to Sharding - PubNub](https://www.pubnub.com/guides/sharding/) +- [@article@Database Sharding - System Design - GeeksforGeeks](https://www.geeksforgeeks.org/system-design/database-sharding-a-system-design-concept/) +- [@article@Sharding Pattern - Azure Architecture Center - Microsoft Learn](https://learn.microsoft.com/en-us/azure/architecture/patterns/sharding) diff --git a/src/data/roadmaps/server-side-game-developer/content/socket-programming@HvpuFTCknHPhnFkhmhRc4.md b/src/data/roadmaps/server-side-game-developer/content/socket-programming@HvpuFTCknHPhnFkhmhRc4.md index 8cd772af3ee4..57025c3e2e80 100644 --- a/src/data/roadmaps/server-side-game-developer/content/socket-programming@HvpuFTCknHPhnFkhmhRc4.md +++ b/src/data/roadmaps/server-side-game-developer/content/socket-programming@HvpuFTCknHPhnFkhmhRc4.md @@ -1,3 +1,8 @@ # Socket Programming -Socket programming is a method of communication between two computers using a network protocol, typically TCP/IP. In server-side game development, socket programming is used to facilitate real-time, bi-directional communication between the server and client(s). The server opens a socket that waits for incoming connection requests from the client side. Once a connection is established, the server and client can exchange data until the connection is closed. This facilitates live multiplayer gaming experiences, allowing users on different computers to interact within the same game environment.```socket programming``` in Python, for example, includes modules for creating both the server side (```socketserver```) and client side (```socket```) of the conversation. \ No newline at end of file +Socket programming is a method of communication between two computers using a network protocol, typically TCP/IP. In server-side game development, socket programming is used to facilitate real-time, bi-directional communication between the server and client(s). The server opens a socket that waits for incoming connection requests from the client side. Once a connection is established, the server and client can exchange data until the connection is closed. This facilitates live multiplayer gaming experiences, allowing users on different computers to interact within the same game environment.```socket programming``` in Python, for example, includes modules for creating both the server side (```socketserver```) and client side (```socket```) of the conversation. +Learn more from the following resources: + +- [@article@C# Networking: Raw Sockets, TCP, and UDP Programming - Dev.to](https://dev.to/chakewitz/c-networking-raw-sockets-tcp-and-udp-programming-46oc) +- [@article@Python Sockets - Real Python](https://realpython.com/python-sockets/) +- [@video@Multiplayer Snake Game with JavaScript and Socket.io - YouTube](https://www.youtube.com/watch?v=ppcBIHv_ZPs) diff --git a/src/data/roadmaps/server-side-game-developer/content/spinlock@lVXfA_oZr82mFfBvLnnRK.md b/src/data/roadmaps/server-side-game-developer/content/spinlock@lVXfA_oZr82mFfBvLnnRK.md index fb581ea20f53..710ef5daf987 100644 --- a/src/data/roadmaps/server-side-game-developer/content/spinlock@lVXfA_oZr82mFfBvLnnRK.md +++ b/src/data/roadmaps/server-side-game-developer/content/spinlock@lVXfA_oZr82mFfBvLnnRK.md @@ -1,3 +1,8 @@ # Spinlock -`Spinlock` is a type of synchronization mechanism that exists in a busy-wait-state (essentially, 'spinning') until the lock can be acquired. This contrasts with other locking mechanisms that might put a thread to sleep if the desired lock is not available. It's generally used in scenarios where thread sleeping (context switching) could be costlier than spinning. However, it must be handled properly. An improperly managed spinlock can cause high CPU usage, as the wait is active; it continually consumes processing capacity. Hence, their usage is more beneficial in scenarios where the wait time to acquire a lock is reasonably short. \ No newline at end of file +`Spinlock` is a type of synchronization mechanism that exists in a busy-wait-state (essentially, 'spinning') until the lock can be acquired. This contrasts with other locking mechanisms that might put a thread to sleep if the desired lock is not available. It's generally used in scenarios where thread sleeping (context switching) could be costlier than spinning. However, it must be handled properly. An improperly managed spinlock can cause high CPU usage, as the wait is active; it continually consumes processing capacity. Hence, their usage is more beneficial in scenarios where the wait time to acquire a lock is reasonably short. +Learn more from the following resources: + +- [@article@What is Spinlock in Operating System? - GeeksforGeeks](https://www.geeksforgeeks.org/operating-systems/what-is-spinlock-in-operating-system/) +- [@article@Spinlock - Wikipedia](https://en.wikipedia.org/wiki/Spinlock) +- [@article@Introduction to Spin Locks - Microsoft Learn](https://learn.microsoft.com/en-us/windows-hardware/drivers/kernel/introduction-to-spin-locks) diff --git a/src/data/roadmaps/server-side-game-developer/content/ssl@PSvPjaVtko71BeIA-hYqf.md b/src/data/roadmaps/server-side-game-developer/content/ssl@PSvPjaVtko71BeIA-hYqf.md index 03d9294c089f..79d197d56c69 100644 --- a/src/data/roadmaps/server-side-game-developer/content/ssl@PSvPjaVtko71BeIA-hYqf.md +++ b/src/data/roadmaps/server-side-game-developer/content/ssl@PSvPjaVtko71BeIA-hYqf.md @@ -1,3 +1,8 @@ # SSL -Secure Sockets Layer (SSL) is a security protocol which provides encrypted communication between a web browser and a web server. This protocol operates via a process where the SSL certificate, held by the web server, creates two cryptographic keys - a Public Key and a Private Key. The public key is placed into a Certificate Signing Request (CSR) - a file also containing detailed information about the web server and your organization. A certificate authority then validates these details and issue an SSL certificate for your web server. This SSL certificate contains the new, unique public key for your web's session data. When a browser connects to this web server and the SSL handshake is complete, an encrypted SSL session is established via the protocols of symmetric cryptography. It's noteworthy to mention that even though SSL has been succeeded by Transport Layer Security (TLS), people still refer to these certificates as SSL. \ No newline at end of file +Secure Sockets Layer (SSL) is a security protocol which provides encrypted communication between a web browser and a web server. This protocol operates via a process where the SSL certificate, held by the web server, creates two cryptographic keys - a Public Key and a Private Key. The public key is placed into a Certificate Signing Request (CSR) - a file also containing detailed information about the web server and your organization. A certificate authority then validates these details and issue an SSL certificate for your web server. This SSL certificate contains the new, unique public key for your web's session data. When a browser connects to this web server and the SSL handshake is complete, an encrypted SSL session is established via the protocols of symmetric cryptography. It's noteworthy to mention that even though SSL has been succeeded by Transport Layer Security (TLS), people still refer to these certificates as SSL. +Learn more from the following resources: + +- [@article@What is SSL/TLS: An In-Depth Guide - SSL.com](https://www.ssl.com/article/what-is-ssl-tls-an-in-depth-guide/) +- [@article@What is SSL, TLS and HTTPS? - DigiCert](https://www.digicert.com/what-is-ssl-tls-and-https) +- [@article@What Certificate Do I Need for My Client-Server Game? - GameDev StackExchange](https://gamedev.stackexchange.com/questions/165270/what-certificate-do-i-need-for-my-client-server-game) diff --git a/src/data/roadmaps/server-side-game-developer/content/streaming-vs-broadcast@pJw8fN1dt3BABtZVz7wGE.md b/src/data/roadmaps/server-side-game-developer/content/streaming-vs-broadcast@pJw8fN1dt3BABtZVz7wGE.md index 39a443468c17..fa0a76935e0b 100644 --- a/src/data/roadmaps/server-side-game-developer/content/streaming-vs-broadcast@pJw8fN1dt3BABtZVz7wGE.md +++ b/src/data/roadmaps/server-side-game-developer/content/streaming-vs-broadcast@pJw8fN1dt3BABtZVz7wGE.md @@ -1,3 +1,8 @@ # Streaming vs Broadcast -In the context of network protocol, streaming and broadcasting are two methods for transmitting data packets. Streaming, often performed over TCP, entails sending data from one source to a single specific destination. This method is comparable to a one-to-one phone call. The streaming process is characterized by steady data transmission directly to a single receiver who has initiated a connection. On the contrary, broadcasting refers to the transmittal of data packets from one source to all possible destinations in the network. Similar to a public announcement over a loudspeaker, the data is sent to all receptive entities. Broadcasting primarily utilizes the UDP protocol and does not require a direct connection or acknowledgement of receipt from the recipients. \ No newline at end of file +In the context of network protocol, streaming and broadcasting are two methods for transmitting data packets. Streaming, often performed over TCP, entails sending data from one source to a single specific destination. This method is comparable to a one-to-one phone call. The streaming process is characterized by steady data transmission directly to a single receiver who has initiated a connection. On the contrary, broadcasting refers to the transmittal of data packets from one source to all possible destinations in the network. Similar to a public announcement over a loudspeaker, the data is sent to all receptive entities. Broadcasting primarily utilizes the UDP protocol and does not require a direct connection or acknowledgement of receipt from the recipients. +Learn more from the following resources: + +- [@article@TCP vs UDP: What's the Difference for Video Streaming? - Ant Media](https://antmedia.io/tcp-vs-udp-video-streaming/) +- [@article@UDP vs. TCP and Which One to Use for Video Streaming - Wowza](https://www.wowza.com/blog/udp-vs-tcp) +- [@article@Broadcasting (Networking) - Wikipedia](https://en.wikipedia.org/wiki/Broadcasting_(networking)) diff --git a/src/data/roadmaps/server-side-game-developer/content/synchronization@idmrgKgVWVLZYANbXiZnS.md b/src/data/roadmaps/server-side-game-developer/content/synchronization@idmrgKgVWVLZYANbXiZnS.md index 84f84d564168..e23a7f649183 100644 --- a/src/data/roadmaps/server-side-game-developer/content/synchronization@idmrgKgVWVLZYANbXiZnS.md +++ b/src/data/roadmaps/server-side-game-developer/content/synchronization@idmrgKgVWVLZYANbXiZnS.md @@ -1,3 +1,8 @@ # Synchronization -In the context of multithreading, **synchronization** is a mechanism which ensures that two or more concurrent threads don't simultaneously execute some particular program segment known as a critical section. Concurrent accesses to shared resource can lead to race conditions. Two or more operating systems' threads can access shared data simultaneously. With synchronization, you can ensure that only one thread can access the shared resource at a time, hence avoiding any data inconsistency. Different synchronization techniques such as locks, semaphores, condition variables, monitors and signaling are used to deal with synchronization situations, each with its own pros and cons. \ No newline at end of file +In the context of multithreading, **synchronization** is a mechanism which ensures that two or more concurrent threads don't simultaneously execute some particular program segment known as a critical section. Concurrent accesses to shared resource can lead to race conditions. Two or more operating systems' threads can access shared data simultaneously. With synchronization, you can ensure that only one thread can access the shared resource at a time, hence avoiding any data inconsistency. Different synchronization techniques such as locks, semaphores, condition variables, monitors and signaling are used to deal with synchronization situations, each with its own pros and cons. +Learn more from the following resources: + +- [@article@Barrier Synchronization In Multithreading: A Practical Guide - ITU Online](https://www.ituonline.com/tech-definitions/what-is-multithreading-synchronization/) +- [@article@Java Synchronization - Oracle Docs](https://docs.oracle.com/javase/tutorial/essential/concurrency/locksync.html) +- [@article@Java Thread Synchronization - TutorialsPoint](https://www.tutorialspoint.com/java/java_thread_synchronization.htm) diff --git a/src/data/roadmaps/server-side-game-developer/content/synchrony@l5QTk408Ubagw8XzRAfoZ.md b/src/data/roadmaps/server-side-game-developer/content/synchrony@l5QTk408Ubagw8XzRAfoZ.md index f820ecbfe4c0..125331d3ee11 100644 --- a/src/data/roadmaps/server-side-game-developer/content/synchrony@l5QTk408Ubagw8XzRAfoZ.md +++ b/src/data/roadmaps/server-side-game-developer/content/synchrony@l5QTk408Ubagw8XzRAfoZ.md @@ -1,3 +1,8 @@ # Synchrony -In a reactive paradigm, "synchrony" is a key concept related to data management and interactions among multiple components in a server-side game development context. It refers to the idea that operations or processes are executed 'in sync', meaning that the next operation starts strictly after the previous operation has already finished. In a synchronous communication, for instance, the sender can't start a new communication until the receiver confirmed receiving the last parcel. It's different from "asynchrony" where various operations can run concurrently, not waiting for previous operations to finish before moving on. Overall, understanding the concepts of synchrony and asynchrony are crucial for making efficient use of resources in server-side game development, and picking the right approach depends on the specific use case and requirements. \ No newline at end of file +In a reactive paradigm, "synchrony" is a key concept related to data management and interactions among multiple components in a server-side game development context. It refers to the idea that operations or processes are executed 'in sync', meaning that the next operation starts strictly after the previous operation has already finished. In a synchronous communication, for instance, the sender can't start a new communication until the receiver confirmed receiving the last parcel. It's different from "asynchrony" where various operations can run concurrently, not waiting for previous operations to finish before moving on. Overall, understanding the concepts of synchrony and asynchrony are crucial for making efficient use of resources in server-side game development, and picking the right approach depends on the specific use case and requirements. +Learn more from the following resources: + +- [@article@Synchronous vs Asynchronous Programming: A Developer Guide - Augment Code](https://www.augmentcode.com/learn/synchronous-vs-asynchronous-programming-a-developer-guide) +- [@article@Synchronous Vs Asynchronous Gameplay in Online Games - Game Developer](https://www.gamedeveloper.com/design/synchronous-vs-asynchronous-gameplay-in-online-games) +- [@article@Asynchronous vs. Synchronous Programming: Which Approach is Best - Sunscrapers](https://sunscrapers.com/blog/programming-async-vs-sync-best-approach/) diff --git a/src/data/roadmaps/server-side-game-developer/content/task-based@LKPcEeqBOPhQOztD3cM3T.md b/src/data/roadmaps/server-side-game-developer/content/task-based@LKPcEeqBOPhQOztD3cM3T.md index fdcd86c1246d..9a36c705948f 100644 --- a/src/data/roadmaps/server-side-game-developer/content/task-based@LKPcEeqBOPhQOztD3cM3T.md +++ b/src/data/roadmaps/server-side-game-developer/content/task-based@LKPcEeqBOPhQOztD3cM3T.md @@ -1,3 +1,8 @@ # Task-Based -Task-based multithreading refers to a model where tasks are the units of work abstracted from threads. In this model, application logic is divided into smaller tasks, each capable of running independent of the others. The tasks are then executed by a pool of threads, managed by a scheduler. Unlike traditional thread-centric models where each thread performs a specific task, task-based multithreading allows for greater flexibility by decoupling the tasks from the threads and letting the system dynamically assign tasks to idle threads. With task-based multithreading, developers no longer need to manually manage threading details like creation, control, synchronization, and termination, hence enabling more focus on the development of the game logic. \ No newline at end of file +Task-based multithreading refers to a model where tasks are the units of work abstracted from threads. In this model, application logic is divided into smaller tasks, each capable of running independent of the others. The tasks are then executed by a pool of threads, managed by a scheduler. Unlike traditional thread-centric models where each thread performs a specific task, task-based multithreading allows for greater flexibility by decoupling the tasks from the threads and letting the system dynamically assign tasks to idle threads. With task-based multithreading, developers no longer need to manually manage threading details like creation, control, synchronization, and termination, hence enabling more focus on the development of the game logic. +Learn more from the following resources: + +- [@article@Implementations of Task-Based Parallelism in Game Engines - StackExchange](https://gamedev.stackexchange.com/questions/60240/implementations-of-task-based-parallelism-in-game-engines) +- [@article@Task-based Multithreading: How to Program for 100 Cores - GDC Vault](https://gdcvault.com/play/1012321/Task-based-Multithreading-How-to) +- [@article@Getting Started with Intel oneAPI Tasking Library - Intel](https://www.intel.com/content/www/us/en/developer/articles/guide/get-started-with-intel-oneapi-tasking-library.html) diff --git a/src/data/roadmaps/server-side-game-developer/content/tcp-vs-udp@RfTcTUjaXyp49FnUf44MK.md b/src/data/roadmaps/server-side-game-developer/content/tcp-vs-udp@RfTcTUjaXyp49FnUf44MK.md index eb3b15c4b204..d77bdd76b10d 100644 --- a/src/data/roadmaps/server-side-game-developer/content/tcp-vs-udp@RfTcTUjaXyp49FnUf44MK.md +++ b/src/data/roadmaps/server-side-game-developer/content/tcp-vs-udp@RfTcTUjaXyp49FnUf44MK.md @@ -1,3 +1,8 @@ # TCP vs UDP -TCP, or Transmission Control Protocol, is a connection-oriented protocol that guarantees delivery of packets to the destination router. It includes error-checking and ensures packets are delivered in the correct order. On the other hand, UDP, or User Datagram Protocol, is a connectionless protocol which doesn't guarantee delivery or ensure correct sequencing of packets. As a result, UDP is considered faster and more efficient for some applications like video streaming or online gaming where speed matters more than accuracy. So, choosing between TCP and UDP really boils down to the specific requirements and priorities of the situation - it's a trade-off between speed and reliability. \ No newline at end of file +TCP, or Transmission Control Protocol, is a connection-oriented protocol that guarantees delivery of packets to the destination router. It includes error-checking and ensures packets are delivered in the correct order. On the other hand, UDP, or User Datagram Protocol, is a connectionless protocol which doesn't guarantee delivery or ensure correct sequencing of packets. As a result, UDP is considered faster and more efficient for some applications like video streaming or online gaming where speed matters more than accuracy. So, choosing between TCP and UDP really boils down to the specific requirements and priorities of the situation - it's a trade-off between speed and reliability. +Learn more from the following resources: + +- [@article@TCP or UDP for a Multiplayer Game? - StackExchange](https://softwareengineering.stackexchange.com/questions/342254/tcp-or-udp-for-a-multiplayer-game) +- [@article@Game Servers: UDP vs TCP - 1024 Monkeys](https://1024monkeys.wordpress.com/2014/04/01/game-servers-udp-vs-tcp/) +- [@article@Part IV: Great TCP-vs-UDP Debate - IT Hare](https://ithare.com/64-network-dos-and-donts-for-game-engines-part-iv-great-tcp-vs-udp-debate/) diff --git a/src/data/roadmaps/server-side-game-developer/content/tcp@mUCidjOsVLMAVDf2jmV5F.md b/src/data/roadmaps/server-side-game-developer/content/tcp@mUCidjOsVLMAVDf2jmV5F.md index 56037ab85f88..cb74caf24cfe 100644 --- a/src/data/roadmaps/server-side-game-developer/content/tcp@mUCidjOsVLMAVDf2jmV5F.md +++ b/src/data/roadmaps/server-side-game-developer/content/tcp@mUCidjOsVLMAVDf2jmV5F.md @@ -1,3 +1,8 @@ # TCP -TCP, an acronym for Transmission Control Protocol, is a fundamental protocol in the suite of internet protocols. It is a connection-oriented, reliable, byte stream service that sits at the transport layer of the OSI Model. In simpler terms, TCP enables two hosts to establish a connection and exchange data. During this communication, TCP ensures that data is not lost or received out of order by providing error checking mechanisms and a system for retransmission of lost data. Furthermore, to ensure efficient use of network resources, TCP implements flow control, congestion control and provides a means for hosts to dynamically adjust the throughput of the connection. \ No newline at end of file +TCP, an acronym for Transmission Control Protocol, is a fundamental protocol in the suite of internet protocols. It is a connection-oriented, reliable, byte stream service that sits at the transport layer of the OSI Model. In simpler terms, TCP enables two hosts to establish a connection and exchange data. During this communication, TCP ensures that data is not lost or received out of order by providing error checking mechanisms and a system for retransmission of lost data. Furthermore, to ensure efficient use of network resources, TCP implements flow control, congestion control and provides a means for hosts to dynamically adjust the throughput of the connection. +Learn more from the following resources: + +- [@article@Transmission Control Protocol (TCP) - Khan Academy](https://www.khanacademy.org/computing/computers-and-internet/xcae6f4a7ff015e7d:the-internet/xcae6f4a7ff015e7d:transporting-packets/a/transmission-control-protocol--tcp) +- [@article@A Comprehensive Guide to TCP/IP - PubNub](https://www.pubnub.com/guides/tcp-ip/) +- [@article@What is TCP (Transmission Control Protocol)? - IPCisco](https://ipcisco.com/lesson/tcp-transmission-control-protocol/) diff --git a/src/data/roadmaps/server-side-game-developer/content/tdd@FKOhe21PVlaKIoZI4hd49.md b/src/data/roadmaps/server-side-game-developer/content/tdd@FKOhe21PVlaKIoZI4hd49.md index e880e9b1eb68..b6059e325411 100644 --- a/src/data/roadmaps/server-side-game-developer/content/tdd@FKOhe21PVlaKIoZI4hd49.md +++ b/src/data/roadmaps/server-side-game-developer/content/tdd@FKOhe21PVlaKIoZI4hd49.md @@ -1,3 +1,8 @@ # TDD -`Test Driven Development (TDD)` is a development strategy in which developers write tests before writing the bare minimum of code required for the test to be passed. The process involves three stages: red, green, and refactor. In the red phase, a test is written which initially fails (since the code it's testing doesn't exist yet). In the green phase, the minimal amount of code to make the test pass is created. Lastly, in the refactor phase, the written code is improved without affecting its behavior. The process is often visualized as a cycle: "Red - Green - Refactor". This repeating process allows for smaller, more defined feature development, reduces bug emergence, and encourages simple design. TDD is primarily used in agile development environments. \ No newline at end of file +`Test Driven Development (TDD)` is a development strategy in which developers write tests before writing the bare minimum of code required for the test to be passed. The process involves three stages: red, green, and refactor. In the red phase, a test is written which initially fails (since the code it's testing doesn't exist yet). In the green phase, the minimal amount of code to make the test pass is created. Lastly, in the refactor phase, the written code is improved without affecting its behavior. The process is often visualized as a cycle: "Red - Green - Refactor". This repeating process allows for smaller, more defined feature development, reduces bug emergence, and encourages simple design. TDD is primarily used in agile development environments. +Learn more from the following resources: + +- [@article@Test-Driven Game Development (Part 1) - Games From Within](https://gamesfromwithin.com/stepping-through-the-looking-glass-test-driven-game-development-part-1) +- [@article@How I Use Test Driven Development to Make Games - Ariel Coppes](https://arielcoppes.dev/2023/10/29/tdd-to-make-games.html) +- [@article@Test-Driven Development For Gaming - Meegle](https://www.meegle.com/en_us/topics/test-driven-development/test-driven-development-for-gaming) diff --git a/src/data/roadmaps/server-side-game-developer/content/tensorflow@iJE9RnKC8QjPnsFeZAbtl.md b/src/data/roadmaps/server-side-game-developer/content/tensorflow@iJE9RnKC8QjPnsFeZAbtl.md index b91ec14d5747..d0dd21ff4227 100644 --- a/src/data/roadmaps/server-side-game-developer/content/tensorflow@iJE9RnKC8QjPnsFeZAbtl.md +++ b/src/data/roadmaps/server-side-game-developer/content/tensorflow@iJE9RnKC8QjPnsFeZAbtl.md @@ -1,3 +1,9 @@ # Tensor Flow **TensorFlow** is an open-source, end-to-end platform initially developed by Google Brain Team. Focusing on machine learning and equipped to handle deep learning tasks, TensorFlow takes input as a multi-dimensional array also known as a 'tensor'. The framework allows developers to create dataflow graphs. These graphs describe how data moves in a computing unit, be it a machine or a cloud. Within the graph, nodes represent mathematical operations while edges symbolize the tensors. TensorFlow is highly scalable and allows for computations across multiple CPUs or GPUs, making it appropriate for various tasks - be it server-side game development or research. + +Learn more from the following resources: + +- [@article@Tutorials | TensorFlow Core - TensorFlow](https://www.tensorflow.org/tutorials) +- [@article@TensorFlow – What Is It and Why Does It Matter? - NVIDIA](https://www.nvidia.com/en-au/glossary/tensorflow/) +- [@article@Ultimate Guide to the TensorFlow Library in Python - Deepnote](https://deepnote.com/blog/ultimate-guide-to-the-tensorflow-library-in-python) diff --git a/src/data/roadmaps/server-side-game-developer/content/thread-building-block-c@tiG0mZpLJ2zUr2IPYyhnv.md b/src/data/roadmaps/server-side-game-developer/content/thread-building-block-c@tiG0mZpLJ2zUr2IPYyhnv.md index d83ec4d1cc6e..0e2a79d53860 100644 --- a/src/data/roadmaps/server-side-game-developer/content/thread-building-block-c@tiG0mZpLJ2zUr2IPYyhnv.md +++ b/src/data/roadmaps/server-side-game-developer/content/thread-building-block-c@tiG0mZpLJ2zUr2IPYyhnv.md @@ -1,3 +1,8 @@ # Thread Building Block (C++) -The **Thread Building Blocks** (TBB) is an open-source C++ library developed by Intel. It is designed to take advantage of multi-core processors by simplifying the process of deploying parallel tasks. Using TBB, you can easily break down your tasks into smaller sub-tasks that can be processed in parallel, improving the speed and efficiency of your game server. TBB encompasses generic parallel algorithms, concurrent containers, a scalable memory allocator, work-stealing task scheduler, and low-level synchronization primitives. However, it's not a library for threading as POSIX or Win32 threads, rather, it's a higher-level, task-based parallelism that abstracts platform details and threading mechanism for performance and scalability. \ No newline at end of file +The **Thread Building Blocks** (TBB) is an open-source C++ library developed by Intel. It is designed to take advantage of multi-core processors by simplifying the process of deploying parallel tasks. Using TBB, you can easily break down your tasks into smaller sub-tasks that can be processed in parallel, improving the speed and efficiency of your game server. TBB encompasses generic parallel algorithms, concurrent containers, a scalable memory allocator, work-stealing task scheduler, and low-level synchronization primitives. However, it's not a library for threading as POSIX or Win32 threads, rather, it's a higher-level, task-based parallelism that abstracts platform details and threading mechanism for performance and scalability. +Learn more from the following resources: + +- [@article@Getting Started with Intel Threading Building Blocks - Intel](https://www.intel.com/content/www/us/en/developer/articles/guide/get-started-with-tbb.html) +- [@repository@oneAPI Threading Building Blocks (oneTBB) - GitHub](https://github.com/uxlfoundation/oneTBB) +- [@article@Intel oneAPI Threading Building Blocks - Intel](https://www.intel.com/content/www/us/en/developer/tools/oneapi/onetbb.html) diff --git a/src/data/roadmaps/server-side-game-developer/content/thread-local-storage@IeD-oQ1bkwlKNC-R0lJjZ.md b/src/data/roadmaps/server-side-game-developer/content/thread-local-storage@IeD-oQ1bkwlKNC-R0lJjZ.md index 738a423e5a7b..9356d7367910 100644 --- a/src/data/roadmaps/server-side-game-developer/content/thread-local-storage@IeD-oQ1bkwlKNC-R0lJjZ.md +++ b/src/data/roadmaps/server-side-game-developer/content/thread-local-storage@IeD-oQ1bkwlKNC-R0lJjZ.md @@ -1,3 +1,9 @@ # Thread Local Storage -`Thread Local Storage (TLS)` is a mechanism by which variables are allocated such that each thread gets its own individually allocated variable, but the name of the variable is the same in each thread. In other words, the same variable can simultaneously hold different values for different threads. TLS is required when you need to use a global or static variable in a thread-safe manner but the data must be unique to each thread. TLS can be used in many applications, but it is particularly useful for storing per-thread state in server applications. \ No newline at end of file +`Thread Local Storage (TLS)` is a mechanism by which variables are allocated such that each thread gets its own individually allocated variable, but the name of the variable is the same in each thread. In other words, the same variable can simultaneously hold different values for different threads. TLS is required when you need to use a global or static variable in a thread-safe manner but the data must be unique to each thread. TLS can be used in many applications, but it is particularly useful for storing per-thread state in server applications. + +Learn more from the following resources: + +- [@article@Thread-local storage - Wikipedia](https://en.wikipedia.org/wiki/Thread-local_storage) +- [@article@Thread Local Storage - Win32 apps - Microsoft Learn](https://learn.microsoft.com/en-us/windows/win32/procthread/thread-local-storage) +- [@article@All about thread-local storage - MaskRay](https://maskray.me/blog/2021-02-14-all-about-thread-local-storage) \ No newline at end of file diff --git a/src/data/roadmaps/server-side-game-developer/content/timestamp@6KAYNPLEFMp6Jha8FLMAU.md b/src/data/roadmaps/server-side-game-developer/content/timestamp@6KAYNPLEFMp6Jha8FLMAU.md index f77c79db467f..02511073a817 100644 --- a/src/data/roadmaps/server-side-game-developer/content/timestamp@6KAYNPLEFMp6Jha8FLMAU.md +++ b/src/data/roadmaps/server-side-game-developer/content/timestamp@6KAYNPLEFMp6Jha8FLMAU.md @@ -1,3 +1,9 @@ # Timestamp -A `timestamp` in server side game development is essentially a sequence of characters, encoding the date and time at which a certain event occurred. This data is particularly significant when tracking the sequence of certain events, debugging issues, logging, and when performing any sort of data analysis. The timestamp is typically generated by the server and it reflects the server's current date and time. For instance, you might find it in a server log file, indicating when each event occurred, or in a database row, showing when each row was created or last updated. Timestamps are often included in the HTTP headers to let the client know when the resource was last modified. \ No newline at end of file +A `timestamp` in server side game development is essentially a sequence of characters, encoding the date and time at which a certain event occurred. This data is particularly significant when tracking the sequence of certain events, debugging issues, logging, and when performing any sort of data analysis. The timestamp is typically generated by the server and it reflects the server's current date and time. For instance, you might find it in a server log file, indicating when each event occurred, or in a database row, showing when each row was created or last updated. Timestamps are often included in the HTTP headers to let the client know when the resource was last modified. + +Learn more from the following resources: + +- [@article@Unix time - Wikipedia](https://en.wikipedia.org/wiki/Unix_time) +- [@article@Best practices for timestamps and time zones in databases - Tinybird](https://www.tinybird.co/blog/database-timestamps-timezones) +- [@article@A Practical Guide to Timezones for Developers - Ryan Thomson](https://www.ryanthomson.net/articles/practical-guide-timezones/) \ No newline at end of file diff --git a/src/data/roadmaps/server-side-game-developer/content/tls@FX8ASd-QzTUFDHzBB93WK.md b/src/data/roadmaps/server-side-game-developer/content/tls@FX8ASd-QzTUFDHzBB93WK.md index 171e4e69110c..7495db6d627a 100644 --- a/src/data/roadmaps/server-side-game-developer/content/tls@FX8ASd-QzTUFDHzBB93WK.md +++ b/src/data/roadmaps/server-side-game-developer/content/tls@FX8ASd-QzTUFDHzBB93WK.md @@ -1 +1,7 @@ -# Tls \ No newline at end of file +# Tls + +Learn more from the following resources: + +- [@article@The TLS Handshake Explained - Auth0](https://auth0.com/blog/the-tls-handshake-explained/) +- [@article@Transport Layer Security (TLS) - MDN Web Docs](https://developer.mozilla.org/en-US/docs/Web/Security/Defenses/Transport_Layer_Security) +- [@article@What is Transport Layer Security (TLS)? A Complete Guide - Codecademy](https://www.codecademy.com/article/transport-layer-security) \ No newline at end of file diff --git a/src/data/roadmaps/server-side-game-developer/content/toml@l8iEC3g0ICSfmIE1MxcUl.md b/src/data/roadmaps/server-side-game-developer/content/toml@l8iEC3g0ICSfmIE1MxcUl.md index 44cdf2ee6d21..e59c98519405 100644 --- a/src/data/roadmaps/server-side-game-developer/content/toml@l8iEC3g0ICSfmIE1MxcUl.md +++ b/src/data/roadmaps/server-side-game-developer/content/toml@l8iEC3g0ICSfmIE1MxcUl.md @@ -1,3 +1,9 @@ # TOML -`TOML`, which stands for Tom's Obvious, Minimal Language, is a configuration file format that is easy to read due to its straightforward and simple syntax. The language is designed to be unambiguous and lean, intending to make it easy for a machine to parse. It supports basic data types, such as Integer, String, Boolean, and Float, Date-Time, Array, and Table. Unlike other similar file formats, `TOML` provides a more structured hierarchy. You can use `TOML` for configuration, serialization, and other similar tasks in game development. \ No newline at end of file +`TOML`, which stands for Tom's Obvious, Minimal Language, is a configuration file format that is easy to read due to its straightforward and simple syntax. The language is designed to be unambiguous and lean, intending to make it easy for a machine to parse. It supports basic data types, such as Integer, String, Boolean, and Float, Date-Time, Array, and Table. Unlike other similar file formats, `TOML` provides a more structured hierarchy. You can use `TOML` for configuration, serialization, and other similar tasks in game development. + +Learn more from the following resources: + +- [@article@TOML: Tom's Obvious Minimal Language](https://toml.io/en/) +- [@article@Learn TOML in Y Minutes](https://learnxinyminutes.com/toml/) +- [@article@Tom's Obvious Minimal Language - GitHub](https://github.com/toml-lang/toml) \ No newline at end of file diff --git a/src/data/roadmaps/server-side-game-developer/content/transactions@r2OeI7YC1BLLfctC8q69W.md b/src/data/roadmaps/server-side-game-developer/content/transactions@r2OeI7YC1BLLfctC8q69W.md index e9ee82d5d3b8..41b6bbacfcda 100644 --- a/src/data/roadmaps/server-side-game-developer/content/transactions@r2OeI7YC1BLLfctC8q69W.md +++ b/src/data/roadmaps/server-side-game-developer/content/transactions@r2OeI7YC1BLLfctC8q69W.md @@ -1,3 +1,9 @@ # Transactions -In server-side game development, **transactions** are critical elements that facilitate the exchange or interaction between different processes and data streams. These are usually carried out via a database or a server and are atomically treated as a single unit of work, ensuring data consistency and integrity. Transactions follow a specific pattern known as ACID (Atomicity, Consistency, Isolation, Durability) which makes sure that all intended operations within a transaction are successfully performed or none of them are, preventing disruptions in the event of an error or failure. It also ensures that concurrent execution of transactions results in a system state that would be achieved if transactions were executed sequentially. It's important for a server-side game developer to understand how to manage and control transactions to maintain the robustness of the game's backend system. \ No newline at end of file +In server-side game development, **transactions** are critical elements that facilitate the exchange or interaction between different processes and data streams. These are usually carried out via a database or a server and are atomically treated as a single unit of work, ensuring data consistency and integrity. Transactions follow a specific pattern known as ACID (Atomicity, Consistency, Isolation, Durability) which makes sure that all intended operations within a transaction are successfully performed or none of them are, preventing disruptions in the event of an error or failure. It also ensures that concurrent execution of transactions results in a system state that would be achieved if transactions were executed sequentially. It's important for a server-side game developer to understand how to manage and control transactions to maintain the robustness of the game's backend system. + +Learn more from the following resources: + +- [@article@ACID Transactions in DBMS Explained - MongoDB](https://www.mongodb.com/resources/basics/databases/acid-transactions) +- [@article@A Guide to Database Transactions: From ACID to Concurrency Control - ByteByteGo](https://blog.bytebytego.com/p/a-guide-to-database-transactions) +- [@article@A beginner's guide to ACID and database transactions - Vlad Mihalcea](https://vladmihalcea.com/a-beginners-guide-to-acid-and-database-transactions/) \ No newline at end of file diff --git a/src/data/roadmaps/server-side-game-developer/content/udp@IMyHwnXxJK6oFxzOMLxjS.md b/src/data/roadmaps/server-side-game-developer/content/udp@IMyHwnXxJK6oFxzOMLxjS.md index 353887071df6..a8370d65fdea 100644 --- a/src/data/roadmaps/server-side-game-developer/content/udp@IMyHwnXxJK6oFxzOMLxjS.md +++ b/src/data/roadmaps/server-side-game-developer/content/udp@IMyHwnXxJK6oFxzOMLxjS.md @@ -1,3 +1,9 @@ # UDP -`UDP`, or User Datagram Protocol, is a communications protocol that sends data over the internet. Unlike TCP (Transmission Control Protocol), it's a connectionless protocol that doesn't ensure data packet delivery. It transmits datagrams – an independent, discrete packet of data – without first establishing a proper handshake between the sender and the receiver. The sender doesn't wait for an acknowledgment after sending a datagram, and the receiver doesn't send any acknowledgment upon receiving a datagram. This makes UDP faster but less reliable than TCP. UDP is used for time-sensitive transmissions where dropped packets are acceptable, such as in live video streaming, voice over IP (VoIP), and online multiplayer gaming. \ No newline at end of file +`UDP`, or User Datagram Protocol, is a communications protocol that sends data over the internet. Unlike TCP (Transmission Control Protocol), it's a connectionless protocol that doesn't ensure data packet delivery. It transmits datagrams – an independent, discrete packet of data – without first establishing a proper handshake between the sender and the receiver. The sender doesn't wait for an acknowledgment after sending a datagram, and the receiver doesn't send any acknowledgment upon receiving a datagram. This makes UDP faster but less reliable than TCP. UDP is used for time-sensitive transmissions where dropped packets are acceptable, such as in live video streaming, voice over IP (VoIP), and online multiplayer gaming. + +Learn more from the following resources: + +- [@article@User Datagram Protocol (UDP) - Beej's Guide to Network Concepts](https://beej.us/guide/bgnet0/html/split/user-datagram-protocol-udp.html) +- [@article@What Is User Datagram Protocol (UDP)? - emnify](https://www.emnify.com/blog/udp) +- [@article@What is UDP (User Datagram Protocol)? - IPCisco](https://ipcisco.com/lesson/udp-user-datagram-protocol/) diff --git a/src/data/roadmaps/server-side-game-developer/content/update-process@3Eat22rFjUl4eTtGz8u4N.md b/src/data/roadmaps/server-side-game-developer/content/update-process@3Eat22rFjUl4eTtGz8u4N.md index 6a2bc138034a..a67f25ece22c 100644 --- a/src/data/roadmaps/server-side-game-developer/content/update-process@3Eat22rFjUl4eTtGz8u4N.md +++ b/src/data/roadmaps/server-side-game-developer/content/update-process@3Eat22rFjUl4eTtGz8u4N.md @@ -1,3 +1,9 @@ # Update Process -In the reactive model, the client sends requests to the server, which then processes the request and sends back a response. This model is called 'reactive' because the server only acts or 'reacts' when it receives a request from the client. The "update process" plays a vital role in this model. It's the server's responsibility to keep the game world updated and synchronized among all players. This updating process is typically done in a loop that processes all the changes that happen in the game like players’ actions, NPC movements, in-game events or game physics. It updates the game world and informs the players about the changes. Also, if a player makes changes like moving a character or attacking an enemy, it sends this information to the server adding it to the update loop. The frequency of this updating process is often referred to as 'tick rate'. \ No newline at end of file +In the reactive model, the client sends requests to the server, which then processes the request and sends back a response. This model is called 'reactive' because the server only acts or 'reacts' when it receives a request from the client. The "update process" plays a vital role in this model. It's the server's responsibility to keep the game world updated and synchronized among all players. This updating process is typically done in a loop that processes all the changes that happen in the game like players’ actions, NPC movements, in-game events or game physics. It updates the game world and informs the players about the changes. Also, if a player makes changes like moving a character or attacking an enemy, it sends this information to the server adding it to the update loop. The frequency of this updating process is often referred to as 'tick rate'. + +Learn more from the following resources: + +- [@article@Game Server Tick Rate Explained: Gameplay Precision vs Infrastructure Cost - Edgegap](https://edgegap.com/blog/game-server-tick-rate-explained-gameplay-precision-vs-infrastructure-cost) +- [@article@Tick and update rates - Unity Netcode for GameObjects](https://docs.unity3d.com/Packages/com.unity.netcode.gameobjects@2.4/manual/learn/ticks-and-update-rates.html) +- [@article@Game Loop - Game Programming Patterns](https://gameprogrammingpatterns.com/game-loop.html) \ No newline at end of file diff --git a/src/data/roadmaps/server-side-game-developer/content/veto@ZLTfpRZ0rF-mtd7Z0R2WF.md b/src/data/roadmaps/server-side-game-developer/content/veto@ZLTfpRZ0rF-mtd7Z0R2WF.md index 18e29ce6bd10..655330ab85a4 100644 --- a/src/data/roadmaps/server-side-game-developer/content/veto@ZLTfpRZ0rF-mtd7Z0R2WF.md +++ b/src/data/roadmaps/server-side-game-developer/content/veto@ZLTfpRZ0rF-mtd7Z0R2WF.md @@ -1,3 +1,9 @@ # Veto -`Veto` is often used in multiplayer games to prevent or allow certain actions during the game. For instance, players can issue commands to block specific actions from their opponents. As a server-side game developer, you must ensure security measures are in place to validate the authenticity of these commands to safeguard against potential vulnerability. A veto vulnerability can occur when malicious players manipulate veto commands to their advantage or disrupt the game, which can lead to an unfair gaming environment or even crash the server. Therefore, your code should always verify who is sending veto commands and check the validity of these commands. \ No newline at end of file +`Veto` is often used in multiplayer games to prevent or allow certain actions during the game. For instance, players can issue commands to block specific actions from their opponents. As a server-side game developer, you must ensure security measures are in place to validate the authenticity of these commands to safeguard against potential vulnerability. A veto vulnerability can occur when malicious players manipulate veto commands to their advantage or disrupt the game, which can lead to an unfair gaming environment or even crash the server. Therefore, your code should always verify who is sending veto commands and check the validity of these commands. + +Learn more from the following resources: + +- [@article@OWASP Game Security Framework](https://owasp.org/www-project-gamesec-framework/OGSF) +- [@article@Validating User Actions on the Server - GameDev Stack Exchange](https://gamedev.stackexchange.com/questions/101290/validating-user-actions-on-the-server) +- [@article@Using the Anti-Cheat Interfaces - Epic Games Developers](https://dev.epicgames.com/docs/game-services/anti-cheat/using-anti-cheat) \ No newline at end of file diff --git a/src/data/roadmaps/server-side-game-developer/content/vulnerability@MwLWDlciJOq_0n5S3GoF-.md b/src/data/roadmaps/server-side-game-developer/content/vulnerability@MwLWDlciJOq_0n5S3GoF-.md index b7009f8794f2..2315e79a6231 100644 --- a/src/data/roadmaps/server-side-game-developer/content/vulnerability@MwLWDlciJOq_0n5S3GoF-.md +++ b/src/data/roadmaps/server-side-game-developer/content/vulnerability@MwLWDlciJOq_0n5S3GoF-.md @@ -1,3 +1,9 @@ # Vulnerability -`TCP` (Transmission Control Protocol) is an important protocol known for its reliability in delivering data packets, but it also has several vulnerabilities. The most significant weakness is TCP’s susceptibility to a variety of **Denial-of-Service (DoS)** attacks, such as TCP SYN flood attacks, where an attacker sends a succession of SYN requests to a target's system in an attempt to consume server resources to make the system unresponsive. Additionally, sequence prediction can be exploited where an attacker can predict the sequence number of TCP packets to hijack the TCP session. There are also risks of IP spoofing, where an attacker can forge the IP address in the TCP packet header and pretend to be another user in the network. These vulnerabilities may expose sensitive information, disrupt normal functions or allow unauthorized access, especially in the context of a server-side game developer dealing with potentially large volumes of traffic. \ No newline at end of file +`TCP` (Transmission Control Protocol) is an important protocol known for its reliability in delivering data packets, but it also has several vulnerabilities. The most significant weakness is TCP’s susceptibility to a variety of **Denial-of-Service (DoS)** attacks, such as TCP SYN flood attacks, where an attacker sends a succession of SYN requests to a target's system in an attempt to consume server resources to make the system unresponsive. Additionally, sequence prediction can be exploited where an attacker can predict the sequence number of TCP packets to hijack the TCP session. There are also risks of IP spoofing, where an attacker can forge the IP address in the TCP packet header and pretend to be another user in the network. These vulnerabilities may expose sensitive information, disrupt normal functions or allow unauthorized access, especially in the context of a server-side game developer dealing with potentially large volumes of traffic. + +Learn more from the following resources: + +- [@article@What is a TCP SYN Flood | Mitigation Techniques - Imperva](https://www.imperva.com/learn/ddos/syn-flood/) +- [@article@What Are TCP SYN Flood DDOS Attacks & 6 Ways to Stop Them - Radware](https://www.radware.com/security/ddos-knowledge-center/ddospedia/tcp-flood/) +- [@article@What is a Distributed Denial-of-Service (DDoS) attack? - IBM](https://www.ibm.com/think/topics/ddos) \ No newline at end of file diff --git a/src/data/roadmaps/server-side-game-developer/content/window-scaling@zvBKjceXRSfEe_3MDCEL5.md b/src/data/roadmaps/server-side-game-developer/content/window-scaling@zvBKjceXRSfEe_3MDCEL5.md index 012574172f17..c7a4395ee39a 100644 --- a/src/data/roadmaps/server-side-game-developer/content/window-scaling@zvBKjceXRSfEe_3MDCEL5.md +++ b/src/data/roadmaps/server-side-game-developer/content/window-scaling@zvBKjceXRSfEe_3MDCEL5.md @@ -1,3 +1,8 @@ # Window Scaling -Window Scaling is a mechanism in the Transmission Control Protocol (TCP) that provides support for larger receiver window sizes beyond the maximum limit of 65,535 bytes. This TCP feature is essential when dealing with high latency or high bandwidth networks (common in server-side game development), where frames might be significantly delayed or rapidly transmitted. The window size initially specified in the TCP header is augmented via a scale factor (defined during the connection setup), allowing the receiver window size to be as large as 1 gigabyte. However, keep in mind that Window Scaling can only be employed at the connection setup stage; once the connection is established, the scaling factor cannot be changed. \ No newline at end of file +Window Scaling is a mechanism in the Transmission Control Protocol (TCP) that provides support for larger receiver window sizes beyond the maximum limit of 65,535 bytes. This TCP feature is essential when dealing with high latency or high bandwidth networks (common in server-side game development), where frames might be significantly delayed or rapidly transmitted. The window size initially specified in the TCP header is augmented via a scale factor (defined during the connection setup), allowing the receiver window size to be as large as 1 gigabyte. However, keep in mind that Window Scaling can only be employed at the connection setup stage; once the connection is established, the scaling factor cannot be changed. +Learn more from the following resources: + +- [@article@TCP Window Size Scaling - NetworkLessons](https://networklessons.com/network-fundamentals/tcp-window-size-scaling) +- [@article@What is TCP Window Scaling? - GeeksforGeeks](https://www.geeksforgeeks.org/what-is-tcp-window-scaling/) +- [@article@RFC 7323 - TCP Extensions for High Performance - IETF](https://datatracker.ietf.org/doc/html/rfc7323) diff --git a/src/data/roadmaps/server-side-game-developer/content/windows@mW2L_9NckgPRH7g5W9NHq.md b/src/data/roadmaps/server-side-game-developer/content/windows@mW2L_9NckgPRH7g5W9NHq.md index 4cd7a5dbfd22..810d63ce056d 100644 --- a/src/data/roadmaps/server-side-game-developer/content/windows@mW2L_9NckgPRH7g5W9NHq.md +++ b/src/data/roadmaps/server-side-game-developer/content/windows@mW2L_9NckgPRH7g5W9NHq.md @@ -1,3 +1,8 @@ # Windows -In the context of server-side game development, Windows operating system offers an API for Thread Local Storage (TLS). This refers to a mechanism by which variables are allocated that are unique for each thread in a program. When a thread reads from or writes to a TLS index, it is actually referencing a thread-specific memory block. This memory block is dynamically allocated from the system heap when the thread is created and subsequently freed up when the thread is terminated. This management of memory is done implicitly by the system which can reduce complexity for developers. \ No newline at end of file +In the context of server-side game development, Windows operating system offers an API for Thread Local Storage (TLS). This refers to a mechanism by which variables are allocated that are unique for each thread in a program. When a thread reads from or writes to a TLS index, it is actually referencing a thread-specific memory block. This memory block is dynamically allocated from the system heap when the thread is created and subsequently freed up when the thread is terminated. This management of memory is done implicitly by the system which can reduce complexity for developers. +Learn more from the following resources: + +- [@article@Windows Game Development Guide - Microsoft Learn](https://learn.microsoft.com/en-us/windows/uwp/gaming/e2e) +- [@article@How to Set Up a Dedicated Game Server - Intel](https://www.intel.com/content/www/us/en/gaming/resources/game-server.html) +- [@article@Game Development Kit (GDK) Documentation - Microsoft Learn](https://learn.microsoft.com/en-us/gaming/gdk/) diff --git a/src/data/roadmaps/server-side-game-developer/content/winsock@GfTXffisLyQgp66zcQ7Py.md b/src/data/roadmaps/server-side-game-developer/content/winsock@GfTXffisLyQgp66zcQ7Py.md index 2be700b51f4b..4ef3ae31b453 100644 --- a/src/data/roadmaps/server-side-game-developer/content/winsock@GfTXffisLyQgp66zcQ7Py.md +++ b/src/data/roadmaps/server-side-game-developer/content/winsock@GfTXffisLyQgp66zcQ7Py.md @@ -1,3 +1,8 @@ # Winsock -`Winsock` is an acronym for Windows Sockets API, a technical specification that defines how networking software should interact with TCP/IP network protocols, such as TCP, UDP, and ICMP, on a Windows Operating System. Essentially, Winsock provides an interface for developers to use when they need to write network applications. This API provides functionalities to create a socket, bind it to a specific address, listen to incoming connections, send and receive data, and finally, close the connection. Winsock also aids in handling network errors and exceptions. For developing multiplayer server-side games, it is useful in managing client-server communications, multiplayer logic, and real-time updates. Note that in the gaming context, the Winsock library is typically used for real-time, high-performance applications due to its low-level access to the TCP/IP stack. \ No newline at end of file +`Winsock` is an acronym for Windows Sockets API, a technical specification that defines how networking software should interact with TCP/IP network protocols, such as TCP, UDP, and ICMP, on a Windows Operating System. Essentially, Winsock provides an interface for developers to use when they need to write network applications. This API provides functionalities to create a socket, bind it to a specific address, listen to incoming connections, send and receive data, and finally, close the connection. Winsock also aids in handling network errors and exceptions. For developing multiplayer server-side games, it is useful in managing client-server communications, multiplayer logic, and real-time updates. Note that in the gaming context, the Winsock library is typically used for real-time, high-performance applications due to its low-level access to the TCP/IP stack. +Learn more from the following resources: + +- [@article@Getting Started with Winsock - Microsoft Learn](https://learn.microsoft.com/en-us/windows/win32/winsock/getting-started-with-winsock) +- [@article@Winsock Functions - Microsoft Learn](https://learn.microsoft.com/en-us/windows/win32/winsock/winsock-functions) +- [@article@Porting Socket Applications to Winsock - Microsoft Learn](https://learn.microsoft.com/en-us/windows/win32/winsock/porting-socket-applications-to-winsock) diff --git a/src/data/roadmaps/server-side-game-developer/content/wsa-poll@D9Yeyn8phDhB1ohMWccgr.md b/src/data/roadmaps/server-side-game-developer/content/wsa-poll@D9Yeyn8phDhB1ohMWccgr.md index 883438be6212..1009302bc76e 100644 --- a/src/data/roadmaps/server-side-game-developer/content/wsa-poll@D9Yeyn8phDhB1ohMWccgr.md +++ b/src/data/roadmaps/server-side-game-developer/content/wsa-poll@D9Yeyn8phDhB1ohMWccgr.md @@ -8,6 +8,9 @@ connections. However, it is generally less efficient than `epoll` on Linux due t scanning mechanism. For high-performance game servers on Windows, IOCP (I/O Completion Ports) is often preferred over `WSA-Poll`. -Visit the following resources to learn more: +Learn more from the following resources: -- [@documentation@Microsoft WSA-Poll Documentation](https://learn.microsoft.com/en-us/windows/win32/api/winsock2/nf-winsock2-wsapoll) \ No newline at end of file +- [@documentation@Microsoft WSA-Poll Documentation](https://learn.microsoft.com/en-us/windows/win32/api/winsock2/nf-winsock2-wsapoll) +- [@article@WSAPoll is Broken - Daniel Stenberg](https://daniel.haxx.se/blog/2012/10/10/wsapoll-is-broken/) +- [@article@WSAPOLLFD Structure - Microsoft Learn](https://learn.microsoft.com/en-us/windows/win32/api/winsock2/ns-winsock2-wsapollfd) +- [@article@WSAPoll Sample Code - Microsoft Windows Classic Samples](https://github.com/microsoft/Windows-classic-samples/blob/main/Samples/Win7Samples/netds/winsock/wsapoll/poll.cpp) diff --git a/src/data/roadmaps/server-side-game-developer/content/xml@v43K6srds7m5SQFqNaY0T.md b/src/data/roadmaps/server-side-game-developer/content/xml@v43K6srds7m5SQFqNaY0T.md index f0f6c533533b..476f4c0195ba 100644 --- a/src/data/roadmaps/server-side-game-developer/content/xml@v43K6srds7m5SQFqNaY0T.md +++ b/src/data/roadmaps/server-side-game-developer/content/xml@v43K6srds7m5SQFqNaY0T.md @@ -1,3 +1,8 @@ # XML -XML, or Extensible Markup Language, is a language designed to store and transport data without being dependent on a particular software or hardware. Unlike HTML which displays data and focuses on how data looks, XML works as a tool to transfer data and emphasizes on what the data is. XML data is known as self-describing or self-defining, as it has the ability to define and describe the structure and data types itself. It uses tags just like HTML, but the tags in XML are not predefined; it allows the author to define his/her own tags and document structure. XML also supports Unicode, allowing almost any information in any human language to be communicated. It adheres to a strict syntax and is both human-readable and machine-readable, making it a widely used standard in web and server-side development. \ No newline at end of file +XML, or Extensible Markup Language, is a language designed to store and transport data without being dependent on a particular software or hardware. Unlike HTML which displays data and focuses on how data looks, XML works as a tool to transfer data and emphasizes on what the data is. XML data is known as self-describing or self-defining, as it has the ability to define and describe the structure and data types itself. It uses tags just like HTML, but the tags in XML are not predefined; it allows the author to define his/her own tags and document structure. XML also supports Unicode, allowing almost any information in any human language to be communicated. It adheres to a strict syntax and is both human-readable and machine-readable, making it a widely used standard in web and server-side development. +Learn more from the following resources: + +- [@article@XML Tutorial - W3Schools](https://www.w3schools.com/xml/) +- [@article@XML Tutorial - GeeksforGeeks](https://www.geeksforgeeks.org/html/xml-tutorial/) +- [@article@What is XML? Complete Guide - Codecademy](https://www.codecademy.com/resources/blog/what-is-xml-used-for) diff --git a/src/data/roadmaps/server-side-game-developer/content/yaml@uHcUSVLz_2-Usk6ckSvwr.md b/src/data/roadmaps/server-side-game-developer/content/yaml@uHcUSVLz_2-Usk6ckSvwr.md index 87b604ce47ad..a32218e7d4d0 100644 --- a/src/data/roadmaps/server-side-game-developer/content/yaml@uHcUSVLz_2-Usk6ckSvwr.md +++ b/src/data/roadmaps/server-side-game-developer/content/yaml@uHcUSVLz_2-Usk6ckSvwr.md @@ -1,3 +1,8 @@ # YAML -YAML, which stands for "YAML Ain't Markup Language," is a human-readable data serialization standard that can be used in conjunction with all programming languages. It is often used to write configuration files and in applications where data is being stored or transmitted. YAML supports advanced features like referencing, merging, arrays and dictionaries. Also, it is flexible and supports various data structures like scalars, sequences, associative arrays. Though it might seem similar to JSON and XML, it focuses on data serialization rather than marking up documents, and ensures readability for humans. It uses a whitespace indentation to denote structure, which can simplify file format complexities. \ No newline at end of file +YAML, which stands for "YAML Ain't Markup Language," is a human-readable data serialization standard that can be used in conjunction with all programming languages. It is often used to write configuration files and in applications where data is being stored or transmitted. YAML supports advanced features like referencing, merging, arrays and dictionaries. Also, it is flexible and supports various data structures like scalars, sequences, associative arrays. Though it might seem similar to JSON and XML, it focuses on data serialization rather than marking up documents, and ensures readability for humans. It uses a whitespace indentation to denote structure, which can simplify file format complexities. +Learn more from the following resources: + +- [@article@YAML Tutorial: A Complete Language Guide - Spacelift](https://spacelift.io/blog/yaml) +- [@article@YAML for Beginners - Red Hat](https://www.redhat.com/en/blog/yaml-beginners) +- [@article@What is YAML? A Beginner's Guide - CircleCI](https://circleci.com/blog/what-is-yaml-a-beginner-s-guide/) From 052d2f86a28aebe9a803ee1c1dea6211c9e0c3c0 Mon Sep 17 00:00:00 2001 From: nehaturov-hue Date: Fri, 22 May 2026 19:12:45 +0200 Subject: [PATCH 2/3] fix: replace all GeeksforGeeks links with alternatives Replaced 25 GFG links across 23 files with alternatives from: - IBM Think, IBM Docs - Microsoft Learn - Wikipedia - IETF RFCs - MDN - TutorialsPoint - Node.js Docs - MongoDB Docs Contributing.md compliance: zero GFG links, all files 3-8 links, zero duplicates. --- .../content/python@XyRCXhZjQFcDNaUSNNQV-.md | 1 - .../content/congestion-control@jsNsyrGzegVnjIF2l52vI.md | 2 +- .../content/couchbase@6KTj_giX2k9l2lPd_Fp-d.md | 2 +- .../content/data-clustering@XCJvgUSS7-oDR-XGdDY33.md | 2 +- .../content/datagram-construction@jnQAzUUnwpJgoRuRIFtSe.md | 2 +- .../content/deep-learning@jkWvfp4GqckYPQ48GtjlR.md | 2 +- .../content/error-detection@vFM311xSa5OqNVove2f6j.md | 4 ++-- .../content/functional-programming@HXSWvhgT4L5w6xgOO-3kj.md | 2 +- .../content/heavy-vs-lightweight@OYXKtl4A-vaK6yGO6hS6n.md | 2 +- .../content/ip-addressing@3ZcJNDCHw2pFzewmoB-03.md | 2 +- .../content/ip@tg94V7K0mgYhpkUMp_Scv.md | 2 +- .../content/ipv4@pHVB0K8Vtk3ToD6n_f1wv.md | 2 +- .../content/message-queues@cw7WdFfL5HpeZ_n8wYk2t.md | 2 +- .../content/mutex@G_BEJKkJ1_Nc43aosy_iS.md | 2 +- .../content/mysql@HsBqd08Ro0VJnx0FlumMQ.md | 2 +- .../content/reactor@7mYpgn2gr-5vAYW-UR7_x.md | 2 +- .../content/reliability@Vh81GnOUOZvDOlOyI5PwT.md | 2 +- .../content/reliable-transmission@X2KHWgQZDHSVDsTRMUwSj.md | 4 ++-- .../content/segment-structure@zTCmPUp9j5P1wpGgiboMa.md | 2 +- .../content/semaphore@DYvzGc_r0SlOArPPc1gNI.md | 2 +- .../content/sharding@3use5vuLBJTk40wOg9S-X.md | 2 +- .../content/spinlock@lVXfA_oZr82mFfBvLnnRK.md | 2 +- .../content/window-scaling@zvBKjceXRSfEe_3MDCEL5.md | 2 +- .../content/xml@v43K6srds7m5SQFqNaY0T.md | 2 +- 24 files changed, 25 insertions(+), 26 deletions(-) diff --git a/src/data/roadmaps/datastructures-and-algorithms/content/python@XyRCXhZjQFcDNaUSNNQV-.md b/src/data/roadmaps/datastructures-and-algorithms/content/python@XyRCXhZjQFcDNaUSNNQV-.md index 6fac424d5ac3..b9a492345be0 100644 --- a/src/data/roadmaps/datastructures-and-algorithms/content/python@XyRCXhZjQFcDNaUSNNQV-.md +++ b/src/data/roadmaps/datastructures-and-algorithms/content/python@XyRCXhZjQFcDNaUSNNQV-.md @@ -11,5 +11,4 @@ Visit the following resources to learn more: - [@article@Python principles - Python basics](https://pythonprinciples.com/) - [@article@Python Crash Course](https://ehmatthes.github.io/pcc/) - [@article@An Introduction to Python for Non-Programmers](https://thenewstack.io/an-introduction-to-python-for-non-programmers/) -- [@article@Getting Started with Python and InfluxDB](https://thenewstack.io/getting-started-with-python-and-influxdb/) - [@feed@Explore top posts about Python](https://app.daily.dev/tags/python?ref=roadmapsh) \ No newline at end of file diff --git a/src/data/roadmaps/server-side-game-developer/content/congestion-control@jsNsyrGzegVnjIF2l52vI.md b/src/data/roadmaps/server-side-game-developer/content/congestion-control@jsNsyrGzegVnjIF2l52vI.md index bb334c09c5fa..7ce685b5e6e0 100644 --- a/src/data/roadmaps/server-side-game-developer/content/congestion-control@jsNsyrGzegVnjIF2l52vI.md +++ b/src/data/roadmaps/server-side-game-developer/content/congestion-control@jsNsyrGzegVnjIF2l52vI.md @@ -3,6 +3,6 @@ `Congestion Control` is a critical feature of TCP, but not inherently a part of UDP. The primary purpose of congestion control is to prevent too much data from being sent into the network such that it can't handle the traffic, leading to packet loss. TCP's congestion control mechanism adjusts the data send rate based on the perceived network congestion. UDP does not provide congestion control by itself. However, this does not mean congestion control can't be implemented if you're using UDP. Developers can implement a custom congestion control mechanism over UDP, but it requires substantial understanding and careful management to achieve this without creating network or server performance issues. Visit the following resources to learn more: -- [@article@Congestion Control in Computer Networks - GeeksforGeeks](https://www.geeksforgeeks.org/computer-networks/congestion-control-in-computer-networks/) +- [@article@TCP Congestion Control (RFC 2581) - IETF](https://datatracker.ietf.org/doc/html/rfc2581) - [@article@How is congestion avoided when using UDP? - Stack Exchange](https://networkengineering.stackexchange.com/questions/79588/how-is-congestion-avoided-when-using-udp) - [@article@Congestion Control - Wikipedia](https://en.wikipedia.org/wiki/Congestion_control) diff --git a/src/data/roadmaps/server-side-game-developer/content/couchbase@6KTj_giX2k9l2lPd_Fp-d.md b/src/data/roadmaps/server-side-game-developer/content/couchbase@6KTj_giX2k9l2lPd_Fp-d.md index 8eb368d357ee..860c3b7a223c 100644 --- a/src/data/roadmaps/server-side-game-developer/content/couchbase@6KTj_giX2k9l2lPd_Fp-d.md +++ b/src/data/roadmaps/server-side-game-developer/content/couchbase@6KTj_giX2k9l2lPd_Fp-d.md @@ -4,5 +4,5 @@ Couchbase is a NoSQL database technology that provides flexible data models suit Visit the following resources to learn more: - [@official@Start Here! Getting Started with Couchbase - Couchbase Docs](https://docs.couchbase.com/server/current/getting-started/start-here.html) -- [@article@Introduction to Couchbase - GeeksforGeeks](https://www.geeksforgeeks.org/dbms/introduction-to-couchbase/) +- [@article@Couchbase - Wikipedia](https://en.wikipedia.org/wiki/Couchbase) - [@official@Couchbase Documentation](https://docs.couchbase.com/home/index.html) diff --git a/src/data/roadmaps/server-side-game-developer/content/data-clustering@XCJvgUSS7-oDR-XGdDY33.md b/src/data/roadmaps/server-side-game-developer/content/data-clustering@XCJvgUSS7-oDR-XGdDY33.md index 453512ec4624..f4a404444cb6 100644 --- a/src/data/roadmaps/server-side-game-developer/content/data-clustering@XCJvgUSS7-oDR-XGdDY33.md +++ b/src/data/roadmaps/server-side-game-developer/content/data-clustering@XCJvgUSS7-oDR-XGdDY33.md @@ -4,5 +4,5 @@ Visit the following resources to learn more: - [@official@Clustering - scikit-learn Documentation](https://scikit-learn.org/stable/modules/clustering.html) -- [@article@DBSCAN Clustering in ML - GeeksforGeeks](https://www.geeksforgeeks.org/machine-learning/dbscan-clustering-in-ml-density-based-clustering/) +- [@article@DBSCAN - Wikipedia](https://en.wikipedia.org/wiki/DBSCAN) - [@article@DBSCAN vs K-Means: A Guide in Python - New Horizons](https://www.newhorizons.com/resources/blog/dbscan-vs-kmeans-a-guide-in-python) diff --git a/src/data/roadmaps/server-side-game-developer/content/datagram-construction@jnQAzUUnwpJgoRuRIFtSe.md b/src/data/roadmaps/server-side-game-developer/content/datagram-construction@jnQAzUUnwpJgoRuRIFtSe.md index dded0df50410..d9a7ae935fc5 100644 --- a/src/data/roadmaps/server-side-game-developer/content/datagram-construction@jnQAzUUnwpJgoRuRIFtSe.md +++ b/src/data/roadmaps/server-side-game-developer/content/datagram-construction@jnQAzUUnwpJgoRuRIFtSe.md @@ -5,4 +5,4 @@ Learn more from the following resources: - [@article@User Datagram Protocol (UDP) Packet Header - NetworkLessons](https://networklessons.com/ip-routing/user-datagram-protocol-udp-packet-header) - [@article@User Datagram Protocol (UDP) - Khan Academy](https://www.khanacademy.org/computing/computers-and-internet/xcae6f4a7ff015e7d:the-internet/xcae6f4a7ff015e7d:transporting-packets/a/user-datagram-protocol-udp) -- [@article@User Datagram Protocol - UDP - GeeksforGeeks](https://www.geeksforgeeks.org/computer-networks/user-datagram-protocol-udp/) +- [@article@User Datagram Protocol (UDP) - IBM](https://www.ibm.com/docs/en/zos/3.1.0?topic=protocol-user-datagram-udp) diff --git a/src/data/roadmaps/server-side-game-developer/content/deep-learning@jkWvfp4GqckYPQ48GtjlR.md b/src/data/roadmaps/server-side-game-developer/content/deep-learning@jkWvfp4GqckYPQ48GtjlR.md index ca8f4541193e..831330f2ccb6 100644 --- a/src/data/roadmaps/server-side-game-developer/content/deep-learning@jkWvfp4GqckYPQ48GtjlR.md +++ b/src/data/roadmaps/server-side-game-developer/content/deep-learning@jkWvfp4GqckYPQ48GtjlR.md @@ -4,5 +4,5 @@ Deep Learning is a subset of machine learning that imitates the workings of the Learn more from the following resources: - [@article@Neural Networks — Machine Learning Crash Course - Google Developers](https://developers.google.com/machine-learning/crash-course/neural-networks) -- [@article@Introduction to Neural Networks - GeeksforGeeks](https://www.geeksforgeeks.org/deep-learning/neural-networks-a-beginners-guide/) +- [@article@What are Neural Networks? - IBM](https://www.ibm.com/think/topics/neural-networks) - [@interactive@A Neural Network Playground - TensorFlow](https://playground.tensorflow.org/) diff --git a/src/data/roadmaps/server-side-game-developer/content/error-detection@vFM311xSa5OqNVove2f6j.md b/src/data/roadmaps/server-side-game-developer/content/error-detection@vFM311xSa5OqNVove2f6j.md index 5446d29634a1..bc1963ba9e39 100644 --- a/src/data/roadmaps/server-side-game-developer/content/error-detection@vFM311xSa5OqNVove2f6j.md +++ b/src/data/roadmaps/server-side-game-developer/content/error-detection@vFM311xSa5OqNVove2f6j.md @@ -10,8 +10,8 @@ in multiplayer games, ensuring smooth gameplay and synchronization across player Visit the following resources to learn more: -- [@article@Error Detection Code – Checksum](https://www.geeksforgeeks.org/error-detection-code-checksum/) +- [@article@Checksum - Wikipedia](https://en.wikipedia.org/wiki/Checksum) - [@article@Error Control in TCP](https://www.cisco.com/c/en/us/support/docs/ip/tcp/13733-40.html) -- [@article@Error Detection in Computer Networks - GeeksforGeeks](https://www.geeksforgeeks.org/computer-networks/error-detection-in-computer-networks/) +- [@article@What is Error Detection? - IBM](https://www.ibm.com/think/topics/error-detection) - [@article@Cyclic Redundancy Check - Wikipedia](https://en.wikipedia.org/wiki/Cyclic_redundancy_check) - [@article@Detecting and Correcting Bit Errors - Princeton University](https://www.cs.princeton.edu/courses/archive/spring19/cos463/lectures/L08-error-control.pdf) diff --git a/src/data/roadmaps/server-side-game-developer/content/functional-programming@HXSWvhgT4L5w6xgOO-3kj.md b/src/data/roadmaps/server-side-game-developer/content/functional-programming@HXSWvhgT4L5w6xgOO-3kj.md index 106953fc5f3c..3179b1cdc419 100644 --- a/src/data/roadmaps/server-side-game-developer/content/functional-programming@HXSWvhgT4L5w6xgOO-3kj.md +++ b/src/data/roadmaps/server-side-game-developer/content/functional-programming@HXSWvhgT4L5w6xgOO-3kj.md @@ -5,5 +5,5 @@ Learn more from the following resources: - [@article@Functional Programming - Wikipedia](https://en.wikipedia.org/wiki/Functional_programming) -- [@article@Functional Programming Paradigm - GeeksforGeeks](https://www.geeksforgeeks.org/blogs/functional-programming-paradigm/) +- [@article@What is Functional Programming? - IBM](https://www.ibm.com/think/topics/functional-programming) - [@article@Functional Programming Concepts in F# - Microsoft](https://learn.microsoft.com/en-us/dotnet/fsharp/tutorials/functional-programming-concepts) diff --git a/src/data/roadmaps/server-side-game-developer/content/heavy-vs-lightweight@OYXKtl4A-vaK6yGO6hS6n.md b/src/data/roadmaps/server-side-game-developer/content/heavy-vs-lightweight@OYXKtl4A-vaK6yGO6hS6n.md index cf4fe2aaa71a..d406c5d7308f 100644 --- a/src/data/roadmaps/server-side-game-developer/content/heavy-vs-lightweight@OYXKtl4A-vaK6yGO6hS6n.md +++ b/src/data/roadmaps/server-side-game-developer/content/heavy-vs-lightweight@OYXKtl4A-vaK6yGO6hS6n.md @@ -6,6 +6,6 @@ On the other hand, UDP (User Datagram Protocol) is known as a "lightweight" prot Learn more from the following resources: -- [@article@Difference Between Process and Thread - GeeksforGeeks](https://www.geeksforgeeks.org/operating-systems/difference-between-process-and-thread/) +- [@article@Processes and Threads - Microsoft Learn](https://learn.microsoft.com/en-us/windows/win32/procthread/processes-and-threads) - [@article@Operating Systems: Threads - UIC](https://www.cs.uic.edu/~jbell/CourseNotes/OperatingSystems/4_Threads.html) - [@article@Lightweight vs Heavyweight Processes - Stack Overflow](https://stackoverflow.com/questions/6004069/lightweight-vs-heavyweight-processes) diff --git a/src/data/roadmaps/server-side-game-developer/content/ip-addressing@3ZcJNDCHw2pFzewmoB-03.md b/src/data/roadmaps/server-side-game-developer/content/ip-addressing@3ZcJNDCHw2pFzewmoB-03.md index f257ccc3dc0d..34ade19bb560 100644 --- a/src/data/roadmaps/server-side-game-developer/content/ip-addressing@3ZcJNDCHw2pFzewmoB-03.md +++ b/src/data/roadmaps/server-side-game-developer/content/ip-addressing@3ZcJNDCHw2pFzewmoB-03.md @@ -5,5 +5,5 @@ IP (Internet Protocol) addressing is a fundamental aspect of networking, at the Learn more from the following resources: - [@article@TCP/IP Addressing and Subnetting - Microsoft Learn](https://learn.microsoft.com/en-us/troubleshoot/windows-client/networking/tcpip-addressing-and-subnetting) -- [@article@What is an IP Address? - GeeksforGeeks](https://www.geeksforgeeks.org/computer-science-fundamentals/what-is-an-ip-address/) +- [@article@What is an IP Address? - IBM](https://www.ibm.com/think/topics/ip-address) - [@course@Fundamentals of Computer Networking - Microsoft Learn](https://learn.microsoft.com/en-us/training/modules/network-fundamentals/) diff --git a/src/data/roadmaps/server-side-game-developer/content/ip@tg94V7K0mgYhpkUMp_Scv.md b/src/data/roadmaps/server-side-game-developer/content/ip@tg94V7K0mgYhpkUMp_Scv.md index 6eaf896a63bf..910ceb9b9e8d 100644 --- a/src/data/roadmaps/server-side-game-developer/content/ip@tg94V7K0mgYhpkUMp_Scv.md +++ b/src/data/roadmaps/server-side-game-developer/content/ip@tg94V7K0mgYhpkUMp_Scv.md @@ -4,6 +4,6 @@ Learn more from the following resources: -- [@article@What is Internet Protocol (IP)? - GeeksforGeeks](https://www.geeksforgeeks.org/computer-networks/what-is-internet-protocol-ip/) +- [@article@Internet Protocol - Wikipedia](https://en.wikipedia.org/wiki/Internet_Protocol) - [@article@IP Network (Internet Protocol Network) - Kentik](https://www.kentik.com/kentipedia/ip-network/) - [@article@Introduction to IP (Internet Protocol) V4 - NetworkLessons](https://networklessons.com/subnetting/internet-protocol) diff --git a/src/data/roadmaps/server-side-game-developer/content/ipv4@pHVB0K8Vtk3ToD6n_f1wv.md b/src/data/roadmaps/server-side-game-developer/content/ipv4@pHVB0K8Vtk3ToD6n_f1wv.md index b187008320e4..7931c77a1f12 100644 --- a/src/data/roadmaps/server-side-game-developer/content/ipv4@pHVB0K8Vtk3ToD6n_f1wv.md +++ b/src/data/roadmaps/server-side-game-developer/content/ipv4@pHVB0K8Vtk3ToD6n_f1wv.md @@ -5,5 +5,5 @@ Learn more from the following resources: - [@article@How IPv4 Works - A Handbook for Developers - freeCodeCamp](https://www.freecodecamp.org/news/how-ipv4-works-a-handbook-for-developers/) -- [@article@What is Internet Protocol Version 4 (IPv4) - GeeksforGeeks](https://www.geeksforgeeks.org/computer-networks/what-is-ipv4/) +- [@article@IPv4 - Wikipedia](https://en.wikipedia.org/wiki/IPv4) - [@article@IPv4 Header Structure and Fields Explained - ComputerNetworkingNotes](https://www.computernetworkingnotes.com/networking-tutorials/ipv4-header-structure-and-fields-explained.html) diff --git a/src/data/roadmaps/server-side-game-developer/content/message-queues@cw7WdFfL5HpeZ_n8wYk2t.md b/src/data/roadmaps/server-side-game-developer/content/message-queues@cw7WdFfL5HpeZ_n8wYk2t.md index 6109fd63f05b..ee57713d47a7 100644 --- a/src/data/roadmaps/server-side-game-developer/content/message-queues@cw7WdFfL5HpeZ_n8wYk2t.md +++ b/src/data/roadmaps/server-side-game-developer/content/message-queues@cw7WdFfL5HpeZ_n8wYk2t.md @@ -6,4 +6,4 @@ Learn more from the following resources: - [@article@What's the Difference Between Kafka and RabbitMQ? - AWS](https://aws.amazon.com/compare/the-difference-between-rabbitmq-and-kafka/) - [@article@Message Queue System Design Guide - System Design Handbook](https://www.systemdesignhandbook.com/guides/message-queue-system-design/) -- [@article@Message Queues System Design - GeeksforGeeks](https://www.geeksforgeeks.org/system-design/message-queues-system-design/) +- [@article@What is a Message Queue? - IBM](https://www.ibm.com/think/topics/message-queue) diff --git a/src/data/roadmaps/server-side-game-developer/content/mutex@G_BEJKkJ1_Nc43aosy_iS.md b/src/data/roadmaps/server-side-game-developer/content/mutex@G_BEJKkJ1_Nc43aosy_iS.md index 64d6f3ab62cd..dadc4a722688 100644 --- a/src/data/roadmaps/server-side-game-developer/content/mutex@G_BEJKkJ1_Nc43aosy_iS.md +++ b/src/data/roadmaps/server-side-game-developer/content/mutex@G_BEJKkJ1_Nc43aosy_iS.md @@ -3,6 +3,6 @@ `Mutex`, short for mutual exclusion, is a synchronization method used by developers to prevent multiple threads from concurrently accessing some shared resource or part of code. It is a locking mechanism that enforces limits to ensure that only one thread can perform certain operations at a time. If a `mutex` is locked by one thread, the other threads trying to lock it will be blocked until the owner thread unlocks it. This tool is essential especially in multi-threaded programming environments to avoid conditions like race conditions where the program's behavior may depend on the sequence of scheduling or timings of the threads. Learn more from the following resources: -- [@article@Mutex vs Semaphore - GeeksforGeeks](https://www.geeksforgeeks.org/operating-systems/mutex-vs-semaphore/) +- [@article@Mutex Objects - Microsoft Learn](https://learn.microsoft.com/en-us/windows/win32/sync/mutex-objects) - [@article@Synchronization - CS 341](https://cs341.cs.illinois.edu/coursebook/Synchronization) - [@official@Using mutexes - IBM](https://www.ibm.com/docs/en/aix/7.1.0?topic=programming-using-mutexes) diff --git a/src/data/roadmaps/server-side-game-developer/content/mysql@HsBqd08Ro0VJnx0FlumMQ.md b/src/data/roadmaps/server-side-game-developer/content/mysql@HsBqd08Ro0VJnx0FlumMQ.md index c2de5e3c0fe0..e680ef328203 100644 --- a/src/data/roadmaps/server-side-game-developer/content/mysql@HsBqd08Ro0VJnx0FlumMQ.md +++ b/src/data/roadmaps/server-side-game-developer/content/mysql@HsBqd08Ro0VJnx0FlumMQ.md @@ -5,5 +5,5 @@ MySQL is an open-source relational database management system (RDBMS) that uses Learn more from the following resources: - [@article@MySQL Tutorial - W3Schools](https://www.w3schools.com/mysql/) -- [@article@MySQL Tutorial - GeeksforGeeks](https://www.geeksforgeeks.org/mysql/mysql-tutorial/) +- [@article@MySQL Tutorial - TutorialsPoint](https://www.tutorialspoint.com/mysql/index.htm) - [@article@Getting Started with MySQL - MySQL Docs](https://dev.mysql.com/doc/mysql-getting-started/en/) diff --git a/src/data/roadmaps/server-side-game-developer/content/reactor@7mYpgn2gr-5vAYW-UR7_x.md b/src/data/roadmaps/server-side-game-developer/content/reactor@7mYpgn2gr-5vAYW-UR7_x.md index 1a7032878306..d5d3fdeaf704 100644 --- a/src/data/roadmaps/server-side-game-developer/content/reactor@7mYpgn2gr-5vAYW-UR7_x.md +++ b/src/data/roadmaps/server-side-game-developer/content/reactor@7mYpgn2gr-5vAYW-UR7_x.md @@ -4,5 +4,5 @@ The **Reactor** is a design pattern that deals with synchronous I/O multiplexing Learn more from the following resources: - [@article@Reactor Pattern - Wikipedia](https://en.wikipedia.org/wiki/Reactor_pattern) -- [@article@What is Reactor Pattern in Node.js? - GeeksforGeeks](https://www.geeksforgeeks.org/node-js/what-is-reactor-pattern-in-node-js/) +- [@article@Blocking vs Non-Blocking - Node.js Docs](https://nodejs.org/en/learn/asynchronous-work/overview-of-blocking-vs-non-blocking) - [@article@Reactor Pattern in Java - Java Design Patterns](https://java-design-patterns.com/patterns/reactor/) diff --git a/src/data/roadmaps/server-side-game-developer/content/reliability@Vh81GnOUOZvDOlOyI5PwT.md b/src/data/roadmaps/server-side-game-developer/content/reliability@Vh81GnOUOZvDOlOyI5PwT.md index 7a1a4e8870eb..42d404bf7fae 100644 --- a/src/data/roadmaps/server-side-game-developer/content/reliability@Vh81GnOUOZvDOlOyI5PwT.md +++ b/src/data/roadmaps/server-side-game-developer/content/reliability@Vh81GnOUOZvDOlOyI5PwT.md @@ -4,5 +4,5 @@ Reliability refers to how consistently a data packet can be transferred from one Learn more from the following resources: - [@article@Reliability and Congestion Avoidance over UDP - Gaffer On Games](https://gafferongames.com/post/reliability_ordering_and_congestion_avoidance_over_udp/) -- [@article@Transmission Control Protocol (TCP) - GeeksforGeeks](https://www.geeksforgeeks.org/computer-networks/what-is-transmission-control-protocol-tcp/) +- [@article@Transmission Control Protocol (TCP) - IBM](https://www.ibm.com/docs/en/zos/3.1.0?topic=protocol-transmission-control-tcp) - [@article@UDP Packet Reliability and Re-sending - Stack Overflow](https://gamedev.stackexchange.com/questions/106722/udp-packet-reliability-and-re-sending) diff --git a/src/data/roadmaps/server-side-game-developer/content/reliable-transmission@X2KHWgQZDHSVDsTRMUwSj.md b/src/data/roadmaps/server-side-game-developer/content/reliable-transmission@X2KHWgQZDHSVDsTRMUwSj.md index 6fc584d594ea..608952ad3fda 100644 --- a/src/data/roadmaps/server-side-game-developer/content/reliable-transmission@X2KHWgQZDHSVDsTRMUwSj.md +++ b/src/data/roadmaps/server-side-game-developer/content/reliable-transmission@X2KHWgQZDHSVDsTRMUwSj.md @@ -13,6 +13,6 @@ Visit the following resources to learn more: - [@article@Reliable Transmission](https://book.systemsapproach.org/direct/reliable.html) - [@article@TCP Reliable Transmission (IETF RFC 793)](https://datatracker.ietf.org/doc/html/rfc793) -- [@article@Automatic Repeat Request (ARQ) - GeeksforGeeks](https://www.geeksforgeeks.org/computer-networks/what-is-arq-automatic-repeat-request/) -- [@article@Difference Between Stop and Wait, GoBackN and Selective Repeat - GeeksforGeeks](https://www.geeksforgeeks.org/difference-between-stop-and-wait-gobackn-and-selective-repeat/) +- [@article@Automatic Repeat Request (ARQ) - Wikipedia](https://en.wikipedia.org/wiki/Automatic_repeat_request) +- [@article@Sliding Window Protocol - Wikipedia](https://en.wikipedia.org/wiki/Sliding_window_protocol) - [@documentation@RFC 3366 - Advice to Link Designers on Link ARQ - IETF](https://datatracker.ietf.org/doc/html/rfc3366) diff --git a/src/data/roadmaps/server-side-game-developer/content/segment-structure@zTCmPUp9j5P1wpGgiboMa.md b/src/data/roadmaps/server-side-game-developer/content/segment-structure@zTCmPUp9j5P1wpGgiboMa.md index cf334d4180cf..fa76c9d4d43a 100644 --- a/src/data/roadmaps/server-side-game-developer/content/segment-structure@zTCmPUp9j5P1wpGgiboMa.md +++ b/src/data/roadmaps/server-side-game-developer/content/segment-structure@zTCmPUp9j5P1wpGgiboMa.md @@ -3,6 +3,6 @@ TCP (Transmission Control Protocol) uses a method called "segmentation" to manage data transmission. In this approach, TCP divides a stream of data into smaller parts, known as "segments". Each of these segments is then independently sent over the internet. A basic TCP segment consists of a header and the data section. The header contains various fields such as source port, destination port, sequence number, acknowledgment number, data offset, reserved section, control bit, window, checksum, urgent pointer, and options. The rest of the segment is occupied by the data transferred by TCP. Understanding the structure of these segments is crucial for understanding how TCP, and thereby much of the Internet, operates. Learn more from the following resources: -- [@article@Services and Segment Structure in TCP - GeeksforGeeks](https://www.geeksforgeeks.org/computer-networks/services-and-segment-structure-in-tcp/) +- [@article@TCP Segment Structure - IBM](https://www.ibm.com/docs/en/zos/3.1.0?topic=tcp-segment-structure) - [@article@TCP Header: Size, Structure, Options, Format, Checksum - Noction](https://www.noction.com/blog/tcp-header) - [@article@TCP Header - NetworkLessons](https://networklessons.com/ip-routing/tcp-header) diff --git a/src/data/roadmaps/server-side-game-developer/content/semaphore@DYvzGc_r0SlOArPPc1gNI.md b/src/data/roadmaps/server-side-game-developer/content/semaphore@DYvzGc_r0SlOArPPc1gNI.md index 6d105fcb9131..fc9d21640c6d 100644 --- a/src/data/roadmaps/server-side-game-developer/content/semaphore@DYvzGc_r0SlOArPPc1gNI.md +++ b/src/data/roadmaps/server-side-game-developer/content/semaphore@DYvzGc_r0SlOArPPc1gNI.md @@ -9,7 +9,7 @@ semaphores help maintain stability in high-performance multiplayer environments. Visit the following resources to learn more: -- [@article@Semaphores in Process Synchronization](https://www.geeksforgeeks.org/semaphores-in-process-synchronization/) +- [@article@Semaphore Objects - Microsoft Learn](https://learn.microsoft.com/en-us/windows/win32/sync/semaphore-objects) - [@article@Semaphore (programming) - Wikipedia](https://en.wikipedia.org/wiki/Semaphore_(programming)) - [@article@Synchronization With Semaphores - Oracle](https://docs.oracle.com/cd/E19120-01/open.solaris/816-5137/sync-11157/index.html) diff --git a/src/data/roadmaps/server-side-game-developer/content/sharding@3use5vuLBJTk40wOg9S-X.md b/src/data/roadmaps/server-side-game-developer/content/sharding@3use5vuLBJTk40wOg9S-X.md index a7d45c657010..083b60ea8678 100644 --- a/src/data/roadmaps/server-side-game-developer/content/sharding@3use5vuLBJTk40wOg9S-X.md +++ b/src/data/roadmaps/server-side-game-developer/content/sharding@3use5vuLBJTk40wOg9S-X.md @@ -4,5 +4,5 @@ Sharding is a type of database partitioning that separates very large databases Learn more from the following resources: - [@article@A Comprehensive Guide to Sharding - PubNub](https://www.pubnub.com/guides/sharding/) -- [@article@Database Sharding - System Design - GeeksforGeeks](https://www.geeksforgeeks.org/system-design/database-sharding-a-system-design-concept/) +- [@article@Sharded Cluster Components - MongoDB Docs](https://www.mongodb.com/docs/manual/core/sharded-cluster-components/) - [@article@Sharding Pattern - Azure Architecture Center - Microsoft Learn](https://learn.microsoft.com/en-us/azure/architecture/patterns/sharding) diff --git a/src/data/roadmaps/server-side-game-developer/content/spinlock@lVXfA_oZr82mFfBvLnnRK.md b/src/data/roadmaps/server-side-game-developer/content/spinlock@lVXfA_oZr82mFfBvLnnRK.md index 710ef5daf987..9fed971721af 100644 --- a/src/data/roadmaps/server-side-game-developer/content/spinlock@lVXfA_oZr82mFfBvLnnRK.md +++ b/src/data/roadmaps/server-side-game-developer/content/spinlock@lVXfA_oZr82mFfBvLnnRK.md @@ -3,6 +3,6 @@ `Spinlock` is a type of synchronization mechanism that exists in a busy-wait-state (essentially, 'spinning') until the lock can be acquired. This contrasts with other locking mechanisms that might put a thread to sleep if the desired lock is not available. It's generally used in scenarios where thread sleeping (context switching) could be costlier than spinning. However, it must be handled properly. An improperly managed spinlock can cause high CPU usage, as the wait is active; it continually consumes processing capacity. Hence, their usage is more beneficial in scenarios where the wait time to acquire a lock is reasonably short. Learn more from the following resources: -- [@article@What is Spinlock in Operating System? - GeeksforGeeks](https://www.geeksforgeeks.org/operating-systems/what-is-spinlock-in-operating-system/) +- [@article@Kernel Locks - IBM](https://www.ibm.com/docs/en/aix/7.2?topic=concepts-kernel-locks) - [@article@Spinlock - Wikipedia](https://en.wikipedia.org/wiki/Spinlock) - [@article@Introduction to Spin Locks - Microsoft Learn](https://learn.microsoft.com/en-us/windows-hardware/drivers/kernel/introduction-to-spin-locks) diff --git a/src/data/roadmaps/server-side-game-developer/content/window-scaling@zvBKjceXRSfEe_3MDCEL5.md b/src/data/roadmaps/server-side-game-developer/content/window-scaling@zvBKjceXRSfEe_3MDCEL5.md index c7a4395ee39a..11bae03501cd 100644 --- a/src/data/roadmaps/server-side-game-developer/content/window-scaling@zvBKjceXRSfEe_3MDCEL5.md +++ b/src/data/roadmaps/server-side-game-developer/content/window-scaling@zvBKjceXRSfEe_3MDCEL5.md @@ -4,5 +4,5 @@ Window Scaling is a mechanism in the Transmission Control Protocol (TCP) that pr Learn more from the following resources: - [@article@TCP Window Size Scaling - NetworkLessons](https://networklessons.com/network-fundamentals/tcp-window-size-scaling) -- [@article@What is TCP Window Scaling? - GeeksforGeeks](https://www.geeksforgeeks.org/what-is-tcp-window-scaling/) +- [@article@TCP Window Scale Option - Wikipedia](https://en.wikipedia.org/wiki/TCP_window_scale_option) - [@article@RFC 7323 - TCP Extensions for High Performance - IETF](https://datatracker.ietf.org/doc/html/rfc7323) diff --git a/src/data/roadmaps/server-side-game-developer/content/xml@v43K6srds7m5SQFqNaY0T.md b/src/data/roadmaps/server-side-game-developer/content/xml@v43K6srds7m5SQFqNaY0T.md index 476f4c0195ba..d0f760dff94e 100644 --- a/src/data/roadmaps/server-side-game-developer/content/xml@v43K6srds7m5SQFqNaY0T.md +++ b/src/data/roadmaps/server-side-game-developer/content/xml@v43K6srds7m5SQFqNaY0T.md @@ -4,5 +4,5 @@ XML, or Extensible Markup Language, is a language designed to store and transpor Learn more from the following resources: - [@article@XML Tutorial - W3Schools](https://www.w3schools.com/xml/) -- [@article@XML Tutorial - GeeksforGeeks](https://www.geeksforgeeks.org/html/xml-tutorial/) +- [@article@XML Introduction - MDN](https://developer.mozilla.org/en-US/docs/Web/XML/XML_introduction) - [@article@What is XML? Complete Guide - Codecademy](https://www.codecademy.com/resources/blog/what-is-xml-used-for) From c274fe068d3aff6baa4a0f8659cc7a5a8d60a066 Mon Sep 17 00:00:00 2001 From: nehaturov-hue Date: Fri, 22 May 2026 22:14:39 +0200 Subject: [PATCH 3/3] fix(server-side-game-developer): correct header text and link type tags MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Fixed 132 files: 'Learn more from the following resources:' → 'Visit the following resources to learn more:' - Fixed @documentation@ → @official@ (17 files) - Fixed @feed@ → @article@ (2 files) - Fixed @interactive@ → @article@ (1 file) - Fixed @discussion@ → @article@ (1 file) - Fixed @repository@ → @opensource@ (1 file) All contributing.md checks now pass. --- .../actor-model@KUQEgHldZPOLwFoXqQ2vM.md | 2 +- ...ddress-conversion@SBA7pa9o0AM0ZEBepd7UM.md | 2 +- .../content/ai@dkCVwuy8GKeEi3VJar_Zo.md | 2 +- .../akka-java@eAEpEUVZcSKO9uCIlMN5y.md | 2 +- .../content/akknet-c@SsOz9Pj6Jc_55PgpmziL6.md | 2 +- .../amazon-ml@U0RlO_puezQPZP0-iBXgW.md | 2 +- .../apache-kafka@gL7hubTh3qiMyUWeAZNwI.md | 2 +- .../apache-spark@yrWiWJMSyTWxDakJbqacu.md | 2 +- .../content/api@a2pcxVTGdAPw8aLvdr19M.md | 2 +- .../content/arp@JI_wUdT2hjsrvbIhLvHcT.md | 2 +- .../asnc-await-c@mAXMpUDmhGOncnCRrENJv.md | 2 +- .../asynchronous@ThBxS9xIMt9OrXfnto3rW.md | 2 +- .../content/aws@Rkx2A6oWsddlCTseZlpRU.md | 2 +- .../content/azure-ml@vBqwmlzoT5XVEhV9IeGso.md | 2 +- .../content/azure@73uoFNGcCALxIuRNbebav.md | 2 +- .../content/barrier@6k25amPkU9lnZ7FMNn_T6.md | 2 +- .../bsd-socket@U_tZFM80W3xJx8jj4skCr.md | 2 +- ...byte-manipulation@H21PanCggDfQt34-JzgfO.md | 2 +- .../content/c@DuyUc9a-47Uz03yr4aeyg.md | 2 +- .../capability@5kF1fqr-mn5-15e3aMa9k.md | 2 +- .../cassandra@1jqSxk1nwByiQa1De81F3.md | 2 +- .../content/category@NH2eQ1_nij1icTgoO027b.md | 2 +- .../content/cc@E4H3hniIW6hKpH3Qr--N5.md | 2 +- .../content/channel@SXOEMkcVYBsRza6BPmmwy.md | 4 +-- .../content/checksum@XxBl-zO7CF6DpOZ2bMDxJ.md | 2 +- .../content/checksum@tBOvBpDi3SOKZjAmkxdM0.md | 2 +- .../content/cipher@1788KFqsQBkYARqA0T5GX.md | 2 +- .../content/cloud-ml@XvvlvDKfYRCcYtTdWohsd.md | 2 +- .../content/cloud@hhtqvFfTCuVPT0OPu4Y1a.md | 2 +- .../concurrency-java@RT9XvlxvIM_hHTtNmbva3.md | 2 +- .../coroutine@o0Y_hM0KXUApfsXG4PvOY.md | 26 +++++++++---------- .../data-transfer@5bJUcx3v4dpdlIsx7bFvK.md | 2 +- .../databases@FLFaGZDg2MSG6_YHnWETM.md | 2 +- ...gram-construction@jnQAzUUnwpJgoRuRIFtSe.md | 2 +- .../content/datagram@wD_HWc9YxPhlkilt585pg.md | 2 +- .../deep-learning@jkWvfp4GqckYPQ48GtjlR.md | 4 +-- ...denial-of-service@TbXJO__4xSnzK1fvvJK86.md | 2 +- ...endency-injection@uTlxyDOtvt_Qp0gXLWO-j.md | 2 +- .../descriptor@OAyMj6uLSv1yJ87YAjyZu.md | 2 +- .../design-patterns@gB-TYpgUDV47bxznNJhYn.md | 2 +- .../determinism@zFx1jjt1hKgCpYHFTzbZZ.md | 2 +- .../content/dhcp@aTHJh-xw8soCxC1bIDdXm.md | 2 +- .../content/dns@yNytLrQAMKBw4t73YRL3J.md | 2 +- .../docker-compose@yAf7VDX7dyaT5AdlNnuKD.md | 2 +- .../content/docker@zW_7VLeEHQp8fp_f5N__0.md | 2 +- .../dump-analysis@1c6EqGv1g-d8M1i0vKImb.md | 2 +- .../content/dynamodb@9vc7sFE_XakYXtKRMxLXi.md | 2 +- .../content/epoll@qaWv4gxnnj3uX8lEm9KQ4.md | 2 +- .../content/erlang@QGtGx5LBEWa1DD3Y7ztUy.md | 2 +- .../content/fiber@TVJrlUsg30YIM1yjsZfJI.md | 2 +- .../content/frp@xDYOvIbXc-iJ2zOKqe0YL.md | 2 +- .../content/function@YPvm8XD_FaFYCQ-b7-KsH.md | 2 +- ...ional-programming@HXSWvhgT4L5w6xgOO-3kj.md | 2 +- .../future--promises@zbIbPlqTNSbJUkqH9iLQv.md | 2 +- .../content/gcp@wD6dUrS-tP2gpCHPghFp5.md | 2 +- .../content/go@d5iQYn97vuoxJnCFGPdOa.md | 2 +- .../goroutine-go@f-L_eaZd0EjBW9-n9Pllt.md | 2 +- .../content/grpc@_uqTTBUYAzDHbEUkDzmzg.md | 2 +- ...vy-vs-lightweight@OYXKtl4A-vaK6yGO6hS6n.md | 2 +- .../content/io_uring@YH7u1FKh85wz78J0stuzS.md | 4 +-- .../content/iocp@7pgdOZomhGilBTwfJLMbm.md | 2 +- .../ip-addressing@3ZcJNDCHw2pFzewmoB-03.md | 2 +- .../content/ip@tg94V7K0mgYhpkUMp_Scv.md | 2 +- .../content/ipv4@pHVB0K8Vtk3ToD6n_f1wv.md | 2 +- .../content/ipv6@TqBlAMfhARhlJed6xD7eg.md | 2 +- .../content/java@LG8JPL1po-gEs1V5JyC8F.md | 2 +- .../javascript@ufufnULqsglE5VhEIAdSI.md | 2 +- .../content/json@y0ZJQQfi8Qx6sB4WnZlP5.md | 2 +- .../content/kqueue@caK32NMMrn-3BGAXZoPPr.md | 4 +-- .../kubernetes@lUBUUoETjfADmM4OPtwwX.md | 2 +- .../link-capacity@OzY-LPcfj1sBm_0F0WbIJ.md | 2 +- ...x-segment-scaling@1l5dhQWYPhUSg-cy5pSlK.md | 2 +- .../max-segment-size@w6ysmcsBn9jJ8xMvg7hcD.md | 2 +- .../memcached@ayeezKxQkXAPJMTShsOBU.md | 2 +- .../message-queues@cw7WdFfL5HpeZ_n8wYk2t.md | 2 +- .../content/mongodb@HYxtPW401-J6aYcTuiGnx.md | 2 +- .../content/ms-sql@QMNUAKAuRI9lyf2_jUPsj.md | 2 +- .../multithreading@3QSLUMKD0G08N3MIb1cG7.md | 2 +- .../multithreading@_jd91rrAXGbJI9RhXlSx8.md | 2 +- .../content/mutex@G_BEJKkJ1_Nc43aosy_iS.md | 2 +- .../content/mysql@HsBqd08Ro0VJnx0FlumMQ.md | 2 +- .../content/oorp@yWj70LpF4LKB8J6GbYvsq.md | 2 +- ...ered-vs-unordered@WMdCDmFsytsF2AWQXfzC8.md | 2 +- .../content/orm@OyxWMFy8s7Lxko_K89fjo.md | 2 +- .../out-of-band-data@3OMu3RM-6pMjqY1jAmC2-.md | 2 +- .../packet-structure@CCxVnrGDKa1EROXgF_OAm.md | 2 +- ...acket-vs-datagram@JE3uZ5U6oe6dVzsmglTl2.md | 2 +- .../postgresql@dAiEwN7phwMyaitvM5kRl.md | 2 +- .../content/proactor@Tvxe2NemcH21y-eB4bosv.md | 2 +- ...ramming-languages@6ilqzjvI4J1pUCmTJ33PA.md | 4 +-- ...amming-techniques@tGQu18PWDatW7HvkTP-uh.md | 2 +- .../content/protobuf@w2zbab_6Gxw6AWS0N759U.md | 2 +- .../content/pthread@HU0yUyl89WD8WnR9PJn7l.md | 2 +- .../content/pytorch@LTSIfq10qDJMTCnIIyqvb.md | 2 +- .../content/rabbitmq@UESjGrFyUbNf4pQamaBoy.md | 2 +- ...reactive-approach@LVwGXmZhMewGQy61qwNyu.md | 2 +- ...reactive-approach@Vl-WW0LThrQTOO_tFl51B.md | 2 +- .../reactive-model@p0P3ZGq_QTCop0vMwe7P3.md | 2 +- .../content/reactor@7mYpgn2gr-5vAYW-UR7_x.md | 2 +- .../content/redis@7YNaELVcoV7DV1Fa06USi.md | 4 +-- .../registered-io@94hJX1iGifDzIuaU3zU5j.md | 2 +- .../reliability@2jDV-ovvrkBbTTLk5VbR9.md | 2 +- .../reliability@Vh81GnOUOZvDOlOyI5PwT.md | 2 +- ...able-transmission@X2KHWgQZDHSVDsTRMUwSj.md | 2 +- ...ble-vs-unreliable@MoyBGT9bscUe8vMN4J0bG.md | 2 +- .../resource-usage@LkGI0VpJ3WkpPHkJhJgWk.md | 2 +- .../content/rest@Oq3GQ5gBUxIl1Qe8NB3LB.md | 2 +- .../content/routing@bYb7nA-Vn9e6VtdbUT3tq.md | 2 +- .../rpc--rest@YxaroYL_Az0vKRCeu2jsp.md | 2 +- .../content/security@qkO0s9zR0sAnjTRWcrLQY.md | 2 +- ...segment-structure@zTCmPUp9j5P1wpGgiboMa.md | 2 +- .../content/select@5-5toy2CblZPCV9d5QPEo.md | 4 +-- .../selective-ack@SPpOO25b7wpajWDIrKi1u.md | 2 +- .../serialization@TS6dz61rUSxm-SqmK6JKe.md | 2 +- ...-side-development@rQArtuVKGVgLn_fw9yO3b.md | 2 +- .../serverless@DOmbRRK_RRPElOuTB7AAK.md | 2 +- .../content/sharding@3use5vuLBJTk40wOg9S-X.md | 2 +- ...ocket-programming@HvpuFTCknHPhnFkhmhRc4.md | 2 +- .../content/spinlock@lVXfA_oZr82mFfBvLnnRK.md | 2 +- .../content/ssl@PSvPjaVtko71BeIA-hYqf.md | 2 +- ...ming-vs-broadcast@pJw8fN1dt3BABtZVz7wGE.md | 2 +- .../synchronization@idmrgKgVWVLZYANbXiZnS.md | 2 +- .../synchrony@l5QTk408Ubagw8XzRAfoZ.md | 2 +- .../task-based@LKPcEeqBOPhQOztD3cM3T.md | 2 +- .../tcp-vs-udp@RfTcTUjaXyp49FnUf44MK.md | 2 +- .../content/tcp@mUCidjOsVLMAVDf2jmV5F.md | 2 +- .../content/tdd@FKOhe21PVlaKIoZI4hd49.md | 2 +- .../tensorflow@iJE9RnKC8QjPnsFeZAbtl.md | 2 +- ...-building-block-c@tiG0mZpLJ2zUr2IPYyhnv.md | 4 +-- ...ead-local-storage@IeD-oQ1bkwlKNC-R0lJjZ.md | 2 +- .../timestamp@6KAYNPLEFMp6Jha8FLMAU.md | 2 +- .../content/tls@FX8ASd-QzTUFDHzBB93WK.md | 2 +- .../content/toml@l8iEC3g0ICSfmIE1MxcUl.md | 2 +- .../transactions@r2OeI7YC1BLLfctC8q69W.md | 2 +- .../content/udp@IMyHwnXxJK6oFxzOMLxjS.md | 2 +- .../update-process@3Eat22rFjUl4eTtGz8u4N.md | 2 +- .../content/veto@ZLTfpRZ0rF-mtd7Z0R2WF.md | 2 +- .../vulnerability@MwLWDlciJOq_0n5S3GoF-.md | 2 +- .../window-scaling@zvBKjceXRSfEe_3MDCEL5.md | 2 +- .../content/windows@mW2L_9NckgPRH7g5W9NHq.md | 2 +- .../content/winsock@GfTXffisLyQgp66zcQ7Py.md | 2 +- .../content/wsa-poll@D9Yeyn8phDhB1ohMWccgr.md | 4 +-- .../content/xml@v43K6srds7m5SQFqNaY0T.md | 2 +- .../content/yaml@uHcUSVLz_2-Usk6ckSvwr.md | 2 +- 144 files changed, 165 insertions(+), 165 deletions(-) diff --git a/src/data/roadmaps/server-side-game-developer/content/actor-model@KUQEgHldZPOLwFoXqQ2vM.md b/src/data/roadmaps/server-side-game-developer/content/actor-model@KUQEgHldZPOLwFoXqQ2vM.md index 6ba68136629b..91144cf8f194 100644 --- a/src/data/roadmaps/server-side-game-developer/content/actor-model@KUQEgHldZPOLwFoXqQ2vM.md +++ b/src/data/roadmaps/server-side-game-developer/content/actor-model@KUQEgHldZPOLwFoXqQ2vM.md @@ -1,7 +1,7 @@ # Actor Model The **Actor Model** is a conceptual model to deal with concurrent computation. It defines some general rules for how the system's components should behave and interact with each other. In the Actor Model, each object (actor) has its own private state and communication with other actors is done by exchanging messages. Actors read messages from a personal mailbox and may change their own inner state, create more actors, or send messages to other actors. The Actor Model makes it easier for developers to write concurrent and distributed systems by providing high-level abstractions over low-level threading details. -Learn more from the following resources: +Visit the following resources to learn more: - [@article@How the Actor Model Works by Example - TheServerSide](https://www.theserverside.com/blog/Coffee-Talk-Java-News-Stories-and-Opinions/How-the-Actor-Model-works-by-example) - [@official@How the Actor Model Meets the Needs of Modern Distributed Systems - Akka Docs](https://doc.akka.io/libraries/akka-core/current/typed/guide/actors-intro.html) diff --git a/src/data/roadmaps/server-side-game-developer/content/address-conversion@SBA7pa9o0AM0ZEBepd7UM.md b/src/data/roadmaps/server-side-game-developer/content/address-conversion@SBA7pa9o0AM0ZEBepd7UM.md index 77f066cd9ed9..b4d14b2f0a23 100644 --- a/src/data/roadmaps/server-side-game-developer/content/address-conversion@SBA7pa9o0AM0ZEBepd7UM.md +++ b/src/data/roadmaps/server-side-game-developer/content/address-conversion@SBA7pa9o0AM0ZEBepd7UM.md @@ -1,7 +1,7 @@ # Address Conversion In socket programming, address conversion functions are important for handling internet addresses. Functions like `inet_pton()` (presentation to network) and `inet_ntop()` (network to presentation) are frequently used. `inet_pton()` function converts an IP address in human-friendly format (IPv4 addresses in dotted-decimal notation or IPv6 addresses in hexadecimal notation) to its equivalent binary form. Conversely, `inet_ntop()` function does the reverse, i.e., it converts an IP address in binary form to human-friendly format. These functions are important tools when dealing with IP addresses in lower-level network programming. -Learn more from the following resources: +Visit the following resources to learn more: - [@official@inet_pton(3) - Linux Manual Page - man7.org](https://man7.org/linux/man-pages/man3/inet_pton.3.html) - [@official@inet_pton - The Open Group Base Specifications](https://pubs.opengroup.org/onlinepubs/009619199/inet_pton.htm) diff --git a/src/data/roadmaps/server-side-game-developer/content/ai@dkCVwuy8GKeEi3VJar_Zo.md b/src/data/roadmaps/server-side-game-developer/content/ai@dkCVwuy8GKeEi3VJar_Zo.md index 251fcb233c58..c774a31ce292 100644 --- a/src/data/roadmaps/server-side-game-developer/content/ai@dkCVwuy8GKeEi3VJar_Zo.md +++ b/src/data/roadmaps/server-side-game-developer/content/ai@dkCVwuy8GKeEi3VJar_Zo.md @@ -1,7 +1,7 @@ # AI Artificial Intelligence (AI) in server side game development refers to the use of algorithms and computational procedures to create systems capable of performing tasks that would require human intelligence. Such tasks include learning and adapting to change, recognizing speech, or even making decisions. In game development, AI is often used to give non-player characters (NPCs) their own 'intelligence', making them even more life-like. This could be as simple as the ability to follow a player around in an environment, or as complex as crafting strategies for combat. AI can also be used to generate procedurally or dynamically generated content, creating potentially infinite unique experiences for the player. AI in games is often programmed in a way where it must strike a balance between appearing intelligent and providing an enjoyable experience for the player. -Learn more from the following resources: +Visit the following resources to learn more: - [@article@Behavior Tree (Artificial Intelligence) - Wikipedia](https://en.wikipedia.org/wiki/Behavior_tree_(artificial_intelligence,_robotics_and_control)) - [@article@How to Create Smarter Enemies with Behavior Trees - Game Developer](https://www.gamedeveloper.com/programming/how-to-create-smarter-enemies-with-behavior-trees) diff --git a/src/data/roadmaps/server-side-game-developer/content/akka-java@eAEpEUVZcSKO9uCIlMN5y.md b/src/data/roadmaps/server-side-game-developer/content/akka-java@eAEpEUVZcSKO9uCIlMN5y.md index a2b165f927f4..2f0e232c9c88 100644 --- a/src/data/roadmaps/server-side-game-developer/content/akka-java@eAEpEUVZcSKO9uCIlMN5y.md +++ b/src/data/roadmaps/server-side-game-developer/content/akka-java@eAEpEUVZcSKO9uCIlMN5y.md @@ -1,7 +1,7 @@ # Akka (Java) Akka is an open-source toolkit and runtime simplifying the construction of concurrent and distributed applications on the JVM. It implements the Actor Model for handling concurrency, allowing developers to create systems that can handle high volumes of transactions in a distributed environment. Yet, Akka is not only about Actors, it features other tools for building reactive applications, including Event Sourcing, CQRS, Cluster Sharding, and Distributed Data. Written in Scala and providing APIs in both Scala and Java, Akka powers numerous business-critical systems in sectors such as finance, tech, streaming, and others. -Learn more from the following resources: +Visit the following resources to learn more: - [@official@Akka Documentation](https://doc.akka.io/index.html) - [@official@Introduction to Actors - Akka Docs](https://doc.akka.io/libraries/akka-core/current/typed/actors.html) diff --git a/src/data/roadmaps/server-side-game-developer/content/akknet-c@SsOz9Pj6Jc_55PgpmziL6.md b/src/data/roadmaps/server-side-game-developer/content/akknet-c@SsOz9Pj6Jc_55PgpmziL6.md index b3974eb7e542..d26102d8e13e 100644 --- a/src/data/roadmaps/server-side-game-developer/content/akknet-c@SsOz9Pj6Jc_55PgpmziL6.md +++ b/src/data/roadmaps/server-side-game-developer/content/akknet-c@SsOz9Pj6Jc_55PgpmziL6.md @@ -1,7 +1,7 @@ # Akka.net (C#) "Akka.NET" is a toolkit and a runtime for designing concurrent and distributed applications. This technology is directly inspired by the Actor Model concept, implementing its principles to create robust and highly functional server-side applications. Akka.NET allows developers to create systems that are capable of handling millions of messages in a concurrent manner while maintaining high performance. It supports actor-based concurrency, network and cloud distribution, and powerful event sourcing techniques. Building systems with Akka.NET involve not only working with primary actors but also working with different types, including the likes of Persistent actors, FSM (Finite State Machine) actors and more. Please remember, Akka.NET is a part of the broader Akka toolkit, which also includes libraries for Java and Scala. -Learn more from the following resources: +Visit the following resources to learn more: - [@official@Akka.NET Tutorial Overview](https://getakka.net/articles/intro/getting-started/tutorial-overview.html) - [@official@Akka.NET Home - Documentation](https://getakka.net/) diff --git a/src/data/roadmaps/server-side-game-developer/content/amazon-ml@U0RlO_puezQPZP0-iBXgW.md b/src/data/roadmaps/server-side-game-developer/content/amazon-ml@U0RlO_puezQPZP0-iBXgW.md index 00a2368112d6..85f657e790ad 100644 --- a/src/data/roadmaps/server-side-game-developer/content/amazon-ml@U0RlO_puezQPZP0-iBXgW.md +++ b/src/data/roadmaps/server-side-game-developer/content/amazon-ml@U0RlO_puezQPZP0-iBXgW.md @@ -1,7 +1,7 @@ # Amazon ML Amazon Machine Learning (Amazon ML) is a robust, cloud-based service that makes it easy for developers of all skill levels to use machine learning technology. It provides visualization tools and wizards that guide you through the process of creating machine learning (ML) models without needing to learn complex ML algorithms and technology. With Amazon ML, you can create and train your data models, and then use those models to make predictions. These predictions can be used to implement sophisticated applications, such as user trend detection, sentiment analysis, fraud detection, and much more. -Learn more from the following resources: +Visit the following resources to learn more: - [@official@Amazon SageMaker AI Documentation](https://docs.aws.amazon.com/sagemaker/) - [@official@Getting Started with Machine Learning on Amazon SageMaker AI](https://aws.amazon.com/sagemaker/ai/getting-started/) diff --git a/src/data/roadmaps/server-side-game-developer/content/apache-kafka@gL7hubTh3qiMyUWeAZNwI.md b/src/data/roadmaps/server-side-game-developer/content/apache-kafka@gL7hubTh3qiMyUWeAZNwI.md index da917835cad0..41c7cae88009 100644 --- a/src/data/roadmaps/server-side-game-developer/content/apache-kafka@gL7hubTh3qiMyUWeAZNwI.md +++ b/src/data/roadmaps/server-side-game-developer/content/apache-kafka@gL7hubTh3qiMyUWeAZNwI.md @@ -6,4 +6,4 @@ Visit the following resources to learn more: - [@official@Apache Kafka Quickstart](https://kafka.apache.org/quickstart) - [@video@Apache Kafka Fundamentals](https://www.youtube.com/watch?v=B5j3uNBH8X4) -- [@feed@Explore top posts about Kafka](https://app.daily.dev/tags/kafka?ref=roadmapsh) +- [@article@Explore top posts about Kafka](https://app.daily.dev/tags/kafka?ref=roadmapsh) diff --git a/src/data/roadmaps/server-side-game-developer/content/apache-spark@yrWiWJMSyTWxDakJbqacu.md b/src/data/roadmaps/server-side-game-developer/content/apache-spark@yrWiWJMSyTWxDakJbqacu.md index 6d84feee36b5..ccc13c42838c 100644 --- a/src/data/roadmaps/server-side-game-developer/content/apache-spark@yrWiWJMSyTWxDakJbqacu.md +++ b/src/data/roadmaps/server-side-game-developer/content/apache-spark@yrWiWJMSyTWxDakJbqacu.md @@ -6,4 +6,4 @@ Visit the following resources to learn more: - [@official@ApacheSpark](https://spark.apache.org/documentation.html) - [@article@Spark By Examples](https://sparkbyexamples.com) -- [@feed@Explore top posts about Apache Spark](https://app.daily.dev/tags/spark?ref=roadmapsh) +- [@article@Explore top posts about Apache Spark](https://app.daily.dev/tags/spark?ref=roadmapsh) diff --git a/src/data/roadmaps/server-side-game-developer/content/api@a2pcxVTGdAPw8aLvdr19M.md b/src/data/roadmaps/server-side-game-developer/content/api@a2pcxVTGdAPw8aLvdr19M.md index 9bd228306a25..576be1c9110d 100644 --- a/src/data/roadmaps/server-side-game-developer/content/api@a2pcxVTGdAPw8aLvdr19M.md +++ b/src/data/roadmaps/server-side-game-developer/content/api@a2pcxVTGdAPw8aLvdr19M.md @@ -1,7 +1,7 @@ # API API (Application Programming Interface) is a set of rules and protocols implemented for building and integrating software applications. APIs enable two different software applications to communicate and work together. They work as a bridge connecting two software systems, enabling them to exchange information and execute functions. In the context of server-side game development and socket programming, APIs may be used to handle connection establishment, data transmission, and other necessary network communication operations. APIs can be customized or built based on standard protocols such as HTTP for web services, or TCP/UDP for lower-level socket communications. -Learn more from the following resources: +Visit the following resources to learn more: - [@official@Web API Design Best Practices - Microsoft Azure Architecture](https://learn.microsoft.com/en-us/azure/architecture/best-practices/api-design) - [@article@Best Practices for REST API Design - Stack Overflow](https://stackoverflow.blog/2020/03/02/best-practices-for-rest-api-design/) diff --git a/src/data/roadmaps/server-side-game-developer/content/arp@JI_wUdT2hjsrvbIhLvHcT.md b/src/data/roadmaps/server-side-game-developer/content/arp@JI_wUdT2hjsrvbIhLvHcT.md index c76640af069b..72818ff72e1d 100644 --- a/src/data/roadmaps/server-side-game-developer/content/arp@JI_wUdT2hjsrvbIhLvHcT.md +++ b/src/data/roadmaps/server-side-game-developer/content/arp@JI_wUdT2hjsrvbIhLvHcT.md @@ -1,7 +1,7 @@ # ARP **ARP** or **Address Resolution Protocol** is a protocol used to map an IP address to a physical address on the network, such as a MAC address. A device uses ARP when it needs to forward a packet to another device on the same network but only has the IP address. ARP broadcasts a request packet to all devices on the local network to find who owns the IP address. The device with the matching IP address replies with its MAC address. ARP maintains a cache of previously resolved addresses to minimize traffic. It is an essential protocol in network communication, but it also exposes certain security vulnerabilities like ARP spoofing. -Learn more from the following resources: +Visit the following resources to learn more: - [@article@ARP (Address Resolution Protocol) Explained - NetworkLessons](https://networklessons.com/ip-services/arp-address-resolution-protocol-explained) - [@article@What is ARP? Address Resolution Protocol Explained - Splunk](https://www.splunk.com/en_us/blog/learn/address-resolution-protocol-arp.html) diff --git a/src/data/roadmaps/server-side-game-developer/content/asnc-await-c@mAXMpUDmhGOncnCRrENJv.md b/src/data/roadmaps/server-side-game-developer/content/asnc-await-c@mAXMpUDmhGOncnCRrENJv.md index ff10dd07619d..7894f0e2b768 100644 --- a/src/data/roadmaps/server-side-game-developer/content/asnc-await-c@mAXMpUDmhGOncnCRrENJv.md +++ b/src/data/roadmaps/server-side-game-developer/content/asnc-await-c@mAXMpUDmhGOncnCRrENJv.md @@ -1,7 +1,7 @@ # Async-await (C#) `Async/await` are extensions of Promises in JavaScript that allow for handling asynchronous code in a more synchronous manner. Using `async` keyword before a function, means the function returns a Promise. On the other hand, `await` keyword is used to pause async function execution until a Promise is resolved or rejected, and to resume execution of the async function after fulfillments. Before the `await` keyword, the Promise resolves to the actual value. Notably, `await` only works within async function block. -Learn more from the following resources: +Visit the following resources to learn more: - [@official@Asynchronous Programming in C# - Microsoft Learn](https://learn.microsoft.com/en-us/dotnet/csharp/asynchronous-programming/) - [@article@C# Async/Await Explained: Complete Guide with Examples - NDepend](https://blog.ndepend.com/c-async-await-explained/) diff --git a/src/data/roadmaps/server-side-game-developer/content/asynchronous@ThBxS9xIMt9OrXfnto3rW.md b/src/data/roadmaps/server-side-game-developer/content/asynchronous@ThBxS9xIMt9OrXfnto3rW.md index d7b28a000cdd..2632021e0e4d 100644 --- a/src/data/roadmaps/server-side-game-developer/content/asynchronous@ThBxS9xIMt9OrXfnto3rW.md +++ b/src/data/roadmaps/server-side-game-developer/content/asynchronous@ThBxS9xIMt9OrXfnto3rW.md @@ -1,7 +1,7 @@ # Asynchronous **Asynchronous programming** is a programming paradigm where the execution of functions or routines does not wait for the activities within them to complete before moving on to subsequent ones. This allows for tasks to be processed independently, making the most of system resources. When a function contains an operation such as I/O, database access, or network communication, which may take a long time to complete, this function is wrapped into a future or promise and sent for execution. Meanwhile, the core program continues to run. When the wrapped function gets executed, a callback function is used to notify that the computation or I/O is complete. This forms the core of non-blocking or asynchronous execution. It is widely used in server-side programming, game development, and any scenario where I/O latency or user experience is a concern. Notably, it is at the core of Node.js and many modern web frameworks. -# Learn more from the following resources: +# Visit the following resources to learn more: - [@article@Asynchronous Programming in Python - Velotio](https://www.velotio.com/engineering-blog/asynchronous-programming-python-an-introduction) - [@article@C++ Coroutines for Async Development - Whole Tomato](https://www.wholetomato.com/blog/cpp-coroutines-async-development/) diff --git a/src/data/roadmaps/server-side-game-developer/content/aws@Rkx2A6oWsddlCTseZlpRU.md b/src/data/roadmaps/server-side-game-developer/content/aws@Rkx2A6oWsddlCTseZlpRU.md index 2c2bdf899abe..9bfdf90f2537 100644 --- a/src/data/roadmaps/server-side-game-developer/content/aws@Rkx2A6oWsddlCTseZlpRU.md +++ b/src/data/roadmaps/server-side-game-developer/content/aws@Rkx2A6oWsddlCTseZlpRU.md @@ -1,7 +1,7 @@ # Amazon Web Services **Amazon Web Services (AWS)** is a secure cloud services platform offered by Amazon. It provides a broad set of infrastructure services, such as computing power, storage options, networking and databases, delivered on-demand with pay-as-you-go pricing. AWS services assist server side game developers in many tasks such as storing player data, syncing games across devices, and even hosting multiplayer game servers. These services help developers scale their games to a world-wide audience without the need for up-front investments in costly hardware and infrastructure. A popular choice for start-ups and large game development companies alike, AWS has an extensive, feature-rich set of tools that allow developers to deploy, monitor and scale applications quickly. -# Learn more from the following resources: +# Visit the following resources to learn more: - [@official@What is Amazon GameLift Servers? - AWS Documentation](https://docs.aws.amazon.com/gameliftservers/latest/developerguide/gamelift-intro.html) - [@official@Amazon GameLift Family - AWS](https://aws.amazon.com/gamelift/) diff --git a/src/data/roadmaps/server-side-game-developer/content/azure-ml@vBqwmlzoT5XVEhV9IeGso.md b/src/data/roadmaps/server-side-game-developer/content/azure-ml@vBqwmlzoT5XVEhV9IeGso.md index 58de3875804d..fbedecf55cde 100644 --- a/src/data/roadmaps/server-side-game-developer/content/azure-ml@vBqwmlzoT5XVEhV9IeGso.md +++ b/src/data/roadmaps/server-side-game-developer/content/azure-ml@vBqwmlzoT5XVEhV9IeGso.md @@ -1,7 +1,7 @@ # Azure ML Azure ML is a cloud-based service provided by Microsoft for building, training, and deploying machine learning models. It provides a suite of tools including automated machine learning and model management services, bolstering the productivity of data scientists and making complex machine learning tasks more achievable. Azure ML is designed to work with popular data science and machine learning frameworks such as PyTorch, TensorFlow, and scikit-learn. It bestows the capabilities of handling large volumes of data, providing scalability, and offering real-time insights. Furthermore, it supports open-source technologies, making it flexible for a wide array of applications. Azure ML stresses on high-level security and compliance, complying with major global and industry-specific standards. It's a comprehensive tool aimed at accelerating the entire machine learning lifecycle. -# Learn more from the following resources: +# Visit the following resources to learn more: - [@official@Azure Machine Learning Documentation - Microsoft Learn](https://learn.microsoft.com/en-us/azure/machine-learning/?view=azureml-api-2) - [@official@Azure Machine Learning Product Page - Microsoft](https://azure.microsoft.com/en-us/products/machine-learning) diff --git a/src/data/roadmaps/server-side-game-developer/content/azure@73uoFNGcCALxIuRNbebav.md b/src/data/roadmaps/server-side-game-developer/content/azure@73uoFNGcCALxIuRNbebav.md index 51d2f4e6c647..60d05c324c77 100644 --- a/src/data/roadmaps/server-side-game-developer/content/azure@73uoFNGcCALxIuRNbebav.md +++ b/src/data/roadmaps/server-side-game-developer/content/azure@73uoFNGcCALxIuRNbebav.md @@ -1,7 +1,7 @@ # Microsoft Azure Azure is Microsoft's public cloud computing platform. Azure provides a broad spectrum of cloud services, including those for analytics, storage, and networking. As a server-side game developer, you can use these functionalities to build, deploy, and manage applications and services through Microsoft-managed data centers. Furthermore, Azure supports a wide range of tools and frameworks, including both Microsoft-specific and third-party software. It also offers 4 different forms of cloud computing: infrastructure as a service (IaaS), platform as a service (PaaS), software as a service (SaaS), and serverless. Each allows developers to choose the level of control and complexity they wish to maintain over their application and infrastructure. -# Learn more from the following resources: +# Visit the following resources to learn more: - [@official@Azure Gaming Documentation - Microsoft Learn](https://learn.microsoft.com/en-us/gaming/azure/) - [@official@Azure Documentation - Microsoft Learn](https://learn.microsoft.com/en-us/azure/) diff --git a/src/data/roadmaps/server-side-game-developer/content/barrier@6k25amPkU9lnZ7FMNn_T6.md b/src/data/roadmaps/server-side-game-developer/content/barrier@6k25amPkU9lnZ7FMNn_T6.md index c7d1c644d56f..724cd3e78cfa 100644 --- a/src/data/roadmaps/server-side-game-developer/content/barrier@6k25amPkU9lnZ7FMNn_T6.md +++ b/src/data/roadmaps/server-side-game-developer/content/barrier@6k25amPkU9lnZ7FMNn_T6.md @@ -2,7 +2,7 @@ `Barrier` in server-side game development refers to a type of synchronization method that can help manage multiple threads in a game's code. When a barrier point is set, all threads that reach this point are prevented from progressing until all the threads have reached this barrier. This functionality is a crucial aspect in synchronization to prevent inconsistencies and unsynchronized access to shared resources. It allows developers to ensure all processes are completed or all information is updated before moving on to the next step in the game's runtime. Barriers can be applied in various instances such as, but not limited to, game start-up, level completion, or during more complex inter-thread communications. -# Learn more from the following resources: +# Visit the following resources to learn more: - [@article@Synchronization Primitives in C++20 - KDAB](https://www.kdab.com/synchronization-primitives-in-c20/) - [@article@Multithreading for Game Engines - Vulkan Guide](https://www.vkguide.dev/docs/extra-chapter/multithreading/) diff --git a/src/data/roadmaps/server-side-game-developer/content/bsd-socket@U_tZFM80W3xJx8jj4skCr.md b/src/data/roadmaps/server-side-game-developer/content/bsd-socket@U_tZFM80W3xJx8jj4skCr.md index 4c54acc68a90..9b15d67e6b73 100644 --- a/src/data/roadmaps/server-side-game-developer/content/bsd-socket@U_tZFM80W3xJx8jj4skCr.md +++ b/src/data/roadmaps/server-side-game-developer/content/bsd-socket@U_tZFM80W3xJx8jj4skCr.md @@ -1,7 +1,7 @@ # BSD Socket The BSD sockets API is an application programming interface (API) for network communication originally developed as part of the Berkeley Software Distribution (BSD). This API provides a set of functions for creating and manipulating network sockets in operating systems. It has been widely adopted in a variety of platforms due to its simplicity and ease of use for networking tasks. The BSD socket API supports various network protocols and is extensible to support new protocols. It allows low-level access to network services, with the facilities to manage connections, send and receive data, and handle multiple connections concurrently. The API supports both connection-oriented (TCP) and connectionless (UDP) network protocols. -# Learn more from the following resources: +# Visit the following resources to learn more: - [@article@Beej's Guide to Network Programming](https://beej.us/guide/bgnet/) - [@article@Berkeley Sockets - Wikipedia](https://en.wikipedia.org/wiki/Berkeley_sockets) diff --git a/src/data/roadmaps/server-side-game-developer/content/byte-manipulation@H21PanCggDfQt34-JzgfO.md b/src/data/roadmaps/server-side-game-developer/content/byte-manipulation@H21PanCggDfQt34-JzgfO.md index fa6e1474866f..0251238d22a5 100644 --- a/src/data/roadmaps/server-side-game-developer/content/byte-manipulation@H21PanCggDfQt34-JzgfO.md +++ b/src/data/roadmaps/server-side-game-developer/content/byte-manipulation@H21PanCggDfQt34-JzgfO.md @@ -1,7 +1,7 @@ # Byte Manipulation `Byte manipulation`, in the context of socket programming, often refers to the ability to directly interact and manage bytes of data. This could involve creating, modifying, or reading individual bytes or groups of bytes. Common operations include shifting (moving bytes to the left or right), masking (using a binary AND operation to make certain bits 0), and bitwise operations (working with the individual bits within a byte). Byte manipulation commonly takes place in server side game development when dealing with network data or working with specific binary protocols. The ability to accurately manipulate bytes is an essential skill when handling and optimizing the transfer of data between a server and a client. -# Learn more from the following resources: +# Visit the following resources to learn more: - [@official@Protocol Buffers Overview - Google](https://protobuf.dev/overview/) - [@article@Bytes Objects: Handling Binary Data in Python - Real Python](https://realpython.com/python-bytes/) diff --git a/src/data/roadmaps/server-side-game-developer/content/c@DuyUc9a-47Uz03yr4aeyg.md b/src/data/roadmaps/server-side-game-developer/content/c@DuyUc9a-47Uz03yr4aeyg.md index 4873b81f0d14..75a49f767990 100644 --- a/src/data/roadmaps/server-side-game-developer/content/c@DuyUc9a-47Uz03yr4aeyg.md +++ b/src/data/roadmaps/server-side-game-developer/content/c@DuyUc9a-47Uz03yr4aeyg.md @@ -1,7 +1,7 @@ # C# C Sharp, usually written as C#, is a powerful, object-oriented programming language developed by Microsoft in the early 2000s. C# was designed to be a part of the .NET ecosystem and has its syntax foundations based on C and C++. Over time, C# has evolved to include several modern programming features like generics, asynchronous methods, and support for LINQ queries. Thanks to the .NET Core's cross-platform support, C# can now be used to write applications that run on Windows, Linux, and macOS. While it's widely used to create Windows desktop applications and games, it's also popular for developing web applications, server-side components, and even mobile applications via Xamarin. -# Learn more from the following resources: +# Visit the following resources to learn more: - [@official@C# Guide - Microsoft Learn](https://learn.microsoft.com/en-us/dotnet/csharp/) - [@official@Programming in Unity - Unity Documentation](https://docs.unity3d.com/6000.4/Documentation/Manual/scripting.html) diff --git a/src/data/roadmaps/server-side-game-developer/content/capability@5kF1fqr-mn5-15e3aMa9k.md b/src/data/roadmaps/server-side-game-developer/content/capability@5kF1fqr-mn5-15e3aMa9k.md index a590990f83ca..51905f45e7c1 100644 --- a/src/data/roadmaps/server-side-game-developer/content/capability@5kF1fqr-mn5-15e3aMa9k.md +++ b/src/data/roadmaps/server-side-game-developer/content/capability@5kF1fqr-mn5-15e3aMa9k.md @@ -1,7 +1,7 @@ # Capability In server-side game development, `capability` basically refers to the potential of the server in terms of supporting the game mechanics, the players, the network traffic, and other elements that allow the game to function effectively. Hosting servers condition the player's game interface and user experience, incorporating the aspects of speed, smooth game flow, glitch prevention, and high-performance gameplay. Certain servers have higher capabilities, supporting complex games with vast virtual environments, numerous players, and extensive data traffic. Their capacity extends to facilitating updates and patches immediately. On the other hand, servers with lower capabilities might only cater to simpler games. Ultimately, the `capability` of an IP server is a key factor in developing and maintaining a successful online, multiplayer, or large-scale game. -# Learn more from the following resources: +# Visit the following resources to learn more: - [@article@Capability-based Security - Wikipedia](https://en.wikipedia.org/wiki/Capability-based_security) - [@official@Security Practices - Sandstorm.io](https://docs.sandstorm.io/en/latest/using/security-practices/) diff --git a/src/data/roadmaps/server-side-game-developer/content/cassandra@1jqSxk1nwByiQa1De81F3.md b/src/data/roadmaps/server-side-game-developer/content/cassandra@1jqSxk1nwByiQa1De81F3.md index f71f8a169b3c..c6bc06e282f5 100644 --- a/src/data/roadmaps/server-side-game-developer/content/cassandra@1jqSxk1nwByiQa1De81F3.md +++ b/src/data/roadmaps/server-side-game-developer/content/cassandra@1jqSxk1nwByiQa1De81F3.md @@ -1,7 +1,7 @@ # Cassandra Apache Cassandra is an open-source, distributed NoSQL database system that is designed to manage large volumes of data across a wide range of servers. It provides high availability with no single point of failure. Cassandra is often used for applications where data is distributed across multiple locations as it has superior replication mechanisms. It utilizes a peer-to-peer architecture, as opposed to master-slaves, which allows for continuous availability and scalability. Cassandra also provides robust support for clusters spanning multiple datacenters, with asynchronous masterless replication allowing low latency operations for all clients. -Learn more from the following resources: +Visit the following resources to learn more: - [@official@Cassandra Architecture - Apache Cassandra](https://cassandra.apache.org/doc/latest/cassandra/architecture/dynamo.html) - [@article@Apache Cassandra - Wikipedia](https://en.wikipedia.org/wiki/Apache_Cassandra) diff --git a/src/data/roadmaps/server-side-game-developer/content/category@NH2eQ1_nij1icTgoO027b.md b/src/data/roadmaps/server-side-game-developer/content/category@NH2eQ1_nij1icTgoO027b.md index d34e2d1aac1c..ea41b373b68a 100644 --- a/src/data/roadmaps/server-side-game-developer/content/category@NH2eQ1_nij1icTgoO027b.md +++ b/src/data/roadmaps/server-side-game-developer/content/category@NH2eQ1_nij1icTgoO027b.md @@ -11,7 +11,7 @@ The Internet Protocol Addresses (IP Addresses) are categorized into five differe **Class D** IP address is designed for multicast groups and ranges from 224.0.0.0 to 239.255.255.255. Lastly, **Class E** IP address ranges from 240.0.0.0 to 255.255.255.254 and is preserved for research and development purposes. -Learn more from the following resources: +Visit the following resources to learn more: - [@article@IP Address - Wikipedia](https://en.wikipedia.org/wiki/IP_address) - [@official@Internet Protocol RFC 791 - IETF](https://datatracker.ietf.org/doc/html/rfc791) diff --git a/src/data/roadmaps/server-side-game-developer/content/cc@E4H3hniIW6hKpH3Qr--N5.md b/src/data/roadmaps/server-side-game-developer/content/cc@E4H3hniIW6hKpH3Qr--N5.md index 91a865cbe14f..ff7c25bb89dc 100644 --- a/src/data/roadmaps/server-side-game-developer/content/cc@E4H3hniIW6hKpH3Qr--N5.md +++ b/src/data/roadmaps/server-side-game-developer/content/cc@E4H3hniIW6hKpH3Qr--N5.md @@ -5,7 +5,7 @@ - [@article@C Programming Language](https://en.wikipedia.org/wiki/C_%28programming_language%29) - [@article@C++ Programming Language](https://en.wikipedia.org/wiki/C%2B%2B) -Learn more from the following resources: +Visit the following resources to learn more: - [@article@Learn C++ - LearnCpp](https://www.learncpp.com/) - [@official@Get Started with C++ - ISO C++](https://isocpp.org/get-started) diff --git a/src/data/roadmaps/server-side-game-developer/content/channel@SXOEMkcVYBsRza6BPmmwy.md b/src/data/roadmaps/server-side-game-developer/content/channel@SXOEMkcVYBsRza6BPmmwy.md index c545b59e1a61..4e956d21a74c 100644 --- a/src/data/roadmaps/server-side-game-developer/content/channel@SXOEMkcVYBsRza6BPmmwy.md +++ b/src/data/roadmaps/server-side-game-developer/content/channel@SXOEMkcVYBsRza6BPmmwy.md @@ -12,6 +12,6 @@ game performance. Visit the following resources to learn more: -- [@documentation@Go Channel Documentation](https://golang.org/doc/effective_go.html#channels) -- [@documentation@Rust Channels for Concurrency](https://doc.rust-lang.org/book/ch16-02-message-passing.html) +- [@official@Go Channel Documentation](https://golang.org/doc/effective_go.html#channels) +- [@official@Rust Channels for Concurrency](https://doc.rust-lang.org/book/ch16-02-message-passing.html) - [@article@Comprehensive Guide to Channel](https://elixir-lang.org/getting-started/processes.html#using-processes-and-messages) \ No newline at end of file diff --git a/src/data/roadmaps/server-side-game-developer/content/checksum@XxBl-zO7CF6DpOZ2bMDxJ.md b/src/data/roadmaps/server-side-game-developer/content/checksum@XxBl-zO7CF6DpOZ2bMDxJ.md index 5692ee5ce0df..44472f3202af 100644 --- a/src/data/roadmaps/server-side-game-developer/content/checksum@XxBl-zO7CF6DpOZ2bMDxJ.md +++ b/src/data/roadmaps/server-side-game-developer/content/checksum@XxBl-zO7CF6DpOZ2bMDxJ.md @@ -1,7 +1,7 @@ # Checksum A **checksum** in TCP (Transmission Control Protocol) is a 16-bit field in the TCP header used to perform error checks on the segments. TCP stack computes the checksum value for the data transmitted and sends it along with the data to the receiving system. The receiving system re-computes the checksum and compares it with the value sent along with the data. If both the computed values match, the data is assumed to be free from transmission errors. However, if the computed values don't match, TCP will detect a possible change in received data, and the receiver will request for the re-transmission of the lost or corrupted data packets. Please note that while the checksum operation helps to ensure data integrity, it is not entirely foolproof as it might not detect all possible errors, particularly those that involve multiple bit changes. -Learn more from the following resources: +Visit the following resources to learn more: - [@article@Internet Checksum - Wikipedia](https://en.wikipedia.org/wiki/Internet_checksum) - [@official@Computing the Internet Checksum RFC 1071 - IETF](https://datatracker.ietf.org/doc/html/rfc1071) diff --git a/src/data/roadmaps/server-side-game-developer/content/checksum@tBOvBpDi3SOKZjAmkxdM0.md b/src/data/roadmaps/server-side-game-developer/content/checksum@tBOvBpDi3SOKZjAmkxdM0.md index 2942b503df89..4b3dd250e76d 100644 --- a/src/data/roadmaps/server-side-game-developer/content/checksum@tBOvBpDi3SOKZjAmkxdM0.md +++ b/src/data/roadmaps/server-side-game-developer/content/checksum@tBOvBpDi3SOKZjAmkxdM0.md @@ -1,7 +1,7 @@ # Checksum The `checksum` is an important element in UDP that ensures the integrity and validation of the data being transmitted. It computes the total sum of all the bytes in a packet and incorporates it as an additional `checksum` field in the UDP header. When the packet arrives at its destination, this process is repeated and compared with the included `checksum`. If a match is observed, the packet is deemed valid. If not, it signifies that an error occurred during transmission possibly due to noise or any third-party interference. In such a case, the packet is simply dropped, as UDP does not initiate any retransmission or error correction procedure. This is why a perfect output cannot be guaranteed with UDP, nor can it determine whether all the recipients are receiving the packets properly. -Learn more from the following resources: +Visit the following resources to learn more: - [@article@User Datagram Protocol - Wikipedia](https://en.wikipedia.org/wiki/User_Datagram_Protocol) - [@article@How is TCP and UDP Checksum Calculated - slashroot.in](https://www.slashroot.in/how-is-tcp-and-udp-checksum-calculated) diff --git a/src/data/roadmaps/server-side-game-developer/content/cipher@1788KFqsQBkYARqA0T5GX.md b/src/data/roadmaps/server-side-game-developer/content/cipher@1788KFqsQBkYARqA0T5GX.md index 1e35a456c821..75659c2fd2ee 100644 --- a/src/data/roadmaps/server-side-game-developer/content/cipher@1788KFqsQBkYARqA0T5GX.md +++ b/src/data/roadmaps/server-side-game-developer/content/cipher@1788KFqsQBkYARqA0T5GX.md @@ -1,7 +1,7 @@ # Cipher **Cipher** is a vital component in the field of cryptography and is used to encrypt and decrypt information. It is essentially a series of well-defined steps or algorithms followed to convert sensitive information or data into a form that appears to be random and meaningless. This transformed information can only be turned back into its original form with a specific decryption key. Based on their methodology, ciphers are broadly classified into two categories: block ciphers and stream ciphers. Block ciphers work on a chunk of data at once, whereas stream ciphers work on a individual bits or bytes. Examples of ciphers include: Caesar Cipher, Monoalphabetic Cipher, and Vigenere Cipher among others. Usage of ciphers enhances the security in server-side game development by ensuring that player data remains confidential and is not subjected to unauthorized access or manipulation. -Learn more from the following resources: +Visit the following resources to learn more: - [@article@Cipher - Wikipedia](https://en.wikipedia.org/wiki/Cipher) - [@article@Block Cipher - Wikipedia](https://en.wikipedia.org/wiki/Block_cipher) diff --git a/src/data/roadmaps/server-side-game-developer/content/cloud-ml@XvvlvDKfYRCcYtTdWohsd.md b/src/data/roadmaps/server-side-game-developer/content/cloud-ml@XvvlvDKfYRCcYtTdWohsd.md index b62e0f32318b..15585fe9a2c4 100644 --- a/src/data/roadmaps/server-side-game-developer/content/cloud-ml@XvvlvDKfYRCcYtTdWohsd.md +++ b/src/data/roadmaps/server-side-game-developer/content/cloud-ml@XvvlvDKfYRCcYtTdWohsd.md @@ -1,7 +1,7 @@ # Cloud ML `Cloud Machine Learning` or `Cloud ML` is a branch of Artificial Intelligence that utilizes cloud computing services to provide machine learning capabilities. It enables developers and data scientists to build, train, and deploy machine learning models in a cloud-based environment. Cloud ML platforms usually offer a range of pre-trained models and services for tasks like image recognition, natural language understanding, and predictive analytics. These platforms support popular ML frameworks, such as TensorFlow and PyTorch, which can be used to design custom models. Importantly, Cloud ML abstracts the complex infrastructure management associated with large-scale ML computations providing users with more agile, scalable, and accessible machine learning solutions. -Learn more from the following resources: +Visit the following resources to learn more: - [@official@Amazon SageMaker - AWS](https://aws.amazon.com/sagemaker/) - [@official@Google Cloud Vertex AI Documentation](https://cloud.google.com/vertex-ai/docs) diff --git a/src/data/roadmaps/server-side-game-developer/content/cloud@hhtqvFfTCuVPT0OPu4Y1a.md b/src/data/roadmaps/server-side-game-developer/content/cloud@hhtqvFfTCuVPT0OPu4Y1a.md index 18274b635f04..dc3351982aa1 100644 --- a/src/data/roadmaps/server-side-game-developer/content/cloud@hhtqvFfTCuVPT0OPu4Y1a.md +++ b/src/data/roadmaps/server-side-game-developer/content/cloud@hhtqvFfTCuVPT0OPu4Y1a.md @@ -1,7 +1,7 @@ # Cloud The **cloud** refers to servers that are accessed over the Internet, and the software and databases that run on those servers. By using cloud technology, data can be accessed from anywhere via the Internet, rather than from a local server or a personal computer. Cloud services are typically provided by different companies, such as Google, Amazon, and Microsoft. There are three main types of cloud computing: Infrastructure as a Service (IaaS), Platform as a Service (PaaS) and Software as a Service (SaaS). Examples of the cloud in gaming include multiplayer online games, game streaming and digital distribution platforms. The cloud is also used in game development for testing, development, and distribution of games. -Learn more from the following resources: +Visit the following resources to learn more: - [@official@What is Cloud Computing - AWS](https://aws.amazon.com/what-is-cloud-computing/) - [@official@Google Cloud Documentation Overview](https://cloud.google.com/docs/overview) diff --git a/src/data/roadmaps/server-side-game-developer/content/concurrency-java@RT9XvlxvIM_hHTtNmbva3.md b/src/data/roadmaps/server-side-game-developer/content/concurrency-java@RT9XvlxvIM_hHTtNmbva3.md index 0dd7a969941f..926eb7ebf408 100644 --- a/src/data/roadmaps/server-side-game-developer/content/concurrency-java@RT9XvlxvIM_hHTtNmbva3.md +++ b/src/data/roadmaps/server-side-game-developer/content/concurrency-java@RT9XvlxvIM_hHTtNmbva3.md @@ -1,7 +1,7 @@ # Concurrency (Java) Concurrency is a property of systems that allows multiple tasks to run in an overlapped or simultaneous manner. This is widely used in server side game development where it is common to have multiple players interfacing with the system at the same time. It is essential to keep the system responsive and efficient under high load. Concurrency is often achieved through multithreading or asynchronous programming. Multithreading involves multiple threads of execution within a single program, with each thread running on a separate processor core. Asynchronous programming, on the other hand, achieves concurrency by allowing tasks to progress without waiting for other tasks to complete. This can be particularly useful in situations where tasks involve I/O operations or network requests, which can take a significant amount of time to complete, and would otherwise block the execution of other tasks. -Learn more from the following resources: +Visit the following resources to learn more: - [@official@Synchronization - Java Tutorial](https://docs.oracle.com/javase/tutorial/essential/concurrency/sync.html) - [@article@Java Concurrency - Wikipedia](https://en.wikipedia.org/wiki/Java_concurrency) diff --git a/src/data/roadmaps/server-side-game-developer/content/coroutine@o0Y_hM0KXUApfsXG4PvOY.md b/src/data/roadmaps/server-side-game-developer/content/coroutine@o0Y_hM0KXUApfsXG4PvOY.md index 3fc4030c7bd7..3b764f81ae05 100644 --- a/src/data/roadmaps/server-side-game-developer/content/coroutine@o0Y_hM0KXUApfsXG4PvOY.md +++ b/src/data/roadmaps/server-side-game-developer/content/coroutine@o0Y_hM0KXUApfsXG4PvOY.md @@ -1,16 +1,16 @@ -# Coroutine - -**Coroutines** are lightweight, cooperative multitasking constructs that enable efficient asynchronous programming in server-side game -development. Unlike traditional threads, coroutines allow functions to be paused and resumed without blocking the entire execution -thread, making them ideal for handling game logic, networking, and AI behavior with minimal overhead. They work seamlessly with -future & promise mechanisms, simplifying concurrency management by avoiding callback hell and reducing synchronization complexity. -Coroutines are widely supported in modern languages like C++ (via `std::coroutine`), Python (`asyncio`), and Kotlin, offering game -developers an efficient way to write non-blocking code while maintaining readability and performance. - -Visit the following resources to learn more: - -- [@documentation@C++ Coroutines (cppreference)](https://en.cppreference.com/w/cpp/language/coroutines) -- [@documentation@Python Coroutines and Tasks](https://docs.python.org/3/library/asyncio-task.html) +# Coroutine + +**Coroutines** are lightweight, cooperative multitasking constructs that enable efficient asynchronous programming in server-side game +development. Unlike traditional threads, coroutines allow functions to be paused and resumed without blocking the entire execution +thread, making them ideal for handling game logic, networking, and AI behavior with minimal overhead. They work seamlessly with +future & promise mechanisms, simplifying concurrency management by avoiding callback hell and reducing synchronization complexity. +Coroutines are widely supported in modern languages like C++ (via `std::coroutine`), Python (`asyncio`), and Kotlin, offering game +developers an efficient way to write non-blocking code while maintaining readability and performance. + +Visit the following resources to learn more: + +- [@official@C++ Coroutines (cppreference)](https://en.cppreference.com/w/cpp/language/coroutines) +- [@official@Python Coroutines and Tasks](https://docs.python.org/3/library/asyncio-task.html) - [@official@Write and Run Coroutines - Unity Manual](https://docs.unity3d.com/Manual/Coroutines.html) - [@official@Coroutines Guide - Kotlin Documentation](https://kotlinlang.org/docs/coroutines-guide.html) - [@article@Coroutines for Game Design - Stack Overflow](https://stackoverflow.com/questions/1247894/coroutines-for-game-design) diff --git a/src/data/roadmaps/server-side-game-developer/content/data-transfer@5bJUcx3v4dpdlIsx7bFvK.md b/src/data/roadmaps/server-side-game-developer/content/data-transfer@5bJUcx3v4dpdlIsx7bFvK.md index 71bc434e9be0..5c91f18aa65f 100644 --- a/src/data/roadmaps/server-side-game-developer/content/data-transfer@5bJUcx3v4dpdlIsx7bFvK.md +++ b/src/data/roadmaps/server-side-game-developer/content/data-transfer@5bJUcx3v4dpdlIsx7bFvK.md @@ -1,7 +1,7 @@ # Data Transfer Data transfer in server-side game development refers to the movement of data between the server and client or among various components of the server itself. Game data, such as player scores, game states, and updates, are frequently transferred to ensure a consistent and updated gaming environment. Various methods are used for data transfer, including RESTful APIs, websockets, and protocol buffers. The choice of method often depends on factors such as the size and type of data, the target platform, and the specific needs of the game. Remember, efficient and secure data transfer is essential for providing a smooth and engaging gaming experience. -Learn more from the following resources: +Visit the following resources to learn more: - [@article@Beginner's Guide to Game Networking - pvigier's blog](https://pvigier.github.io/2019/09/08/beginner-guide-game-networking.html) - [@article@HTTP, WebSocket, gRPC, or WebRTC — Which Protocol is Best? - GetStream](https://getstream.io/blog/communication-protocols/) diff --git a/src/data/roadmaps/server-side-game-developer/content/databases@FLFaGZDg2MSG6_YHnWETM.md b/src/data/roadmaps/server-side-game-developer/content/databases@FLFaGZDg2MSG6_YHnWETM.md index 341fe7875ef7..d3c3693cc1d6 100644 --- a/src/data/roadmaps/server-side-game-developer/content/databases@FLFaGZDg2MSG6_YHnWETM.md +++ b/src/data/roadmaps/server-side-game-developer/content/databases@FLFaGZDg2MSG6_YHnWETM.md @@ -1,7 +1,7 @@ # Databases Databases are structured sets of data. In terms of server-side game development, databases are extremely vital. They store information like user profiles, game states, rankings, and so much more. You have various types of databases to choose from such as relational databases (MySQL, PostgreSQL), NoSQL databases (MongoDB, Cassandra), and in-memory databases (Redis, Memcached). These databases have their own primary language for interaction, like SQL for relational databases. Most importantly, as a game developer, one needs to plan database schemas wisely to ensure efficient data retrieval and storage. Knowledge of indexing and a solid understanding of ACID (Atomicity, Consistency, Isolation, Durability) properties assists in developing robust game backends. -Learn more from the following resources: +Visit the following resources to learn more: - [@article@Game Database Architecture: Complete Backend Guide 2025 - Generalist Programmer](https://generalistprogrammer.com/tutorials/game-database-architecture-complete-backend-guide-2025) - [@article@Player Data Schema: MongoDB vs Postgres for Game Backends - SuperCraft](https://gsb.supercraft.host/blog/player-data-schema-design-nosql-vs-sql/) diff --git a/src/data/roadmaps/server-side-game-developer/content/datagram-construction@jnQAzUUnwpJgoRuRIFtSe.md b/src/data/roadmaps/server-side-game-developer/content/datagram-construction@jnQAzUUnwpJgoRuRIFtSe.md index d9a7ae935fc5..224c65d9588a 100644 --- a/src/data/roadmaps/server-side-game-developer/content/datagram-construction@jnQAzUUnwpJgoRuRIFtSe.md +++ b/src/data/roadmaps/server-side-game-developer/content/datagram-construction@jnQAzUUnwpJgoRuRIFtSe.md @@ -1,7 +1,7 @@ # Datagram Construction Datagram construction is a fundamental process in server-side game development, especially when dealing with UDP (User Datagram Protocol). In this context, a datagram is a basic transfer unit associated with a packet-switched network, which typically encompasses a header and payload data. The process of datagram construction involves encapsulating the specific game data (such as player position, game state, etc.) in the datagram payload and setting appropriate values in the datagram header such as Source and Destination IP addresses, Checksum and other protocol-specific values. Constructing and parsing datagrams correctly is crucial for ensuring reliable and efficient communication between the game server and clients. -Learn more from the following resources: +Visit the following resources to learn more: - [@article@User Datagram Protocol (UDP) Packet Header - NetworkLessons](https://networklessons.com/ip-routing/user-datagram-protocol-udp-packet-header) - [@article@User Datagram Protocol (UDP) - Khan Academy](https://www.khanacademy.org/computing/computers-and-internet/xcae6f4a7ff015e7d:the-internet/xcae6f4a7ff015e7d:transporting-packets/a/user-datagram-protocol-udp) diff --git a/src/data/roadmaps/server-side-game-developer/content/datagram@wD_HWc9YxPhlkilt585pg.md b/src/data/roadmaps/server-side-game-developer/content/datagram@wD_HWc9YxPhlkilt585pg.md index 9feda3316aae..0efb2dd8010c 100644 --- a/src/data/roadmaps/server-side-game-developer/content/datagram@wD_HWc9YxPhlkilt585pg.md +++ b/src/data/roadmaps/server-side-game-developer/content/datagram@wD_HWc9YxPhlkilt585pg.md @@ -1,7 +1,7 @@ # Datagram A **Datagram** is the basic unit of data transfer in network communication using protocols such as User Datagram Protocol (UDP). Each datagram operates independently of each other, meaning they may be received in a different order than they were sent, or they might not be received at all. Therefore, unlike TCP (Transmission Control Protocol), UDP does not guarantee that datagrams are delivered in the same order that they were sent, or even at all - hence known as connectionless protocol. However, it is faster and more efficient for applications that do not require delivery guarantees, such as voice over IP, live video broadcasts, and other real-time applications. Each datagram contains information about the sender, the intended recipient, and the data that it is intended to communicate along with its size and other specifications. -Learn more from the following resources: +Visit the following resources to learn more: - [@article@What Is User Datagram Protocol (UDP)? - Fortinet](https://www.fortinet.com/resources/cyberglossary/user-datagram-protocol-udp) - [@article@UDP (User Datagram Protocol) Explained in Details - ClouDNS](https://www.cloudns.net/blog/udp-user-datagram-protocol-explained-in-details/) diff --git a/src/data/roadmaps/server-side-game-developer/content/deep-learning@jkWvfp4GqckYPQ48GtjlR.md b/src/data/roadmaps/server-side-game-developer/content/deep-learning@jkWvfp4GqckYPQ48GtjlR.md index 831330f2ccb6..aa928869735e 100644 --- a/src/data/roadmaps/server-side-game-developer/content/deep-learning@jkWvfp4GqckYPQ48GtjlR.md +++ b/src/data/roadmaps/server-side-game-developer/content/deep-learning@jkWvfp4GqckYPQ48GtjlR.md @@ -1,8 +1,8 @@ # Deep Learning Deep Learning is a subset of machine learning that imitates the workings of the human brain in processing data and creating patterns for decision-making. This technique utilizes multiple layers of algorithms (or neural networks) to process information. Deep learning involves training a model using large volumes of data and neural network architectures that contain many layers. A server-side game developer might use deep learning algorithms to create complex AI characters, improve game physics, or even analyze player data. Deep learning can be supervised, semi-supervised or unsupervised and it's extensively applied in various domains such as voice recognition, image recognition, natural language processing, etc. It is a crucial element for many modern AI applications. -Learn more from the following resources: +Visit the following resources to learn more: - [@article@Neural Networks — Machine Learning Crash Course - Google Developers](https://developers.google.com/machine-learning/crash-course/neural-networks) - [@article@What are Neural Networks? - IBM](https://www.ibm.com/think/topics/neural-networks) -- [@interactive@A Neural Network Playground - TensorFlow](https://playground.tensorflow.org/) +- [@article@A Neural Network Playground - TensorFlow](https://playground.tensorflow.org/) diff --git a/src/data/roadmaps/server-side-game-developer/content/denial-of-service@TbXJO__4xSnzK1fvvJK86.md b/src/data/roadmaps/server-side-game-developer/content/denial-of-service@TbXJO__4xSnzK1fvvJK86.md index 3e72c47cf27a..f059e136af46 100644 --- a/src/data/roadmaps/server-side-game-developer/content/denial-of-service@TbXJO__4xSnzK1fvvJK86.md +++ b/src/data/roadmaps/server-side-game-developer/content/denial-of-service@TbXJO__4xSnzK1fvvJK86.md @@ -2,7 +2,7 @@ Denial of Service (DoS) is a malicious attempt to disrupt the regular functioning of a network, service, or server by overwhelming the network or server with a flood of internet traffic. The most common type of DoS attack involves flooding the target with unnecessary requests in an attempt to overload the system. In a Distributed Denial of Service (DDoS) attack, multiple computers are used to carry out the cyber attack. For servers, these attacks can significantly affect the availability and performance of games, causing a poor experience for the users. -Learn more from the following resources: +Visit the following resources to learn more: - [@article@10 Best Practices to Prevent DDoS Attacks - SecurityScorecard](https://securityscorecard.com/blog/best-practices-to-prevent-ddos-attacks/) - [@article@Defending Against Distributed Denial of Service (DDoS) Attacks - Cyber.gc.ca](https://www.cyber.gc.ca/en/guidance/defending-against-distributed-denial-service-ddos-attacks-itsm80110) diff --git a/src/data/roadmaps/server-side-game-developer/content/dependency-injection@uTlxyDOtvt_Qp0gXLWO-j.md b/src/data/roadmaps/server-side-game-developer/content/dependency-injection@uTlxyDOtvt_Qp0gXLWO-j.md index 58cf449c205c..30ebcb49d6d5 100644 --- a/src/data/roadmaps/server-side-game-developer/content/dependency-injection@uTlxyDOtvt_Qp0gXLWO-j.md +++ b/src/data/roadmaps/server-side-game-developer/content/dependency-injection@uTlxyDOtvt_Qp0gXLWO-j.md @@ -2,7 +2,7 @@ `Dependency Injection` (DI) is a programming technique that makes a class independent of its dependencies. This is achieved by decoupling the use of an object from its creation. In this technique, instead of a class creating an object itself, an object is supplied or "injected" to the class by an external entity. The actual creation and binding of dependencies are managed by a 'container', which injects the dependencies into the respective classes. Dependency Injection can be done in three ways: Constructor Injection, Setter Injection, and Interface Injection. Each of these methods involves moving the responsibility of the object creation and binding to another class or method. -Learn more from the following resources: +Visit the following resources to learn more: - [@article@Dependency Injection in .NET - Microsoft Learn](https://learn.microsoft.com/en-us/dotnet/core/extensions/dependency-injection/overview) - [@article@Design Patterns Explained - Dependency Injection - Stackify](https://stackify.com/dependency-injection/) diff --git a/src/data/roadmaps/server-side-game-developer/content/descriptor@OAyMj6uLSv1yJ87YAjyZu.md b/src/data/roadmaps/server-side-game-developer/content/descriptor@OAyMj6uLSv1yJ87YAjyZu.md index 8379b9ed79ad..ccbb41c50e76 100644 --- a/src/data/roadmaps/server-side-game-developer/content/descriptor@OAyMj6uLSv1yJ87YAjyZu.md +++ b/src/data/roadmaps/server-side-game-developer/content/descriptor@OAyMj6uLSv1yJ87YAjyZu.md @@ -2,7 +2,7 @@ In the context of socket programming, a **descriptor** is simply an identifier for a resource. With the use of these descriptors, socket applications can interact with system resources such as network connections, files, or data streams. For instance, in C-based languages such as C++, socket programming frequently makes use of file descriptors. These are integer values used by the operating system to identify open files and network sockets. It is crucial for a server-side game developer to understand and make efficient use of descriptors to control and manage all the network protocols, ensuring seamless game experiences. -Learn more from the following resources: +Visit the following resources to learn more: - [@article@open(2) - Linux Manual Page - man7.org](https://man7.org/linux/man-pages/man2/open.2.html) - [@article@C++ Socket Programming - TutorialsPoint](https://www.tutorialspoint.com/cplusplus/cpp_socket_programming.htm) diff --git a/src/data/roadmaps/server-side-game-developer/content/design-patterns@gB-TYpgUDV47bxznNJhYn.md b/src/data/roadmaps/server-side-game-developer/content/design-patterns@gB-TYpgUDV47bxznNJhYn.md index 889f7a9de3a6..ee7622b3ce18 100644 --- a/src/data/roadmaps/server-side-game-developer/content/design-patterns@gB-TYpgUDV47bxznNJhYn.md +++ b/src/data/roadmaps/server-side-game-developer/content/design-patterns@gB-TYpgUDV47bxznNJhYn.md @@ -2,7 +2,7 @@ Design Patterns represent best practices developed by experienced software engineers. They are reusable solutions to common problems that occur in software design and fulfill the requirement to decouple the system as much as possible. Design patterns categorize into Creational, Structural, and Behavioural types. Creational type includes patterns like Singleton, Prototype and Factory; Structural includes Adapter, Composite, and Proxy; Behavioural includes Observer, Strategy, Template, and Visitor. Every design pattern has its own particular structure defined that programmers can follow to solve a particular design problem in your programming code. -Learn more from the following resources: +Visit the following resources to learn more: - [@article@Gang of Four Design Patterns Explained - DigitalOcean](https://www.digitalocean.com/community/tutorials/gangs-of-four-gof-design-patterns) - [@article@Design Patterns - SourceMaking](https://sourcemaking.com/design_patterns) diff --git a/src/data/roadmaps/server-side-game-developer/content/determinism@zFx1jjt1hKgCpYHFTzbZZ.md b/src/data/roadmaps/server-side-game-developer/content/determinism@zFx1jjt1hKgCpYHFTzbZZ.md index 045aa4896c52..6d18ea0dd5a8 100644 --- a/src/data/roadmaps/server-side-game-developer/content/determinism@zFx1jjt1hKgCpYHFTzbZZ.md +++ b/src/data/roadmaps/server-side-game-developer/content/determinism@zFx1jjt1hKgCpYHFTzbZZ.md @@ -2,7 +2,7 @@ "Determinism" in the context of server side game development is a principle that highlights predictability and consistency in the system's output given specific and consistent inputs. It implies that a system will always produce the same outcome if the initial conditions and the sequence of events leading up to the outcome are identical. Determinism is incredibly important and beneficial in multi-player gaming situations like MMORPGs where synchronized and equal gameplay across all user instances is key. This level of predictability helps in offering a fair play environment to all players and in ease of debugging and replaying certain sequences for the developers. -Learn more from the following resources: +Visit the following resources to learn more: - [@article@Game Networking Demystied Part III: Lockstep - Ruoyu Sun](https://ruoyusun.com/2019/04/06/game-networking-3.html) - [@article@How Do We Make Online Games Deterministic? - Stack Exchange](https://gamedev.stackexchange.com/questions/101181/how-do-we-make-online-games-deterministic) diff --git a/src/data/roadmaps/server-side-game-developer/content/dhcp@aTHJh-xw8soCxC1bIDdXm.md b/src/data/roadmaps/server-side-game-developer/content/dhcp@aTHJh-xw8soCxC1bIDdXm.md index e9ba6e1a64e5..64d0dabb8ded 100644 --- a/src/data/roadmaps/server-side-game-developer/content/dhcp@aTHJh-xw8soCxC1bIDdXm.md +++ b/src/data/roadmaps/server-side-game-developer/content/dhcp@aTHJh-xw8soCxC1bIDdXm.md @@ -2,7 +2,7 @@ DHCP, or Dynamic Host Configuration Protocol, is an internet protocol that enables automatic assignment of IP addresses to devices on a network. Its key role in network systems is to eliminate the manual task of assigning IP addresses in a large network. DHCP can be implemented in small, medium, or large networks encompassing hundreds of computers or even more. It involves a DHCP server, which is responsible for allocating IP addresses and controlling the process. This server maintains a pool of IP addresses, which it assigns to devices as they connect to the network. DHCP also handles release and renewal of these IP addresses as devices leave and rejoin the network. -Learn more from the following resources: +Visit the following resources to learn more: - [@article@DHCP Basics - Microsoft Learn](https://learn.microsoft.com/en-us/windows-server/troubleshoot/dynamic-host-configuration-protocol-basics) - [@article@Dynamic Host Configuration Protocol - Wikipedia](https://en.wikipedia.org/wiki/Dynamic_Host_Configuration_Protocol) diff --git a/src/data/roadmaps/server-side-game-developer/content/dns@yNytLrQAMKBw4t73YRL3J.md b/src/data/roadmaps/server-side-game-developer/content/dns@yNytLrQAMKBw4t73YRL3J.md index 7aa4dcec079b..2e4439afe46d 100644 --- a/src/data/roadmaps/server-side-game-developer/content/dns@yNytLrQAMKBw4t73YRL3J.md +++ b/src/data/roadmaps/server-side-game-developer/content/dns@yNytLrQAMKBw4t73YRL3J.md @@ -2,7 +2,7 @@ **Domain Name System (DNS)** is an internet service that translates domain names into IP addresses. The internet uses IP addresses to locate and connect different computers, but these numerical addresses can be difficult to remember or use practically. Therefore, DNS allows users to type in a domain name, such as www.example.com, and it translates this name into the equivalent IP address, such as 192.0.2.1. It is used every time you visit a website, send an email, or connect to any service on the internet. DNS serves as the internet's phone book, ensuring that every domain name corresponds to the correct IP address. -Learn more from the following resources: +Visit the following resources to learn more: - [@article@What Is the DNS Protocol? - IBM](https://www.ibm.com/think/topics/dns-protocol) - [@article@Domain Name System - Wikipedia](https://en.wikipedia.org/wiki/Domain_Name_System) diff --git a/src/data/roadmaps/server-side-game-developer/content/docker-compose@yAf7VDX7dyaT5AdlNnuKD.md b/src/data/roadmaps/server-side-game-developer/content/docker-compose@yAf7VDX7dyaT5AdlNnuKD.md index ca1487dfadab..afb58536f7d5 100644 --- a/src/data/roadmaps/server-side-game-developer/content/docker-compose@yAf7VDX7dyaT5AdlNnuKD.md +++ b/src/data/roadmaps/server-side-game-developer/content/docker-compose@yAf7VDX7dyaT5AdlNnuKD.md @@ -2,7 +2,7 @@ `Docker Compose` is a tool that allows you to define and manage multiple containers as a single entity. The containers are defined in a `docker-compose.yml` file using a YAML format. This tool is primarily focused on the runtime aspects of your application such as service definitions, configuration, and connections. With `Docker Compose`, you can start, stop, and manage the entire stack of services with a single command. This makes it a very powerful tool for managing multi-container applications. It is also a good method to define a local development environment that mimics your production environment. -Learn more from the following resources: +Visit the following resources to learn more: - [@official@Docker Compose Quickstart - Docker Docs](https://docs.docker.com/compose/gettingstarted/) - [@official@Docker Compose Overview - Docker Docs](https://docs.docker.com/compose/) diff --git a/src/data/roadmaps/server-side-game-developer/content/docker@zW_7VLeEHQp8fp_f5N__0.md b/src/data/roadmaps/server-side-game-developer/content/docker@zW_7VLeEHQp8fp_f5N__0.md index 680ed927a09b..ca97f75a962e 100644 --- a/src/data/roadmaps/server-side-game-developer/content/docker@zW_7VLeEHQp8fp_f5N__0.md +++ b/src/data/roadmaps/server-side-game-developer/content/docker@zW_7VLeEHQp8fp_f5N__0.md @@ -2,7 +2,7 @@ "Docker" is an open-source platform that allows developers to automate the deployment, scaling, and management of applications. It uses containerization technologies to wrap up an application with its runtime environment into a container, which can then be run on almost any operating system. Docker containers are lightweight and fast because they do not need the extra load of a hypervisor, but run directly within the host machine's kernel. Additionally, Docker ensures that the application runs seamlessly in any environment by bundling its own software, libraries and system tools. Docker really simplifies the process of managing and deploying services in a distributed environment and breaking down tasks into separate services. -Learn more from the following resources: +Visit the following resources to learn more: - [@article@A Docker Tutorial for Beginners](https://docker-curriculum.com/) - [@official@Docker 101 Tutorial - Docker](https://www.docker.com/101-tutorial/) diff --git a/src/data/roadmaps/server-side-game-developer/content/dump-analysis@1c6EqGv1g-d8M1i0vKImb.md b/src/data/roadmaps/server-side-game-developer/content/dump-analysis@1c6EqGv1g-d8M1i0vKImb.md index 2a03c7a61ac7..586121efc838 100644 --- a/src/data/roadmaps/server-side-game-developer/content/dump-analysis@1c6EqGv1g-d8M1i0vKImb.md +++ b/src/data/roadmaps/server-side-game-developer/content/dump-analysis@1c6EqGv1g-d8M1i0vKImb.md @@ -2,7 +2,7 @@ **Dump Analysis** is a highly useful technique in server-side game development, primarily used for debugging and troubleshooting. It involves studying the 'dump' or all the information within a system when a program crashes or fails. This dump typically includes the system's memory, the active processes, thread stacks, and more. By analyzing this data, developers can get an insight into what caused the failure. Dump analysis can be manual, using debuggers like WinDbg, lldb, gdb, or automated with tools such as Microsoft's Automatic Debugging Tool (ADPlus) and DebugDiag. Note that the complexity of dump analysis can vary depending on the nature of the program crash or the size of the dump. -Learn more from the following resources: +Visit the following resources to learn more: - [@official@WinDbg Installation and Overview - Microsoft Learn](https://learn.microsoft.com/en-us/windows-hardware/drivers/debugger/) - [@article@Basic Hang Dump Analysis Using WinDbg - Poppastring](https://www.poppastring.com/blog/basic-hang-dump-analysis-using-windbg) diff --git a/src/data/roadmaps/server-side-game-developer/content/dynamodb@9vc7sFE_XakYXtKRMxLXi.md b/src/data/roadmaps/server-side-game-developer/content/dynamodb@9vc7sFE_XakYXtKRMxLXi.md index 0e423b5ea7e9..4c5f33e8f51a 100644 --- a/src/data/roadmaps/server-side-game-developer/content/dynamodb@9vc7sFE_XakYXtKRMxLXi.md +++ b/src/data/roadmaps/server-side-game-developer/content/dynamodb@9vc7sFE_XakYXtKRMxLXi.md @@ -2,7 +2,7 @@ DynamoDB is a NoSQL database service provided by Amazon that delivers reliable performance at any scale. It's a fully managed, multiregion, multimaster database that offers built-in security, backup and restore, and in-memory caching. It's meant to support applications with large scale, low latency requirements. Developers can create database tables that can store and fetch any amount of data and can serve traffic from a few requests per month to millions of requests per second. As a part of AWS, DynamoDB integrates well with other AWS services and provides developers with high availability across multiple geographical regions. -Learn more from the following resources: +Visit the following resources to learn more: - [@official@What is Amazon DynamoDB? - AWS Docs](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/Introduction.html) - [@official@Getting Started with DynamoDB - AWS Docs](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/GettingStartedDynamoDB.html) diff --git a/src/data/roadmaps/server-side-game-developer/content/epoll@qaWv4gxnnj3uX8lEm9KQ4.md b/src/data/roadmaps/server-side-game-developer/content/epoll@qaWv4gxnnj3uX8lEm9KQ4.md index 66d73ab52d09..e133ad39a4c4 100644 --- a/src/data/roadmaps/server-side-game-developer/content/epoll@qaWv4gxnnj3uX8lEm9KQ4.md +++ b/src/data/roadmaps/server-side-game-developer/content/epoll@qaWv4gxnnj3uX8lEm9KQ4.md @@ -9,6 +9,6 @@ usage—making it ideal for multiplayer games and real-time applications. Visit the following resources to learn more: -- [@documentation@Linux epoll API](https://man7.org/linux/man-pages/man7/epoll.7.html) +- [@official@Linux epoll API](https://man7.org/linux/man-pages/man7/epoll.7.html) - [@article@Understanding epoll for Scalable Network Servers](https://medium.com/@copyconstruct/the-method-to-epolls-madness-d9d2d6378642) - [@article@epoll vs select vs poll](https://devarea.com/linux-io-multiplexing-select-vs-poll-vs-epoll/) \ No newline at end of file diff --git a/src/data/roadmaps/server-side-game-developer/content/erlang@QGtGx5LBEWa1DD3Y7ztUy.md b/src/data/roadmaps/server-side-game-developer/content/erlang@QGtGx5LBEWa1DD3Y7ztUy.md index 8b5231af0a6b..4cf774a44ce5 100644 --- a/src/data/roadmaps/server-side-game-developer/content/erlang@QGtGx5LBEWa1DD3Y7ztUy.md +++ b/src/data/roadmaps/server-side-game-developer/content/erlang@QGtGx5LBEWa1DD3Y7ztUy.md @@ -2,7 +2,7 @@ Erlang is a functional, general-purpose concurrent programming language that supports distributed computation. It originated in the late 1980s, born from Ericson Inc., with the aim to improve the development of telephony applications. Erlang has built-in support for concurrency, distribution and fault tolerance which make it a popular choice for developing large scale, real-time systems. The language is mostly used in sectors where systems must continue to work despite errors, such as banking, eCommerce, computer telephony and instant messaging. Over the years, Erlang has been employed in blockchain development, internet of things (IoT) and online gaming programming where robust server-side development is required. -Learn more from the following resources: +Visit the following resources to learn more: - [@article@Learn You Some Erlang for Great Good!](https://learnyousomeerlang.com/introduction) - [@article@Erlang-powered Game-like Applications - Erlang Forums](https://erlangforums.com/t/ideas-projects-of-erlang-powered-game-like-applications/971) diff --git a/src/data/roadmaps/server-side-game-developer/content/fiber@TVJrlUsg30YIM1yjsZfJI.md b/src/data/roadmaps/server-side-game-developer/content/fiber@TVJrlUsg30YIM1yjsZfJI.md index b81fd45e37e9..db49b681156b 100644 --- a/src/data/roadmaps/server-side-game-developer/content/fiber@TVJrlUsg30YIM1yjsZfJI.md +++ b/src/data/roadmaps/server-side-game-developer/content/fiber@TVJrlUsg30YIM1yjsZfJI.md @@ -1,7 +1,7 @@ # Fiber `Fiber` is a way to manage concurrency at a more granular level than threads. While threads represent a sequence of instructions that can run concurrently with other threads, a fiber is a unit of execution which only runs on its initiating thread. Fibers are scheduled by the application, not the operating system. They are great tools for implementing co-operative multitasking where you have many tasks that you want to have run concurrently, but you want to have explicit control on when they are switched in and out. For server-side game development, fibres can be particularly useful in dealing with multiple user requests, where each request might have its own fiber. -Learn more from the following resources: +Visit the following resources to learn more: - [@article@Green Thread - Wikipedia](https://en.wikipedia.org/wiki/Green_thread) - [@article@Introduction to ZIO Fibers - ZIO](https://zio.dev/reference/fiber/) diff --git a/src/data/roadmaps/server-side-game-developer/content/frp@xDYOvIbXc-iJ2zOKqe0YL.md b/src/data/roadmaps/server-side-game-developer/content/frp@xDYOvIbXc-iJ2zOKqe0YL.md index c0f9a37f699d..e8364513b9ea 100644 --- a/src/data/roadmaps/server-side-game-developer/content/frp@xDYOvIbXc-iJ2zOKqe0YL.md +++ b/src/data/roadmaps/server-side-game-developer/content/frp@xDYOvIbXc-iJ2zOKqe0YL.md @@ -1,7 +1,7 @@ # FRP `Functional Reactive Programming (FRP)` is an approach to programming that combines functional and reactive concepts, mainly used in front-end and server-side development especially in games. FRP helps to deal with dependent changes, effectively handling 'time-varying values'. It is the elegant solution to describe systems where the current state depends on the future or the past state in a clear and efficient way. Its major concepts include streams (sequences of events over time), observers (consumers of values from a stream), and observables (producers of values), which are the heart of the FRP system. Through these characteristics, it manages data flows and propagation of change making software logic more readable and easier to understand. -Learn more from the following resources: +Visit the following resources to learn more: - [@article@The Introduction to Reactive Programming You've Been Missing - Andre Staltz](https://gist.github.com/staltz/868e7e9bc2a7b8c1f754) - [@article@Functional Reactive Programming: A Comprehensive Guide - AlgoCademy](https://algocademy.com/blog/functional-reactive-programming-a-comprehensive-guide-for-modern-developers/) diff --git a/src/data/roadmaps/server-side-game-developer/content/function@YPvm8XD_FaFYCQ-b7-KsH.md b/src/data/roadmaps/server-side-game-developer/content/function@YPvm8XD_FaFYCQ-b7-KsH.md index c457effa3885..8152857ed11c 100644 --- a/src/data/roadmaps/server-side-game-developer/content/function@YPvm8XD_FaFYCQ-b7-KsH.md +++ b/src/data/roadmaps/server-side-game-developer/content/function@YPvm8XD_FaFYCQ-b7-KsH.md @@ -1,7 +1,7 @@ # Function In server-side game development, functions are a fundamental building block of programming. These are reusable pieces of code designed to perform a particular task. Developers create functions to streamline code, improve readability, and enhance the efficiency of their program. Functions can take parameters as input and return a result. The syntax for declaring a function varies from one programming language to another. However, the basic structure remains the same. It usually starts with a function keyword, followed by the function name and parentheses `()`. Inside these parentheses, we can pass parameters. These parameters are then utilized within the function's body enclosed within curly brackets `{}`. The outputs are typically returned using a return statement. Remember, each function should ideally perform one task, and the function name should accurately represent its purpose to make the code self-explanatory. -Learn more from the following resources: +Visit the following resources to learn more: - [@article@First-class Function - Wikipedia](https://en.wikipedia.org/wiki/First-class_function) - [@article@First-class Function - MDN Web Docs](https://developer.mozilla.org/en-US/docs/Glossary/First-class_Function) diff --git a/src/data/roadmaps/server-side-game-developer/content/functional-programming@HXSWvhgT4L5w6xgOO-3kj.md b/src/data/roadmaps/server-side-game-developer/content/functional-programming@HXSWvhgT4L5w6xgOO-3kj.md index 3179b1cdc419..e42b548e7e85 100644 --- a/src/data/roadmaps/server-side-game-developer/content/functional-programming@HXSWvhgT4L5w6xgOO-3kj.md +++ b/src/data/roadmaps/server-side-game-developer/content/functional-programming@HXSWvhgT4L5w6xgOO-3kj.md @@ -2,7 +2,7 @@ `Functional programming` is a programming paradigm that treats computation as the evaluation of mathematical functions and avoids changing-state and mutable data. In functional programming, functions are first-class citizens. This means that functions can be passed as arguments to other functions, returned as values from other functions, and assigned to variables. Examples of functional programming languages include Haskell, Lisp, and Scala. At the heart of functional programming are the concepts of immutability and pure functions. A pure function is a function that provides the same output for the same input and has no side effects. Immutability avoids changes to variables or objects once they've been created, which makes functional programs easier to debug and test. -Learn more from the following resources: +Visit the following resources to learn more: - [@article@Functional Programming - Wikipedia](https://en.wikipedia.org/wiki/Functional_programming) - [@article@What is Functional Programming? - IBM](https://www.ibm.com/think/topics/functional-programming) diff --git a/src/data/roadmaps/server-side-game-developer/content/future--promises@zbIbPlqTNSbJUkqH9iLQv.md b/src/data/roadmaps/server-side-game-developer/content/future--promises@zbIbPlqTNSbJUkqH9iLQv.md index 8e5df65abd89..6173e531447c 100644 --- a/src/data/roadmaps/server-side-game-developer/content/future--promises@zbIbPlqTNSbJUkqH9iLQv.md +++ b/src/data/roadmaps/server-side-game-developer/content/future--promises@zbIbPlqTNSbJUkqH9iLQv.md @@ -2,7 +2,7 @@ `Futures and promises` or simply `Promises` in programming is a pattern used for handling asynchronous operations. A `Promise` is an object that might produce a single value or error in the future either through a non-blocking way or in an asynchronous way. A `Promise` has three states - pending, resolved (success), and rejected (error). The Promise transitions from the Pending state to either an accomplished Resolved state, or Rejected state. These status changes are irreversible, meaning once the Promise reaches either Resolved or Rejected state, it cannot transition to any other state. -Learn more from the following resources: +Visit the following resources to learn more: - [@article@Futures and Promises - Wikipedia](https://en.wikipedia.org/wiki/Futures_and_promises) - [@article@Promise - MDN Web Docs](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise) diff --git a/src/data/roadmaps/server-side-game-developer/content/gcp@wD6dUrS-tP2gpCHPghFp5.md b/src/data/roadmaps/server-side-game-developer/content/gcp@wD6dUrS-tP2gpCHPghFp5.md index 4b16ad545742..2982069dd2fb 100644 --- a/src/data/roadmaps/server-side-game-developer/content/gcp@wD6dUrS-tP2gpCHPghFp5.md +++ b/src/data/roadmaps/server-side-game-developer/content/gcp@wD6dUrS-tP2gpCHPghFp5.md @@ -1,7 +1,7 @@ # Google Cloud Platform **Google Cloud Platform (GCP)** is a suite of public cloud computing services offered by Google. It provides a range of services including compute, storage, networking, Big Data, machine learning, and the internet of things (IoT), plus cloud management, security, and developer tools. The core cloud computing products in GCP consist of Google Compute Engine, Google App Engine, Google Container Engine, Google Cloud Storage, and Google Cloud SQL. Google also offers cloud services for source code management, load balancing, security and privacy, and more. The architecture of GCP is built on the same infrastructure that Google uses for its global products such as YouTube, Google Search, and Google Maps. -Learn more from the following resources: +Visit the following resources to learn more: - [@article@Set Up a Multiplayer Game Server with Google Cloud - Google Cloud Blog](https://cloud.google.com/blog/products/media-entertainment/set-up-a-multiplayer-game-server-with-google-cloud) - [@article@Google Cloud Game Servers with Mark Mandel - Google Cloud Podcast](https://www.gcppodcast.com/post/episode-246-google-cloud-game-servers-with-mark-mandel/) diff --git a/src/data/roadmaps/server-side-game-developer/content/go@d5iQYn97vuoxJnCFGPdOa.md b/src/data/roadmaps/server-side-game-developer/content/go@d5iQYn97vuoxJnCFGPdOa.md index 433981c92a5b..9f06082397e6 100644 --- a/src/data/roadmaps/server-side-game-developer/content/go@d5iQYn97vuoxJnCFGPdOa.md +++ b/src/data/roadmaps/server-side-game-developer/content/go@d5iQYn97vuoxJnCFGPdOa.md @@ -1,6 +1,6 @@ # Go -Learn more from the following resources: +Visit the following resources to learn more: - [@article@Making a Multiplayer Game with Go and gRPC - Mortenson](https://mortenson.coffee/blog/making-multiplayer-game-go-and-grpc) - [@article@Effective Go - Go Dev](https://go.dev/doc/effective_go) diff --git a/src/data/roadmaps/server-side-game-developer/content/goroutine-go@f-L_eaZd0EjBW9-n9Pllt.md b/src/data/roadmaps/server-side-game-developer/content/goroutine-go@f-L_eaZd0EjBW9-n9Pllt.md index 662acea48230..052d2627ca4a 100644 --- a/src/data/roadmaps/server-side-game-developer/content/goroutine-go@f-L_eaZd0EjBW9-n9Pllt.md +++ b/src/data/roadmaps/server-side-game-developer/content/goroutine-go@f-L_eaZd0EjBW9-n9Pllt.md @@ -1,7 +1,7 @@ # goroutine (Go) `Goroutine` is a lightweight thread managed by the Go runtime. They are functions or methods that run concurrently with other functions or methods in the Go programming language. Goroutines are cheaper than threads as they use less memory, and their creation and destruction are more efficient in terms of performance. Unlike threads in other languages, the Go runtime manages the scheduling of Goroutines, taking a lot of the complexities away from the developer. Goroutines are one of the unique features of Go, making it an excellent choice for concurrent programming, especially useful in server-side game development. -Learn more from the following resources: +Visit the following resources to learn more: - [@article@Goroutines in Go: A Practical Guide to Concurrency - GetStream](https://getstream.io/blog/goroutines-go-concurrency-guide/) - [@article@Learn How to Use Concurrency in Go - TheServerSide](https://www.theserverside.com/tutorial/Learn-how-to-use-concurrency-in-Go-with-this-tutorial) diff --git a/src/data/roadmaps/server-side-game-developer/content/grpc@_uqTTBUYAzDHbEUkDzmzg.md b/src/data/roadmaps/server-side-game-developer/content/grpc@_uqTTBUYAzDHbEUkDzmzg.md index 836a3b51dfe8..51c5d64f7372 100644 --- a/src/data/roadmaps/server-side-game-developer/content/grpc@_uqTTBUYAzDHbEUkDzmzg.md +++ b/src/data/roadmaps/server-side-game-developer/content/grpc@_uqTTBUYAzDHbEUkDzmzg.md @@ -1,7 +1,7 @@ # gRPC `gRPC` (Google Remote Procedure Call) is a high-performance, open-source universal RPC framework designed by Google. The gRPC framework supports a wide range of languages, and it is based on the proto3 protocol buffer (protobuf) language. It uses Protocol Buffers as the interface definition language for defining the method parameters service and return types. gRPC is designed to work over a variety of different pluggable transports and also supports load balancing, tracing, health checking and authentication. It's functionality is particularly suited for point-to-point services within a microservice architecture. -Learn more from the following resources: +Visit the following resources to learn more: - [@article@Introduction to gRPC - gRPC.io](https://grpc.io/docs/what-is-grpc/introduction/) - [@article@gRPC Documentation - gRPC.io](https://grpc.io/docs/) diff --git a/src/data/roadmaps/server-side-game-developer/content/heavy-vs-lightweight@OYXKtl4A-vaK6yGO6hS6n.md b/src/data/roadmaps/server-side-game-developer/content/heavy-vs-lightweight@OYXKtl4A-vaK6yGO6hS6n.md index d406c5d7308f..d90c116fb9ca 100644 --- a/src/data/roadmaps/server-side-game-developer/content/heavy-vs-lightweight@OYXKtl4A-vaK6yGO6hS6n.md +++ b/src/data/roadmaps/server-side-game-developer/content/heavy-vs-lightweight@OYXKtl4A-vaK6yGO6hS6n.md @@ -4,7 +4,7 @@ TCP (Transmission Control Protocol) is often described as a "heavyweight" protoc On the other hand, UDP (User Datagram Protocol) is known as a "lightweight" protocol. It is simpler and faster because it does not offer the same extensive features as TCP. UDP does not guarantee delivery, does not require initial handshake establishment between communicating systems, and does not put data packets in order, thereby reducing the computation and rendering it lightweight. -Learn more from the following resources: +Visit the following resources to learn more: - [@article@Processes and Threads - Microsoft Learn](https://learn.microsoft.com/en-us/windows/win32/procthread/processes-and-threads) - [@article@Operating Systems: Threads - UIC](https://www.cs.uic.edu/~jbell/CourseNotes/OperatingSystems/4_Threads.html) diff --git a/src/data/roadmaps/server-side-game-developer/content/io_uring@YH7u1FKh85wz78J0stuzS.md b/src/data/roadmaps/server-side-game-developer/content/io_uring@YH7u1FKh85wz78J0stuzS.md index e700914f4cc1..84a7d81f8a16 100644 --- a/src/data/roadmaps/server-side-game-developer/content/io_uring@YH7u1FKh85wz78J0stuzS.md +++ b/src/data/roadmaps/server-side-game-developer/content/io_uring@YH7u1FKh85wz78J0stuzS.md @@ -10,8 +10,8 @@ game servers to handle thousands of concurrent connections with minimal CPU usag Visit the following resources to learn more: -- [@documentation@Linux io_uring_enter](https://man7.org/linux/man-pages/man2/io_uring_enter.2.html) +- [@official@Linux io_uring_enter](https://man7.org/linux/man-pages/man2/io_uring_enter.2.html) - [@article@Efficient Networking with io_uring](https://lwn.net/Articles/776703/) - [@article@io_uring by Example: Introduction - Unixism](https://unixism.net/2020/04/io-uring-by-example-part-1-introduction/) -- [@documentation@io_uring(7) Linux Manual Page - man7.org](https://man7.org/linux/man-pages/man7/io_uring.7.html) +- [@official@io_uring(7) Linux Manual Page - man7.org](https://man7.org/linux/man-pages/man7/io_uring.7.html) - [@article@Why You Should Use io_uring for Network I/O - Red Hat](https://developers.redhat.com/articles/2023/04/12/why-you-should-use-iouring-network-io) diff --git a/src/data/roadmaps/server-side-game-developer/content/iocp@7pgdOZomhGilBTwfJLMbm.md b/src/data/roadmaps/server-side-game-developer/content/iocp@7pgdOZomhGilBTwfJLMbm.md index 078605cace55..c477769442e0 100644 --- a/src/data/roadmaps/server-side-game-developer/content/iocp@7pgdOZomhGilBTwfJLMbm.md +++ b/src/data/roadmaps/server-side-game-developer/content/iocp@7pgdOZomhGilBTwfJLMbm.md @@ -11,7 +11,7 @@ choice for high-performance Windows-based game networking. Visit the following resources to learn more: -- [@documentation@Microsoft IOCP Documentation](https://learn.microsoft.com/en-us/windows/win32/fileio/i-o-completion-ports) +- [@official@Microsoft IOCP Documentation](https://learn.microsoft.com/en-us/windows/win32/fileio/i-o-completion-ports) - [@article@I/O Completion Ports Advantages and Disadvantages - Stack Overflow](https://stackoverflow.com/questions/5283032/i-o-completion-ports-advantages-and-disadvantages) - [@article@IO Completion Ports - Matt Godbolt](https://xania.org/200807/iocp) - [@article@Asynchronous I/O in Windows for Unix Programmers - Ryan Dahl](https://tinyclouds.org/iocp-links/) diff --git a/src/data/roadmaps/server-side-game-developer/content/ip-addressing@3ZcJNDCHw2pFzewmoB-03.md b/src/data/roadmaps/server-side-game-developer/content/ip-addressing@3ZcJNDCHw2pFzewmoB-03.md index 34ade19bb560..de5601fa4c37 100644 --- a/src/data/roadmaps/server-side-game-developer/content/ip-addressing@3ZcJNDCHw2pFzewmoB-03.md +++ b/src/data/roadmaps/server-side-game-developer/content/ip-addressing@3ZcJNDCHw2pFzewmoB-03.md @@ -2,7 +2,7 @@ IP (Internet Protocol) addressing is a fundamental aspect of networking, at the core of interaction between systems in a network. Each device connected to a network must have a unique address, known as an IP address, to communicate with other devices. In version 4 of the IP protocol (IPv4), these addresses are usually represented as four numbers, each ranging from 0 to 255, separated by periods (e.g., 192.168.1.1). The newer standard, IPv6, introduced to deal with the shortage of available IPv4 addresses, employs a more complex notation using hexadecimal numbers and colons. However, the purpose remains the same: to uniquely identify each device on a network. IP addresses can be either static (permanently assigned to a device) or dynamic (assigned temporarily from a pool of addresses). -Learn more from the following resources: +Visit the following resources to learn more: - [@article@TCP/IP Addressing and Subnetting - Microsoft Learn](https://learn.microsoft.com/en-us/troubleshoot/windows-client/networking/tcpip-addressing-and-subnetting) - [@article@What is an IP Address? - IBM](https://www.ibm.com/think/topics/ip-address) diff --git a/src/data/roadmaps/server-side-game-developer/content/ip@tg94V7K0mgYhpkUMp_Scv.md b/src/data/roadmaps/server-side-game-developer/content/ip@tg94V7K0mgYhpkUMp_Scv.md index 910ceb9b9e8d..15ae6d7952be 100644 --- a/src/data/roadmaps/server-side-game-developer/content/ip@tg94V7K0mgYhpkUMp_Scv.md +++ b/src/data/roadmaps/server-side-game-developer/content/ip@tg94V7K0mgYhpkUMp_Scv.md @@ -2,7 +2,7 @@ **Internet Protocol (IP)** is the primary method used to send and receive messages on the internet. It's a set of rules that dictate how data should be delivered over the internet. An IP address is a unique string of numbers separated by periods that identifies each device using the Internet Protocol to communicate over a network. There are two types: IPv4 and IPv6. IPv4, the most common, consists of four groups of numbers, each ranging from 0 to 255. For example, "192.168.0.1". On the other hand, IPv6, the next-generation protocol, provides about 340 undecillion addresses, ensuring the ability to provide unique IPs for every device on the planet. For instance, "2001:0db8:85a3:0000:0000:8a2e:0370:7334". Each IP address can be static (permanent) or dynamic (changeable), depending on your network configurations. -Learn more from the following resources: +Visit the following resources to learn more: - [@article@Internet Protocol - Wikipedia](https://en.wikipedia.org/wiki/Internet_Protocol) - [@article@IP Network (Internet Protocol Network) - Kentik](https://www.kentik.com/kentipedia/ip-network/) diff --git a/src/data/roadmaps/server-side-game-developer/content/ipv4@pHVB0K8Vtk3ToD6n_f1wv.md b/src/data/roadmaps/server-side-game-developer/content/ipv4@pHVB0K8Vtk3ToD6n_f1wv.md index 7931c77a1f12..450af9ba9324 100644 --- a/src/data/roadmaps/server-side-game-developer/content/ipv4@pHVB0K8Vtk3ToD6n_f1wv.md +++ b/src/data/roadmaps/server-side-game-developer/content/ipv4@pHVB0K8Vtk3ToD6n_f1wv.md @@ -2,7 +2,7 @@ `IPv4`, or Internet Protocol Version 4, is the fourth version of IP (Internet Protocol). It's a foundational protocol that routes most of the Internet traffic today, even with the growing reach of IPv6. `IPv4` is responsible for identifying devices on a network through an addressing system. The `IPv4` uses a 32-bit address schema allowing for a total of just over 4 billion addresses. Most importantly, `IPv4` determines how data is sent and received over network devices. This standard of `IPv4` helps to route data between networks and has been foundational in the creation of the modern Internet. -Learn more from the following resources: +Visit the following resources to learn more: - [@article@How IPv4 Works - A Handbook for Developers - freeCodeCamp](https://www.freecodecamp.org/news/how-ipv4-works-a-handbook-for-developers/) - [@article@IPv4 - Wikipedia](https://en.wikipedia.org/wiki/IPv4) diff --git a/src/data/roadmaps/server-side-game-developer/content/ipv6@TqBlAMfhARhlJed6xD7eg.md b/src/data/roadmaps/server-side-game-developer/content/ipv6@TqBlAMfhARhlJed6xD7eg.md index b8803e24bf95..a069251e9403 100644 --- a/src/data/roadmaps/server-side-game-developer/content/ipv6@TqBlAMfhARhlJed6xD7eg.md +++ b/src/data/roadmaps/server-side-game-developer/content/ipv6@TqBlAMfhARhlJed6xD7eg.md @@ -2,7 +2,7 @@ IPv6, which stands for Internet Protocol version 6, is the most recent version of the Internet Protocol (IP), formulated to rectify the impending issue of IPv4 address exhaustion. Unlike IPv4, which uses 32-bit address, IPv6 employs a 128-bit address, enabling a massive number of unique IP addresses to exist. This augments the capacity of the internet to accommodate an array of networks and devices, serving as a sustainable solution for an ever-expanding digital world. IPv6 also provides enhanced functionalities including simplified header format, improved support for extensions and options, built-in security using IPsec, and better support for QoS (Quality of Service). In server side game development, IPv6 ensures smooth and lag-free game experiences to players by enabling direct peer-to-peer connections. -Learn more from the following resources: +Visit the following resources to learn more: - [@article@Introduction to IPv6 - NetworkLessons](https://networklessons.com/ipv6/introduction-to-ipv6) - [@course@IPv6 Fundamentals - NetworkAcademy](https://www.networkacademy.io/ccna/ipv6) diff --git a/src/data/roadmaps/server-side-game-developer/content/java@LG8JPL1po-gEs1V5JyC8F.md b/src/data/roadmaps/server-side-game-developer/content/java@LG8JPL1po-gEs1V5JyC8F.md index 8acf95f78b0c..dc8820d4e428 100644 --- a/src/data/roadmaps/server-side-game-developer/content/java@LG8JPL1po-gEs1V5JyC8F.md +++ b/src/data/roadmaps/server-side-game-developer/content/java@LG8JPL1po-gEs1V5JyC8F.md @@ -2,7 +2,7 @@ Java is an object-oriented programming language that is class-based and designed to have as few implementation dependencies as possible. It was originally developed by James Gosling at Sun Microsystems and released in 1995 as a core component of Sun Microsystems' Java platform. The language's syntax has much in common with C and C++, but its object model is simpler and has less low-level facilities. Java applications are typically compiled to bytecode that can run on any Java Virtual Machine (JVM), making Java applications highly portable. Java is a general-purpose programming language and is used widely for server-side applications, particularly in high-performance environments where speed and scalability are critical. -Learn more from the following resources: +Visit the following resources to learn more: - [@official@Netty - Asynchronous Event-Driven Network Framework](https://netty.io/) - [@article@A Quick Guide to Java on Netty - Okta Developer](https://developer.okta.com/blog/2019/11/25/java-netty-webflux) diff --git a/src/data/roadmaps/server-side-game-developer/content/javascript@ufufnULqsglE5VhEIAdSI.md b/src/data/roadmaps/server-side-game-developer/content/javascript@ufufnULqsglE5VhEIAdSI.md index de30f51924cd..ef4c2cb4205c 100644 --- a/src/data/roadmaps/server-side-game-developer/content/javascript@ufufnULqsglE5VhEIAdSI.md +++ b/src/data/roadmaps/server-side-game-developer/content/javascript@ufufnULqsglE5VhEIAdSI.md @@ -2,7 +2,7 @@ JavaScript (often abbreviated as JS) is a high-level, interpreted programming language that conforms to the ECMAScript specification. It plays a key role in web development as it is one of the three core languages of the World Wide Web, along with HTML and CSS. In server-side game development, JavaScript can be utilized through runtime environments such as Node.js. Over the years, JavaScript has evolved to incorporate additional features, such as support for object-oriented and functional programming styles. It is dynamically-typed, and supports event-driven programming, which is especially handy in game development for handling user inputs and system events. Despite its name, JavaScript is not related to Java. -Learn more from the following resources: +Visit the following resources to learn more: - [@official@Socket.IO - Real-Time Bidirectional Event-Based Communication](https://socket.io/) - [@article@Express/Node.js Server-Side Development - MDN](https://developer.mozilla.org/en-US/docs/Learn_web_development/Extensions/Server-side/Express_Nodejs) diff --git a/src/data/roadmaps/server-side-game-developer/content/json@y0ZJQQfi8Qx6sB4WnZlP5.md b/src/data/roadmaps/server-side-game-developer/content/json@y0ZJQQfi8Qx6sB4WnZlP5.md index 9d9de49a39a1..f09b3ba242b7 100644 --- a/src/data/roadmaps/server-side-game-developer/content/json@y0ZJQQfi8Qx6sB4WnZlP5.md +++ b/src/data/roadmaps/server-side-game-developer/content/json@y0ZJQQfi8Qx6sB4WnZlP5.md @@ -2,7 +2,7 @@ **JSON (JavaScript Object Notation)** is a lightweight data-interchange format that is easy to read and write for humans, also easy to parse and generate for machines. JSON is a text format that is completely language independent but uses conventions familiar to programmers of the C family of languages, including C, C++, C#, Java, JavaScript, Perl, and Python. In JSON, data is organized in name-value pairs and array data types. It is commonly used for transmitting data in server to web applications and vice versa. -Learn more from the following resources: +Visit the following resources to learn more: - [@article@JSON Official Website - json.org](https://www.json.org/) - [@article@RFC 8259 - The JSON Data Interchange Format - IETF](https://datatracker.ietf.org/doc/html/rfc8259) diff --git a/src/data/roadmaps/server-side-game-developer/content/kqueue@caK32NMMrn-3BGAXZoPPr.md b/src/data/roadmaps/server-side-game-developer/content/kqueue@caK32NMMrn-3BGAXZoPPr.md index af3aebee2891..c7a891c1f117 100644 --- a/src/data/roadmaps/server-side-game-developer/content/kqueue@caK32NMMrn-3BGAXZoPPr.md +++ b/src/data/roadmaps/server-side-game-developer/content/kqueue@caK32NMMrn-3BGAXZoPPr.md @@ -10,8 +10,8 @@ multiplayer game servers, ensuring low-latency interactions and optimized resour Visit the following resources to learn more: -- [@documentation@FreeBSD kqueue Documentation](https://man.freebsd.org/cgi/man.cgi?query=kqueue) -- [@documentation@macOS kqueue API Reference](https://developer.apple.com/library/archive/documentation/System/Conceptual/ManPages_iPhoneOS/man2/kqueue.2.html) +- [@official@FreeBSD kqueue Documentation](https://man.freebsd.org/cgi/man.cgi?query=kqueue) +- [@official@macOS kqueue API Reference](https://developer.apple.com/library/archive/documentation/System/Conceptual/ManPages_iPhoneOS/man2/kqueue.2.html) - [@article@Kernel Queue: The Complete Guide - Habr](https://habr.com/en/articles/600123/) - [@article@Using Kernel Queues (kqueue) Notifications in Swift - RDerik](https://rderik.com/blog/using-kernel-queues-kqueue-notifications-in-swift/) - [@article@Kqueue Madness - FreeBSD Foundation](https://freebsdfoundation.org/wp-content/uploads/2014/05/Kqueue-Madness.pdf) diff --git a/src/data/roadmaps/server-side-game-developer/content/kubernetes@lUBUUoETjfADmM4OPtwwX.md b/src/data/roadmaps/server-side-game-developer/content/kubernetes@lUBUUoETjfADmM4OPtwwX.md index 50236b83970d..4238e55b9b70 100644 --- a/src/data/roadmaps/server-side-game-developer/content/kubernetes@lUBUUoETjfADmM4OPtwwX.md +++ b/src/data/roadmaps/server-side-game-developer/content/kubernetes@lUBUUoETjfADmM4OPtwwX.md @@ -2,7 +2,7 @@ Kubernetes, often referred to as K8s, is an open-source platform designed to automate deploying, scaling, and operating application containers. It organizes containers into clusters to provide a flexible, powerful foundation for distributed systems. The platform was originally developed by Google, drawing on their long experience with managing containerized applications. It groups an application's containers into logical units for easy management and discovery. Kubernetes offers features like automatic bin packing, horizontal scaling, automated rollouts and rollbacks, and storage orchestration, among many others. It supports a variety of underlying infrastructures, from physical servers to virtual machines and cloud-based deployments, allowing you to run your apps wherever and however you choose. -Learn more from the following resources: +Visit the following resources to learn more: - [@official@Learn Kubernetes Basics - Kubernetes](https://kubernetes.io/docs/tutorials/kubernetes-basics/) - [@official@Getting Started with Kubernetes](https://kubernetes.io/docs/setup/) diff --git a/src/data/roadmaps/server-side-game-developer/content/link-capacity@OzY-LPcfj1sBm_0F0WbIJ.md b/src/data/roadmaps/server-side-game-developer/content/link-capacity@OzY-LPcfj1sBm_0F0WbIJ.md index 273b13c5b8f5..ed73cf424e14 100644 --- a/src/data/roadmaps/server-side-game-developer/content/link-capacity@OzY-LPcfj1sBm_0F0WbIJ.md +++ b/src/data/roadmaps/server-side-game-developer/content/link-capacity@OzY-LPcfj1sBm_0F0WbIJ.md @@ -2,7 +2,7 @@ Link capacity, also known as bandwidth, refers to the maximum amount of data that can be transmitted over a network link within a given period of time. It is usually measured in bits per second (bps), kilobits per second (Kbps), megabits per second (Mbps), gigabits per second (Gbps), or terabits per second (Tbps). The link capacity is a critical factor in determining the throughput and latency of a server, impacting the overall performance and efficiency of the network communication. Please note that link capacity can be affected by various factors such as the quality of the transmission medium, the distance between the source and destination, and the network congestion. -Learn more from the following resources: +Visit the following resources to learn more: - [@article@Bandwidth, Latency and Throughput - Network Academy](https://www.networkacademy.io/ccna/network-fundamentals/bandwidth-latency-throughput) - [@article@Latency vs Throughput vs Bandwidth - Kentik](https://www.kentik.com/kentipedia/latency-vs-throughput-vs-bandwidth/) diff --git a/src/data/roadmaps/server-side-game-developer/content/max-segment-scaling@1l5dhQWYPhUSg-cy5pSlK.md b/src/data/roadmaps/server-side-game-developer/content/max-segment-scaling@1l5dhQWYPhUSg-cy5pSlK.md index 170a3883fa4f..c3b6f43bb916 100644 --- a/src/data/roadmaps/server-side-game-developer/content/max-segment-scaling@1l5dhQWYPhUSg-cy5pSlK.md +++ b/src/data/roadmaps/server-side-game-developer/content/max-segment-scaling@1l5dhQWYPhUSg-cy5pSlK.md @@ -2,7 +2,7 @@ `Max Segment Scaling (MSS)` is a TCP feature that defines the maximum amount of data that can be received in a single TCP segment. It is specified during the TCP connection establishment phase. The MSS is calculated as the data link layer Maximum Transmission Unit (MTU) minus the size of the TCP and IP headers. The mechanism helps to avoid fragmentation at the IP layer, ensuring the data packets sent are optimal for the network path taken, preventing potential transmission inefficiencies or packet loss issues. -Learn more from the following resources: +Visit the following resources to learn more: - [@article@RFC 6691 - TCP Options and Maximum Segment Size (MSS) - IETF](https://www.rfc-editor.org/rfc/rfc6691.html) - [@article@Maximum Segment Size - Wikipedia](https://en.wikipedia.org/wiki/Maximum_segment_size) diff --git a/src/data/roadmaps/server-side-game-developer/content/max-segment-size@w6ysmcsBn9jJ8xMvg7hcD.md b/src/data/roadmaps/server-side-game-developer/content/max-segment-size@w6ysmcsBn9jJ8xMvg7hcD.md index 51aacccd3b19..4b01ba6f28ec 100644 --- a/src/data/roadmaps/server-side-game-developer/content/max-segment-size@w6ysmcsBn9jJ8xMvg7hcD.md +++ b/src/data/roadmaps/server-side-game-developer/content/max-segment-size@w6ysmcsBn9jJ8xMvg7hcD.md @@ -15,4 +15,4 @@ Visit the following resources to learn more: - [@article@RFC 879 - Maximum Segment Size](https://tools.ietf.org/html/rfc879) - [@article@What is MSS (maximum segment size)?](https://www.cloudflare.com/learning/network-layer/what-is-mss/) -- [@documentation@TCP Maximum Segment Size tuning](https://www.ibm.com/docs/en/aix/7.2?topic=tuning-tcp-maximum-segment-size) \ No newline at end of file +- [@official@TCP Maximum Segment Size tuning](https://www.ibm.com/docs/en/aix/7.2?topic=tuning-tcp-maximum-segment-size) \ No newline at end of file diff --git a/src/data/roadmaps/server-side-game-developer/content/memcached@ayeezKxQkXAPJMTShsOBU.md b/src/data/roadmaps/server-side-game-developer/content/memcached@ayeezKxQkXAPJMTShsOBU.md index 1fb1e41dd790..2940e10675f3 100644 --- a/src/data/roadmaps/server-side-game-developer/content/memcached@ayeezKxQkXAPJMTShsOBU.md +++ b/src/data/roadmaps/server-side-game-developer/content/memcached@ayeezKxQkXAPJMTShsOBU.md @@ -2,7 +2,7 @@ `Memcached` is a high-performance, distributed memory object caching system that is generic in nature, but intended for use in speeding up dynamic web applications by alleviating database loads. It does this by storing data and objects in dynamic memory to reduce the frequency with which an external data source must be read. `Memcached` is fundamentally a key-value store that operates over the network. It uses a client–server architecture where the servers maintain a common view of the data set. The clients are responsible for partitioning data and determining to which servers data items are to be written or from which servers they are to be read. -Learn more from the following resources: +Visit the following resources to learn more: - [@official@Memcached Documentation](https://docs.memcached.org/) - [@article@Distributed Caching with Memcached - Linux Journal](https://www.linuxjournal.com/article/7451) diff --git a/src/data/roadmaps/server-side-game-developer/content/message-queues@cw7WdFfL5HpeZ_n8wYk2t.md b/src/data/roadmaps/server-side-game-developer/content/message-queues@cw7WdFfL5HpeZ_n8wYk2t.md index ee57713d47a7..f4874a075cbd 100644 --- a/src/data/roadmaps/server-side-game-developer/content/message-queues@cw7WdFfL5HpeZ_n8wYk2t.md +++ b/src/data/roadmaps/server-side-game-developer/content/message-queues@cw7WdFfL5HpeZ_n8wYk2t.md @@ -2,7 +2,7 @@ Message queues are a fundamental element of server-side game development, primarily used for communication and data exchange between different processes, threads, or microservices. A message queue operates on the principle of first-in, first-out (FIFO). In the typical process, a sender submits messages to the queue, and receivers extract messages from the queue. This mechanism ensures seamless coordination between different parts of a system performing at different speeds and allows asynchronous information exchange. Features such as persistence, delivery acknowledgement, prioritization, and scheduling are commonly associated with message queues. Different technologies support message queues including RabbitMQ, Apache Kafka, and AWS SQS among others. The choice of the appropriate message queue technology can depend on specific requirements, such as the relevant programming language and the expected size and rate of message traffic. -Learn more from the following resources: +Visit the following resources to learn more: - [@article@What's the Difference Between Kafka and RabbitMQ? - AWS](https://aws.amazon.com/compare/the-difference-between-rabbitmq-and-kafka/) - [@article@Message Queue System Design Guide - System Design Handbook](https://www.systemdesignhandbook.com/guides/message-queue-system-design/) diff --git a/src/data/roadmaps/server-side-game-developer/content/mongodb@HYxtPW401-J6aYcTuiGnx.md b/src/data/roadmaps/server-side-game-developer/content/mongodb@HYxtPW401-J6aYcTuiGnx.md index 8a6750e924e9..c0fe1483fac6 100644 --- a/src/data/roadmaps/server-side-game-developer/content/mongodb@HYxtPW401-J6aYcTuiGnx.md +++ b/src/data/roadmaps/server-side-game-developer/content/mongodb@HYxtPW401-J6aYcTuiGnx.md @@ -2,7 +2,7 @@ MongoDB is a source-available NoSQL database program that uses a document-oriented database model. This model supports a variety of data types and enables you to store them in one place. MongoDB uses JSON-like documents coupled with optional schemas. What distinctly characterizes MongoDB is its scalability and flexibility that allow schemas to evolve with business needs. It can run over multiple servers, the data is duplicated to facilitate keeping the system up and the data available. Also, MongoDB supports rich queries through its powerful querying and aggregation tools. These capabilities encourage fast development and iterations. However, bear in mind that like any database, MongoDB is not a one-size-fit-all solution and understanding its best use cases is crucial for maximizing its benefits. -Learn more from the following resources: +Visit the following resources to learn more: - [@official@Getting Started with MongoDB - MongoDB Docs](https://www.mongodb.com/docs/manual/tutorial/getting-started/) - [@official@MongoDB Basics - MongoDB](https://www.mongodb.com/resources/products/fundamentals/basics) diff --git a/src/data/roadmaps/server-side-game-developer/content/ms-sql@QMNUAKAuRI9lyf2_jUPsj.md b/src/data/roadmaps/server-side-game-developer/content/ms-sql@QMNUAKAuRI9lyf2_jUPsj.md index 0ea14e78133c..ab1598c5866f 100644 --- a/src/data/roadmaps/server-side-game-developer/content/ms-sql@QMNUAKAuRI9lyf2_jUPsj.md +++ b/src/data/roadmaps/server-side-game-developer/content/ms-sql@QMNUAKAuRI9lyf2_jUPsj.md @@ -2,7 +2,7 @@ Microsoft SQL Server (MSSQL) is a relational database management system (RDBMS) developed by Microsoft. MSSQL provides an environment used to generate databases that can be accessed from workstations, the internet, or other media such as a personal digital assistant (PDA). Basically, MSSQL is a server-based SQL repository that provides back-end storage for applications. It supports a wide variety of transaction processing, business intelligence and analytics applications in corporate IT environments. MSSQL has various editions with different features to fulfill users' requirements, ranging from a free edition, Express, to the comprehensive Enterprise edition. -Learn more from the following resources: +Visit the following resources to learn more: - [@official@SQL Server Technical Documentation - Microsoft Learn](https://learn.microsoft.com/en-us/sql/sql-server/?view=sql-server-ver17) - [@article@SQL Server Tutorial - sqlservertutorial.net](https://www.sqlservertutorial.net/) diff --git a/src/data/roadmaps/server-side-game-developer/content/multithreading@3QSLUMKD0G08N3MIb1cG7.md b/src/data/roadmaps/server-side-game-developer/content/multithreading@3QSLUMKD0G08N3MIb1cG7.md index 7c905024a1f7..43d09666c341 100644 --- a/src/data/roadmaps/server-side-game-developer/content/multithreading@3QSLUMKD0G08N3MIb1cG7.md +++ b/src/data/roadmaps/server-side-game-developer/content/multithreading@3QSLUMKD0G08N3MIb1cG7.md @@ -1,7 +1,7 @@ # Multithreading Multithreading, a specialized form of multitasking, is the ability of a central processing unit (CPU) to manage multiple executions of instructions concurrently. This essentially means that multiple threads or mini-processes are executing independently yet sharing the resources of a single CPU. In programming, threads are a way to improve the application responsiveness and perform multiple operations simultaneously without requiring multiple CPUs or computers. Threads within a process share the same data space with the main thread and can, therefore, communicate more quickly with each other than if they were separate processes. Developers often use multithreading in server-side game development to manage complex operations with high efficiency. -Learn more from the following resources: +Visit the following resources to learn more: - [@article@Concurrency - Oracle Java Tutorials](https://docs.oracle.com/javase/tutorial/essential/concurrency/index.html) - [@article@Modern Multithreading and Concurrency in C++ - Educative](https://www.educative.io/blog/modern-multithreading-and-concurrency-in-cpp) diff --git a/src/data/roadmaps/server-side-game-developer/content/multithreading@_jd91rrAXGbJI9RhXlSx8.md b/src/data/roadmaps/server-side-game-developer/content/multithreading@_jd91rrAXGbJI9RhXlSx8.md index e52bb670619e..dde3b5337619 100644 --- a/src/data/roadmaps/server-side-game-developer/content/multithreading@_jd91rrAXGbJI9RhXlSx8.md +++ b/src/data/roadmaps/server-side-game-developer/content/multithreading@_jd91rrAXGbJI9RhXlSx8.md @@ -1,7 +1,7 @@ # Multithreading `Multithreading 2` in game development usually refers to an advanced level of understanding, managing, and implementing multithreaded programming. At this stage, developers are expected to manage inter-thread communications and synchronization effectively. This includes mastering the use of mutexes, locks, semaphores, and condition variables. This level extends to the fine-tuning of performance and resolving complex issues such as race conditions, deadlocks, and starvation. Furthermore, it could cover advanced topics like thread-pools and executing modern multithreaded game architectures efficiently and safely. In multithreading 2, developers learn to leverage more concurrent computing power, thus making the server more performant and responsive. -Learn more from the following resources: +Visit the following resources to learn more: - [@article@Multithreading Problems In Game Design - Erik McClure](https://erikmcclure.com/blog/multithreading-problems-in-game-design/) - [@article@Multi Threading in Game Development - Reddit](https://www.reddit.com/r/gamedev/comments/44fux4/multi_threading_in_game_development/) diff --git a/src/data/roadmaps/server-side-game-developer/content/mutex@G_BEJKkJ1_Nc43aosy_iS.md b/src/data/roadmaps/server-side-game-developer/content/mutex@G_BEJKkJ1_Nc43aosy_iS.md index dadc4a722688..c5baa78f3255 100644 --- a/src/data/roadmaps/server-side-game-developer/content/mutex@G_BEJKkJ1_Nc43aosy_iS.md +++ b/src/data/roadmaps/server-side-game-developer/content/mutex@G_BEJKkJ1_Nc43aosy_iS.md @@ -1,7 +1,7 @@ # Mutex `Mutex`, short for mutual exclusion, is a synchronization method used by developers to prevent multiple threads from concurrently accessing some shared resource or part of code. It is a locking mechanism that enforces limits to ensure that only one thread can perform certain operations at a time. If a `mutex` is locked by one thread, the other threads trying to lock it will be blocked until the owner thread unlocks it. This tool is essential especially in multi-threaded programming environments to avoid conditions like race conditions where the program's behavior may depend on the sequence of scheduling or timings of the threads. -Learn more from the following resources: +Visit the following resources to learn more: - [@article@Mutex Objects - Microsoft Learn](https://learn.microsoft.com/en-us/windows/win32/sync/mutex-objects) - [@article@Synchronization - CS 341](https://cs341.cs.illinois.edu/coursebook/Synchronization) diff --git a/src/data/roadmaps/server-side-game-developer/content/mysql@HsBqd08Ro0VJnx0FlumMQ.md b/src/data/roadmaps/server-side-game-developer/content/mysql@HsBqd08Ro0VJnx0FlumMQ.md index e680ef328203..5dd5354061cb 100644 --- a/src/data/roadmaps/server-side-game-developer/content/mysql@HsBqd08Ro0VJnx0FlumMQ.md +++ b/src/data/roadmaps/server-side-game-developer/content/mysql@HsBqd08Ro0VJnx0FlumMQ.md @@ -2,7 +2,7 @@ MySQL is an open-source relational database management system (RDBMS) that uses SQL (Structured Query Language) to interact with data. It is developed, marketed, and supported by MySQL AB, a Swedish company, and is written in C and C++. Since it's open-source, you can use MySQL completely free of charge. MySQL is primarily used for online transactions and for consolidating data. You can install it on various platforms like Linux, Windows, macOS and so on. With its comprehensive set of features like support for full-text search, cursors, triggers, stored procedures, it is powerful enough to manage even very large sets of data, making it suitable for a vast range of applications, whether they be web-based or embedded. -Learn more from the following resources: +Visit the following resources to learn more: - [@article@MySQL Tutorial - W3Schools](https://www.w3schools.com/mysql/) - [@article@MySQL Tutorial - TutorialsPoint](https://www.tutorialspoint.com/mysql/index.htm) diff --git a/src/data/roadmaps/server-side-game-developer/content/oorp@yWj70LpF4LKB8J6GbYvsq.md b/src/data/roadmaps/server-side-game-developer/content/oorp@yWj70LpF4LKB8J6GbYvsq.md index 9c8499d89071..7ce0c6eb1e1e 100644 --- a/src/data/roadmaps/server-side-game-developer/content/oorp@yWj70LpF4LKB8J6GbYvsq.md +++ b/src/data/roadmaps/server-side-game-developer/content/oorp@yWj70LpF4LKB8J6GbYvsq.md @@ -1,7 +1,7 @@ # OORP **Object-Oriented Reactive Programming (OORP)** is a programming paradigm that combines object-oriented programming (OOP) and reactive programming. In OORP, developers design the system in terms of objects that communicate with each other through messages. These messages trigger functions or "reactions" in the receiving objects, hence the term "reactive". Each object in OORP encapsulates state and behavior, follows inheritance, and promotes data abstraction, similar to traditional OOP. However, OORP operates in a more event-driven manner, responding to external events, changes, or transactions that occur over time or in response to other objects. -Learn more from the following resources: +Visit the following resources to learn more: - [@article@Introduction to Reactive Programming - Project Reactor](https://projectreactor.io/docs/core/release/reference/reactiveProgramming.html) - [@article@Reactive Programming - Wikipedia](https://en.wikipedia.org/wiki/Reactive_programming) diff --git a/src/data/roadmaps/server-side-game-developer/content/ordered-vs-unordered@WMdCDmFsytsF2AWQXfzC8.md b/src/data/roadmaps/server-side-game-developer/content/ordered-vs-unordered@WMdCDmFsytsF2AWQXfzC8.md index 9297516f4de7..7434529dcd84 100644 --- a/src/data/roadmaps/server-side-game-developer/content/ordered-vs-unordered@WMdCDmFsytsF2AWQXfzC8.md +++ b/src/data/roadmaps/server-side-game-developer/content/ordered-vs-unordered@WMdCDmFsytsF2AWQXfzC8.md @@ -1,7 +1,7 @@ # Ordered vs Not Ordered In the context of TCP vs UDP, "ordered" and "not ordered" refers to the order in which packets are received. In TCP (Transmission Control Protocol), packets are ordered. This means that the packets of data are sent and received in the same order. For example, if packet 1, packet 2, and packet 3 are sent in that order, they will be delivered and read in that exact order whether, packet 2 takes longer to send or not. On the other hand, UDP (User Datagram Protocol) is not ordered. The packets of data are independent of each other. So, if packet 1, packet 2, and packet 3 are sent in that order, they could be received in a different order such as packet 2, packet 1, then packet 3. This happens because UDP doesn't re-order packets as TCP does. -Learn more from the following resources: +Visit the following resources to learn more: - [@article@UDP vs. TCP - Gaffer on Games](http://vodacek.zvb.cz/archiv/685.html) - [@article@TCP vs UDP: Key Differences Explained - Digital Samba](https://www.digitalsamba.com/blog/tcp-and-udp-protocols) diff --git a/src/data/roadmaps/server-side-game-developer/content/orm@OyxWMFy8s7Lxko_K89fjo.md b/src/data/roadmaps/server-side-game-developer/content/orm@OyxWMFy8s7Lxko_K89fjo.md index 9c75db07a32c..fd1b7766db11 100644 --- a/src/data/roadmaps/server-side-game-developer/content/orm@OyxWMFy8s7Lxko_K89fjo.md +++ b/src/data/roadmaps/server-side-game-developer/content/orm@OyxWMFy8s7Lxko_K89fjo.md @@ -1,7 +1,7 @@ # ORM ORM stands for Object-Relational Mapping. In server-side game development, ORM is a technique that lets you interact with your database, like you would with SQL. In other words, on the server side, you create classes in your programming language (e.g., Python, JavaScript, etc.) that map to the tables in the database. Each instance of a class represents a row in the respective table. ORM libraries and tools provide methods to perform CRUD (Create, Retrieve, Update, Delete) operations without having to write raw SQL statements. Popular examples of ORM tools include Sequelize for JavaScript, SQLAlchemy for Python, and Hibernate for Java. -Learn more from the following resources: +Visit the following resources to learn more: - [@article@Object-Relational Mapping (ORM) Explained - AltexSoft](https://www.altexsoft.com/blog/orm-object-relational-mapping/) - [@article@Object-relational Mappers (ORMs) - Full Stack Python](https://www.fullstackpython.com/object-relational-mappers-orms.html) diff --git a/src/data/roadmaps/server-side-game-developer/content/out-of-band-data@3OMu3RM-6pMjqY1jAmC2-.md b/src/data/roadmaps/server-side-game-developer/content/out-of-band-data@3OMu3RM-6pMjqY1jAmC2-.md index f49a340a3187..457e36c189e1 100644 --- a/src/data/roadmaps/server-side-game-developer/content/out-of-band-data@3OMu3RM-6pMjqY1jAmC2-.md +++ b/src/data/roadmaps/server-side-game-developer/content/out-of-band-data@3OMu3RM-6pMjqY1jAmC2-.md @@ -1,7 +1,7 @@ # Out-of-Band Data "Out of band" data, in the context of server-side game development, refers to data that is transmitted separately from the main data stream. This data is used for managing control information rather than actual game data, for instance, data regarding the status of the server, notifications about issues, or urgent commands. Given its importance, it's often designed to bypass any queueing or buffering systems to be delivered straight to the application, hence its name — it is "out of band" compared to the normal data transmissions in the game. Please note, out of band data needs proper handling to prevent potential vulnerabilities including security issues. -Learn more from the following resources: +Visit the following resources to learn more: - [@article@Out-of-band Data - Wikipedia](https://en.wikipedia.org/wiki/Out-of-band_data) - [@article@Out-of-Band Data - Oracle Programming Interfaces Guide](https://docs.oracle.com/cd/E19683-01/816-5042/sockets-36/index.html) diff --git a/src/data/roadmaps/server-side-game-developer/content/packet-structure@CCxVnrGDKa1EROXgF_OAm.md b/src/data/roadmaps/server-side-game-developer/content/packet-structure@CCxVnrGDKa1EROXgF_OAm.md index 3315bcaf950a..6b9c50c259d8 100644 --- a/src/data/roadmaps/server-side-game-developer/content/packet-structure@CCxVnrGDKa1EROXgF_OAm.md +++ b/src/data/roadmaps/server-side-game-developer/content/packet-structure@CCxVnrGDKa1EROXgF_OAm.md @@ -1,7 +1,7 @@ # Packet Structure UDP or User Datagram Protocol is designed to send messages known as datagrams over the network. The packet structure of UDP is relatively simple compared to other protocol types. Each UDP header consists of 4 fields, each of 2 bytes. These 4 fields are namely: Source Port, Destination Port, Length, and Checksum. The `Source Port` is for tracking responses and `Destination Port` is for delivering the datagram on the receiving end. The `Length` specifies the entire datagram size including the header and data while the `Checksum` is used to verify the integrity of the data and header. -Learn more from the following resources: +Visit the following resources to learn more: - [@article@User Datagram Protocol (UDP) - Imperva](https://www.imperva.com/learn/ddos/udp-user-datagram-protocol/) - [@official@UDP Packet Format - Huawei Support](https://support.huawei.com/enterprise/en/doc/EDOC1100174721/23023485/udp-packet-format) diff --git a/src/data/roadmaps/server-side-game-developer/content/packet-vs-datagram@JE3uZ5U6oe6dVzsmglTl2.md b/src/data/roadmaps/server-side-game-developer/content/packet-vs-datagram@JE3uZ5U6oe6dVzsmglTl2.md index be65b9887aeb..e26db13d7a45 100644 --- a/src/data/roadmaps/server-side-game-developer/content/packet-vs-datagram@JE3uZ5U6oe6dVzsmglTl2.md +++ b/src/data/roadmaps/server-side-game-developer/content/packet-vs-datagram@JE3uZ5U6oe6dVzsmglTl2.md @@ -7,7 +7,7 @@ A **Packet** is the most general term that just refers to the encapsulated data On the other hand, a **Datagram** is a specific type of data packet. It is an independent, self-contained message sent over the network whose arrival, arrival time, and content are not guaranteed. This term is particularly associated with the UDP (User Datagram Protocol), where each transmission unit is called a datagram. The difference between packets and datagrams depends largely on the protocol being used to transmit the data. TCP (Transmission Control Protocol) data is typically referred to as a packet, whereas with UDP it is a datagram. -Learn more from the following resources: +Visit the following resources to learn more: - [@article@Datagram - Wikipedia](https://en.wikipedia.org/wiki/Datagram) - [@article@What are the differences between datagrams, frames, and network packets? - Network Engineering Stack Exchange](https://networkengineering.stackexchange.com/questions/50083/what-are-the-differences-in-the-contents-of-datagrams-frames-and-network-packe) diff --git a/src/data/roadmaps/server-side-game-developer/content/postgresql@dAiEwN7phwMyaitvM5kRl.md b/src/data/roadmaps/server-side-game-developer/content/postgresql@dAiEwN7phwMyaitvM5kRl.md index 35a8d11961ab..aa8afe1f20c4 100644 --- a/src/data/roadmaps/server-side-game-developer/content/postgresql@dAiEwN7phwMyaitvM5kRl.md +++ b/src/data/roadmaps/server-side-game-developer/content/postgresql@dAiEwN7phwMyaitvM5kRl.md @@ -1,7 +1,7 @@ # PostgreSQL **PostgreSQL** is a powerful, open-source object-relational database system. It extends the SQL language combined with many features that safely store and scale the most complicated data workloads. The origins of PostgreSQL date back to 1986 as part of the POSTGRES project at the University of California at Berkeley. It has earned a strong reputation for its proven architecture, reliability, data integrity, robust feature set, extensibility, and the dedication of the open-source community behind the software to consistently deliver performant and innovative solutions. PostgreSQL runs on all major operating systems and has been ACID-compliant since 2001. It has powerful add-ons like the popular PostGIS geospatial database extender. It can handle ranges, array types and has extensive capabilities for developing at scale. -Learn more from the following resources: +Visit the following resources to learn more: - [@official@PostgreSQL Tutorial - PostgreSQL Documentation](https://www.postgresql.org/docs/current/tutorial.html) - [@article@PostgreSQL Tutorial - Neon](https://neon.com/postgresql/tutorial) diff --git a/src/data/roadmaps/server-side-game-developer/content/proactor@Tvxe2NemcH21y-eB4bosv.md b/src/data/roadmaps/server-side-game-developer/content/proactor@Tvxe2NemcH21y-eB4bosv.md index a19dc9ed188a..35995e8acd36 100644 --- a/src/data/roadmaps/server-side-game-developer/content/proactor@Tvxe2NemcH21y-eB4bosv.md +++ b/src/data/roadmaps/server-side-game-developer/content/proactor@Tvxe2NemcH21y-eB4bosv.md @@ -2,7 +2,7 @@ The **Proactor** pattern is an event-driven application design pattern used in asynchronous programming, and is a variant of the Reactor Pattern, but with an important distinction in terms of control flow handling. Instead of the application explicitly triggering and managing operations, this responsibility is delegated to the asynchronous operation processor, also known as the proactor. The proactor initiates an asynchronous operation, and once the operation is complete, it determines the appropriate service to dispatch the completion event to. In other words, proactors are responsible for initiating asynchronous operations, while completion handlers are responsible for dictating what happens next, after the operations complete. -Learn more from the following resources: +Visit the following resources to learn more: - [@article@Proactor pattern - Wikipedia](https://en.wikipedia.org/wiki/Proactor_pattern) - [@article@The Proactor Design Pattern: Concurrency Without Threads - Boost.Asio](https://www.boost.org/doc/libs/latest/doc/html/boost_asio/overview/core/async.html) diff --git a/src/data/roadmaps/server-side-game-developer/content/programming-languages@6ilqzjvI4J1pUCmTJ33PA.md b/src/data/roadmaps/server-side-game-developer/content/programming-languages@6ilqzjvI4J1pUCmTJ33PA.md index 6e82dc7fe9d7..bd88a2daa5a6 100644 --- a/src/data/roadmaps/server-side-game-developer/content/programming-languages@6ilqzjvI4J1pUCmTJ33PA.md +++ b/src/data/roadmaps/server-side-game-developer/content/programming-languages@6ilqzjvI4J1pUCmTJ33PA.md @@ -1,8 +1,8 @@ # Programming Languages Programming languages are an essential part of game development. They create the logic and rules for how your game operates. There are various types of programming languages that a server side game developer can use, such as C++, Python, Ruby, etc. These languages have different syntax and structures, as well as varying degrees of complexity. The complexity and capabilities can affect the game's performance, security, and even its potential compatibility with other platforms. Your choice of language often depends greatly on the specific needs of the project and your personal expertise. Picking up a new language can be time-consuming, so it's important to choose wisely. Markdown is another language that's popular for documentation due to its simplicity and readability, but it isn't typically used to code server-side game elements. -Learn more from the following resources: +Visit the following resources to learn more: - [@article@Choosing the Right Programming Language for Game Server Development - Getgud](https://www.getgud.io/blog/choosing-the-right-programming-language-for-game-server-development/) - [@article@7 Best Programming Languages for Game Development - Pixelfield](https://pixelfield.co.uk/blog/best-programming-language-for-game-development/) -- [@discussion@What programming language does server development typically use? - Reddit](https://www.reddit.com/r/gamedev/comments/efxsm2/what_programming_language_does_server_development/) +- [@article@What programming language does server development typically use? - Reddit](https://www.reddit.com/r/gamedev/comments/efxsm2/what_programming_language_does_server_development/) diff --git a/src/data/roadmaps/server-side-game-developer/content/programming-techniques@tGQu18PWDatW7HvkTP-uh.md b/src/data/roadmaps/server-side-game-developer/content/programming-techniques@tGQu18PWDatW7HvkTP-uh.md index 5dd843939558..13cd43d2e30d 100644 --- a/src/data/roadmaps/server-side-game-developer/content/programming-techniques@tGQu18PWDatW7HvkTP-uh.md +++ b/src/data/roadmaps/server-side-game-developer/content/programming-techniques@tGQu18PWDatW7HvkTP-uh.md @@ -1,7 +1,7 @@ # Programming Techniques Programming techniques are methods that are used to write series of instructions (code) that a computer can interpret and execute. There are many ways one can write code, unique to both the individual and the programming language they are using. Techniques such as Object-Oriented Programming (OOP) involve the use of encapsulated objects and inheritance. Functional Programming focuses on mathematical functions, avoiding changes in state and mutable data. Procedural Programming focuses on the process of executing predefined steps of functions to achieve the end result, while Event-Driven programming primarily acts upon user interactions, like mouse clicks or key presses. You can choose one technique depending on the game development requirements, the development team's competence, and preference. -Learn more from the following resources: +Visit the following resources to learn more: - [@article@Architecture, Performance, and Games - Game Programming Patterns](https://gameprogrammingpatterns.com/architecture-performance-and-games.html) - [@article@Fast-Paced Multiplayer: Client-Server Game Architecture - Gabriel Gambetta](https://www.gabrielgambetta.com/client-server-game-architecture.html) diff --git a/src/data/roadmaps/server-side-game-developer/content/protobuf@w2zbab_6Gxw6AWS0N759U.md b/src/data/roadmaps/server-side-game-developer/content/protobuf@w2zbab_6Gxw6AWS0N759U.md index 1755a77a55f8..960adb7f2397 100644 --- a/src/data/roadmaps/server-side-game-developer/content/protobuf@w2zbab_6Gxw6AWS0N759U.md +++ b/src/data/roadmaps/server-side-game-developer/content/protobuf@w2zbab_6Gxw6AWS0N759U.md @@ -1,7 +1,7 @@ # Protobuf `Protobuf`, or Protocol Buffers, is a method developed by Google for serializing structured data. It's both language-neutral and platform-neutral. Google designed it to be smaller and faster than XML. You design your data structures in `.proto` files, then use the Protobuf compiler `protoc` to generate data access classes in your chosen language. Google provides support for several languages including: Java, C++, Python, Objective-C, and C#. Community developed support for even more languages is also available. This gives `protobuf` a great deal of versatility, making it a popular choice for data storage and communication between services. -Learn more from the following resources: +Visit the following resources to learn more: - [@official@Tutorials | Protocol Buffers Documentation](https://protobuf.dev/getting-started/) - [@official@Language Guide (proto 3) - Protocol Buffers Documentation](https://protobuf.dev/programming-guides/proto3/) diff --git a/src/data/roadmaps/server-side-game-developer/content/pthread@HU0yUyl89WD8WnR9PJn7l.md b/src/data/roadmaps/server-side-game-developer/content/pthread@HU0yUyl89WD8WnR9PJn7l.md index ab11dcadb6a9..298e0c62e17a 100644 --- a/src/data/roadmaps/server-side-game-developer/content/pthread@HU0yUyl89WD8WnR9PJn7l.md +++ b/src/data/roadmaps/server-side-game-developer/content/pthread@HU0yUyl89WD8WnR9PJn7l.md @@ -1,7 +1,7 @@ # pthread `Pthread` or POSIX threads is a standard-based thread programming library for multi-threading development. It provides several functions and methods to efficiently manage multiple threads in a program enhancing concurrency and parallelism. The library enables thread creation, thread joining and cancellation, thread-specific data, and synchronization including mutex locks, read/write locks, and condition variables. Notably, Pthread is an API for C/C++ programming language providing cross-platform support for Linux, Unix, and Windows systems. It's a fundamental tool for server-side game developers to create highly responsive and concurrent applications. -Learn more from the following resources: +Visit the following resources to learn more: - [@article@POSIX Threads Programming - LLNL HPC Tutorials](https://hpc-tutorials.llnl.gov/posix/) - [@article@POSIX thread (pthread) libraries - CMU](https://www.cs.cmu.edu/afs/cs/academic/class/15492-f07/www/pthreads.html) diff --git a/src/data/roadmaps/server-side-game-developer/content/pytorch@LTSIfq10qDJMTCnIIyqvb.md b/src/data/roadmaps/server-side-game-developer/content/pytorch@LTSIfq10qDJMTCnIIyqvb.md index eb023517d63f..7efc87d8bbfb 100644 --- a/src/data/roadmaps/server-side-game-developer/content/pytorch@LTSIfq10qDJMTCnIIyqvb.md +++ b/src/data/roadmaps/server-side-game-developer/content/pytorch@LTSIfq10qDJMTCnIIyqvb.md @@ -1,7 +1,7 @@ # Pytorch **PyTorch** is an open-source machine learning library developed by Facebook Artificial Intelligence Research team for Python-based computation. This powerful tool emphasizes flexibility and allows users to manipulate Tensor computations with the convenience of deep neural networks built on a tape-based autodifferentiation system. It provides a great platform for implementing deep learning models and is very popular for understanding and expressing dynamic neural networks. PyTorch supports dynamic computational graphs, which means the graph structure can be modified during runtime. This is particularly useful while working with recurrent neural networks. It integrates seamlessly with the python data science stack to leverage the power of libraries such as NumPy. -Learn more from the following resources: +Visit the following resources to learn more: - [@official@Learn the Basics — PyTorch Tutorials](https://docs.pytorch.org/tutorials/beginner/basics/intro.html) - [@article@Zero to Mastery Learn PyTorch for Deep Learning](https://www.learnpytorch.io/) diff --git a/src/data/roadmaps/server-side-game-developer/content/rabbitmq@UESjGrFyUbNf4pQamaBoy.md b/src/data/roadmaps/server-side-game-developer/content/rabbitmq@UESjGrFyUbNf4pQamaBoy.md index aba798e000ff..f9c27ac86a48 100644 --- a/src/data/roadmaps/server-side-game-developer/content/rabbitmq@UESjGrFyUbNf4pQamaBoy.md +++ b/src/data/roadmaps/server-side-game-developer/content/rabbitmq@UESjGrFyUbNf4pQamaBoy.md @@ -2,7 +2,7 @@ RabbitMQ is an open-source message broker software that implements the Advanced Message Queuing Protocol (AMQP). It's designed to offer a common platform for passing messages between different parts of a system or between separate systems. RabbitMQ allows these parts to speak and understand each other even if they’re written in different programming languages or implemented on different platforms. RabbitMQ is not just limited to AMQP protocol but supports a variety of different messaging protocols including MQTT, STOMP, and more. Also, RabbitMQ is language agnostic, meaning it can be used with almost any programming language. In addition, it comes with a web user interface for managing and monitoring your RabbitMQ server. It's widely used in production systems around the world and can support large scale distributed systems as it supports clustering and fail-over. -Learn more from the following resources: +Visit the following resources to learn more: - [@official@RabbitMQ Tutorial: Hello World - RabbitMQ](https://www.rabbitmq.com/tutorials/tutorial-one-python) - [@article@RabbitMQ for Beginners: What is RabbitMQ? - CloudAMQP](https://www.cloudamqp.com/blog/part1-rabbitmq-for-beginners-what-is-rabbitmq.html) diff --git a/src/data/roadmaps/server-side-game-developer/content/reactive-approach@LVwGXmZhMewGQy61qwNyu.md b/src/data/roadmaps/server-side-game-developer/content/reactive-approach@LVwGXmZhMewGQy61qwNyu.md index ff981e56f693..b87ae1400de2 100644 --- a/src/data/roadmaps/server-side-game-developer/content/reactive-approach@LVwGXmZhMewGQy61qwNyu.md +++ b/src/data/roadmaps/server-side-game-developer/content/reactive-approach@LVwGXmZhMewGQy61qwNyu.md @@ -1,7 +1,7 @@ # Reactive Approach In the realm of server-side game development, the reactive approach is an important element when dealing with multithreading. This approach is based on the concept of reacting to changes or events happening in the system rather than calling methods or running operations continuously. It incorporates observables, which are objects that represent a stream of data or a series of events, and observers, which are methods that respond to the events or changes in these observables. Reactive programming is based on the observer pattern and is designed to handle asynchronous data calls and events efficiently. This pattern is particularly relevant in situations with a large amount of data, high level of complexity, or stringent real-time requirements. With this approach, it is also simpler to handle concurrency and to write programs that are efficient, clean, and less prone to errors and callback pyramids. -Learn more from the following resources: +Visit the following resources to learn more: - [@article@Intro to ReactiveX](https://reactivex.io/intro.html) - [@article@The Reactive Manifesto](https://www.reactivemanifesto.org/) diff --git a/src/data/roadmaps/server-side-game-developer/content/reactive-approach@Vl-WW0LThrQTOO_tFl51B.md b/src/data/roadmaps/server-side-game-developer/content/reactive-approach@Vl-WW0LThrQTOO_tFl51B.md index 154c367c8d45..ac8c87ac4eed 100644 --- a/src/data/roadmaps/server-side-game-developer/content/reactive-approach@Vl-WW0LThrQTOO_tFl51B.md +++ b/src/data/roadmaps/server-side-game-developer/content/reactive-approach@Vl-WW0LThrQTOO_tFl51B.md @@ -1,5 +1,5 @@ # Reactive Approach -Learn more from the following resources: +Visit the following resources to learn more: - [@article@Reactive Programming in Unity Game Development - InnoGames](https://blog.innogames.com/reactive-programming-unity-introduction/) - [@article@Building a Reactive RESTful Web Service - Spring](https://spring.io/guides/gs/reactive-rest-service) diff --git a/src/data/roadmaps/server-side-game-developer/content/reactive-model@p0P3ZGq_QTCop0vMwe7P3.md b/src/data/roadmaps/server-side-game-developer/content/reactive-model@p0P3ZGq_QTCop0vMwe7P3.md index ab5dc3f065b9..e5db06101719 100644 --- a/src/data/roadmaps/server-side-game-developer/content/reactive-model@p0P3ZGq_QTCop0vMwe7P3.md +++ b/src/data/roadmaps/server-side-game-developer/content/reactive-model@p0P3ZGq_QTCop0vMwe7P3.md @@ -1,7 +1,7 @@ # Reactive Model The Reactive Model is an approach in server-side game development that positions the server as a responder to requests made by the client. In this model, the server is not running its own threads, but simply reacting to incoming requests from clients. It focuses on asynchronous I/O operations, meaning that the system doesn't stall or wait for data to be written or read. When the client sends a request, the server reacts by performing a specific action, like accepting a network connection or reading data. It is built around the idea of event-driven programming, where logic is coded against events, ideally resulting in highly scalable systems. It's often used in conjunction with non-blocking I/O models, such as Node.js or other event-driven architectures. -Learn more from the following resources: +Visit the following resources to learn more: - [@article@Introduction to RxJava: Observable Pattern - HackerNoon](https://hackernoon.com/introduction-to-rxjava-observable-pattern-ym493yn4) - [@article@Characteristics of Reactive Systems - AWS](https://docs.aws.amazon.com/whitepapers/latest/reactive-systems-on-aws/characteristics-of-reactive-systems.html) diff --git a/src/data/roadmaps/server-side-game-developer/content/reactor@7mYpgn2gr-5vAYW-UR7_x.md b/src/data/roadmaps/server-side-game-developer/content/reactor@7mYpgn2gr-5vAYW-UR7_x.md index d5d3fdeaf704..1366b422bf6f 100644 --- a/src/data/roadmaps/server-side-game-developer/content/reactor@7mYpgn2gr-5vAYW-UR7_x.md +++ b/src/data/roadmaps/server-side-game-developer/content/reactor@7mYpgn2gr-5vAYW-UR7_x.md @@ -1,7 +1,7 @@ # Reactor The **Reactor** is a design pattern that deals with synchronous I/O multiplexing. It is a part of the server side game development concept where it mainly handles service requests delivered concurrently to an application by one or more clients. The reactor allows multiple requests to be managed efficiently by the resources of a single thread. It uses an event loop and callbacks to control and manage all the different I/O streams. Often, Reactor is combined with the Proactor pattern to achieve concurrency and efficiency in utilizing system resources. -Learn more from the following resources: +Visit the following resources to learn more: - [@article@Reactor Pattern - Wikipedia](https://en.wikipedia.org/wiki/Reactor_pattern) - [@article@Blocking vs Non-Blocking - Node.js Docs](https://nodejs.org/en/learn/asynchronous-work/overview-of-blocking-vs-non-blocking) diff --git a/src/data/roadmaps/server-side-game-developer/content/redis@7YNaELVcoV7DV1Fa06USi.md b/src/data/roadmaps/server-side-game-developer/content/redis@7YNaELVcoV7DV1Fa06USi.md index 2f2f7606e39a..b29389b057c1 100644 --- a/src/data/roadmaps/server-side-game-developer/content/redis@7YNaELVcoV7DV1Fa06USi.md +++ b/src/data/roadmaps/server-side-game-developer/content/redis@7YNaELVcoV7DV1Fa06USi.md @@ -1,8 +1,8 @@ # Redis `Redis` is an open-source, in-memory data structure store that can be used as a database, a cache, and a message broker. It provides support for various data structures such as strings, hashes, lists, sets, sorted sets with range queries, bitmaps, and more. Redis also allows atomic operations like appending to a string; increasing and decreasing hash, array and sorted sets values; computing set intersection, union and difference; and much more. An interesting feature of Redis is its ability to create transactions and also publish and subscribe to channels. It is a great choice for high-performance software like games because of its versatile nature and efficient performance. -Learn more from the following resources: +Visit the following resources to learn more: -- [@documentation@Redis as an In-Memory Data Structure Store - Redis](https://redis.io/docs/latest/develop/get-started/data-store/) +- [@official@Redis as an In-Memory Data Structure Store - Redis](https://redis.io/docs/latest/develop/get-started/data-store/) - [@article@What is Redis? - IBM](https://www.ibm.com/think/topics/redis) - [@article@Introduction to Redis - Severalnines](https://severalnines.com/blog/introduction-redis-what-it-what-are-use-cases-etc/) diff --git a/src/data/roadmaps/server-side-game-developer/content/registered-io@94hJX1iGifDzIuaU3zU5j.md b/src/data/roadmaps/server-side-game-developer/content/registered-io@94hJX1iGifDzIuaU3zU5j.md index 9f7632e37e89..5024bae617c9 100644 --- a/src/data/roadmaps/server-side-game-developer/content/registered-io@94hJX1iGifDzIuaU3zU5j.md +++ b/src/data/roadmaps/server-side-game-developer/content/registered-io@94hJX1iGifDzIuaU3zU5j.md @@ -12,7 +12,7 @@ and lower latency. Visit the following resources to learn more: -- [@documentation@Microsoft Registered I/O (RIO)](https://learn.microsoft.com/en-us/previous-versions/windows/it-pro/windows-server-2012-r2-and-2012/hh997032(v=ws.11)) +- [@official@Microsoft Registered I/O (RIO)](https://learn.microsoft.com/en-us/previous-versions/windows/it-pro/windows-server-2012-r2-and-2012/hh997032(v=ws.11)) - [@article@RIO then IOCP then just plain old Winsock2](https://wirepair.org/2023/08/19/rio-then-iocp-then-just-plain-old-winsock2/) - [@article@Windows Overlapped IO vs Registered IO (RIO) vs IOCP - Stack Overflow](https://stackoverflow.com/questions/73878597/what-are-the-differences-between-windows-overlapped-io-registered-io-rio-and) - [@article@What is io_uring? - Lord of the io_uring](https://unixism.net/loti/what_is_io_uring.html) diff --git a/src/data/roadmaps/server-side-game-developer/content/reliability@2jDV-ovvrkBbTTLk5VbR9.md b/src/data/roadmaps/server-side-game-developer/content/reliability@2jDV-ovvrkBbTTLk5VbR9.md index 00c3ba3c3fdb..80553b26ff7f 100644 --- a/src/data/roadmaps/server-side-game-developer/content/reliability@2jDV-ovvrkBbTTLk5VbR9.md +++ b/src/data/roadmaps/server-side-game-developer/content/reliability@2jDV-ovvrkBbTTLk5VbR9.md @@ -1,7 +1,7 @@ # Reliability The **Reliability** in terms of IP (Internet Protocol) generally refers to the dependability and consistency of the network connections. It's essentially about how reliable the data transfer is over the network. IP itself is an unreliable protocol, meaning it doesn't guarantee the delivery of data packets. This is where protocols like TCP (Transmission Control Protocol) come in. TCP adds a layer of reliability to IP by ensuring the delivery of the data packets, ordering them correctly and error-checking. This ensures that game data synchronizes correctly across the server and clients without any loss, providing consistency and a smooth gameplay experience. However, the full guarantees of TCP come with some additional overhead; therefore, some games might prefer to use unreliable protocols when high performance is more critical than absolute reliability. -Learn more from the following resources: +Visit the following resources to learn more: - [@article@Reliability at the Transport Layer - Williams College](https://www.cs.williams.edu/~tom/courses/336/outlines/lect28_2.html) - [@article@Reliable Bytes: How TCP Ensures Trustworthy Data Transfer - ITU Online](https://www.ituonline.com/blogs/reliable-bytes-how-tcp-ensures-trustworthy-data-transfer-across-the-internet/) diff --git a/src/data/roadmaps/server-side-game-developer/content/reliability@Vh81GnOUOZvDOlOyI5PwT.md b/src/data/roadmaps/server-side-game-developer/content/reliability@Vh81GnOUOZvDOlOyI5PwT.md index 42d404bf7fae..61a28325f97b 100644 --- a/src/data/roadmaps/server-side-game-developer/content/reliability@Vh81GnOUOZvDOlOyI5PwT.md +++ b/src/data/roadmaps/server-side-game-developer/content/reliability@Vh81GnOUOZvDOlOyI5PwT.md @@ -1,7 +1,7 @@ # Reliability Reliability refers to how consistently a data packet can be transferred from one system to another over a network. In terms of the User Datagram Protocol (UDP), it has a lack of reliability built into it. This means UDP does not guarantee that your data will reach its destination, it merely sends the packets without any acknowledgement of receipt. Unlike its counterpart, Transmission Control Protocol (TCP), which implements error-checking mechanisms to ensure data integrity and delivery. In summary, if you require high reliability in your server side game development, protocols other than UDP might need to be considered. -Learn more from the following resources: +Visit the following resources to learn more: - [@article@Reliability and Congestion Avoidance over UDP - Gaffer On Games](https://gafferongames.com/post/reliability_ordering_and_congestion_avoidance_over_udp/) - [@article@Transmission Control Protocol (TCP) - IBM](https://www.ibm.com/docs/en/zos/3.1.0?topic=protocol-transmission-control-tcp) diff --git a/src/data/roadmaps/server-side-game-developer/content/reliable-transmission@X2KHWgQZDHSVDsTRMUwSj.md b/src/data/roadmaps/server-side-game-developer/content/reliable-transmission@X2KHWgQZDHSVDsTRMUwSj.md index 608952ad3fda..07a0e1e91b3b 100644 --- a/src/data/roadmaps/server-side-game-developer/content/reliable-transmission@X2KHWgQZDHSVDsTRMUwSj.md +++ b/src/data/roadmaps/server-side-game-developer/content/reliable-transmission@X2KHWgQZDHSVDsTRMUwSj.md @@ -15,4 +15,4 @@ Visit the following resources to learn more: - [@article@TCP Reliable Transmission (IETF RFC 793)](https://datatracker.ietf.org/doc/html/rfc793) - [@article@Automatic Repeat Request (ARQ) - Wikipedia](https://en.wikipedia.org/wiki/Automatic_repeat_request) - [@article@Sliding Window Protocol - Wikipedia](https://en.wikipedia.org/wiki/Sliding_window_protocol) -- [@documentation@RFC 3366 - Advice to Link Designers on Link ARQ - IETF](https://datatracker.ietf.org/doc/html/rfc3366) +- [@official@RFC 3366 - Advice to Link Designers on Link ARQ - IETF](https://datatracker.ietf.org/doc/html/rfc3366) diff --git a/src/data/roadmaps/server-side-game-developer/content/reliable-vs-unreliable@MoyBGT9bscUe8vMN4J0bG.md b/src/data/roadmaps/server-side-game-developer/content/reliable-vs-unreliable@MoyBGT9bscUe8vMN4J0bG.md index 930b80e1fbe5..51b043d8ece3 100644 --- a/src/data/roadmaps/server-side-game-developer/content/reliable-vs-unreliable@MoyBGT9bscUe8vMN4J0bG.md +++ b/src/data/roadmaps/server-side-game-developer/content/reliable-vs-unreliable@MoyBGT9bscUe8vMN4J0bG.md @@ -3,7 +3,7 @@ In the context of network communication, the terms "reliable" and "unreliable" refer to whether or not data sent across the network is guaranteed to reach its destination. Reliable protocols, such as TCP, ensure that data is delivered from sender to receiver without loss. They do this by establishing a connection, dividing data into packets, sending them one by one, and waiting for acknowledgment of receipt from the receiver. Each sent packet is numbered so if any packet doesn't reach the receiver, it will be identified by the missing sequence number and resent. In this way, reliable protocols ensure data integrity and order. On the other hand, unreliable protocols, such as UDP, do not guarantee delivery. They simply transmit data without any checks to ensure it has been received. If a packet is dropped for any reason, it is not resent. These protocols do not establish a connection nor check for successful data transfer. This leads to potential data loss, but it provides a faster and more efficient transmission process which can be desirable in certain situations. -Learn more from the following resources: +Visit the following resources to learn more: - [@article@Introduction to TCP and UDP - NetworkLessons](https://networklessons.com/network-fundamentals/introduction-to-tcp-and-udp) - [@article@TCP vs UDP: Understanding Network Protocol Fundamentals - PAIML](https://paiml.com/blog/2025-02-26-tcp-vs-udp-fundamentals/) diff --git a/src/data/roadmaps/server-side-game-developer/content/resource-usage@LkGI0VpJ3WkpPHkJhJgWk.md b/src/data/roadmaps/server-side-game-developer/content/resource-usage@LkGI0VpJ3WkpPHkJhJgWk.md index 20e97951ce4b..c0dfb6ff2a6e 100644 --- a/src/data/roadmaps/server-side-game-developer/content/resource-usage@LkGI0VpJ3WkpPHkJhJgWk.md +++ b/src/data/roadmaps/server-side-game-developer/content/resource-usage@LkGI0VpJ3WkpPHkJhJgWk.md @@ -2,7 +2,7 @@ In server-side game development, **resource usage** broadly refers to how a game uses the server's computational power, memory, storage, and networking capabilities. These resources are crucial in assuring overall game performance and responsiveness. When monitoring resource usage, you typically pay attention to CPU usage, memory utilization, storage capacity, network bandwidth, and database performance. Server-side code must be developed and optimized with these resources in mind, as inefficient code can lead to increased resource usage, potentially causing lag, disconnections, or crashes. Key elements like scalable architecture and serverless technologies are primarily employed to efficiently manage and balance resource usage. Tools and automated solutions are commonly utilized to monitor and manage these resources in real-time, allowing developers to identify potential issues and optimize accordingly. -Learn more from the following resources: +Visit the following resources to learn more: - [@article@Server Monitoring Guide - Splunk](https://www.splunk.com/en_us/blog/learn/server-monitoring.html) - [@article@Server Monitoring Guidebook - ManageEngine](https://www.manageengine.com/network-monitoring/what-is-server-monitoring.html) diff --git a/src/data/roadmaps/server-side-game-developer/content/rest@Oq3GQ5gBUxIl1Qe8NB3LB.md b/src/data/roadmaps/server-side-game-developer/content/rest@Oq3GQ5gBUxIl1Qe8NB3LB.md index 4e32f8f2b9ab..9227d38a3844 100644 --- a/src/data/roadmaps/server-side-game-developer/content/rest@Oq3GQ5gBUxIl1Qe8NB3LB.md +++ b/src/data/roadmaps/server-side-game-developer/content/rest@Oq3GQ5gBUxIl1Qe8NB3LB.md @@ -1,7 +1,7 @@ # REST REST or Representational State Transfer is an architectural style used in web development. REST systems interact through standard operations on web resource's identified through URIs. It utilizes a stateless, client-server, cacheable communication protocol -- virtually always HTTP. In REST architecture, a client sends a request to the server in order to retrieve or modify data. This data can be identified by a URI and has a specific media type (JSON, XML etc). A key feature of REST is that it's stateless, meaning the server does not keep any data between two requests. While the client holds session state. REST is often used in mobile applications, social networking websites, and automated business processes. -Learn more from the following resources: +Visit the following resources to learn more: - [@article@Best Practices in API Design - Swagger](https://swagger.io/resources/articles/best-practices-in-api-design/) - [@article@RESTful API Design Best Practices Guide 2026 - daily.dev](https://daily.dev/blog/restful-api-design-best-practices-guide-2024/) diff --git a/src/data/roadmaps/server-side-game-developer/content/routing@bYb7nA-Vn9e6VtdbUT3tq.md b/src/data/roadmaps/server-side-game-developer/content/routing@bYb7nA-Vn9e6VtdbUT3tq.md index 4a91aab23704..6ccd4082fdd1 100644 --- a/src/data/roadmaps/server-side-game-developer/content/routing@bYb7nA-Vn9e6VtdbUT3tq.md +++ b/src/data/roadmaps/server-side-game-developer/content/routing@bYb7nA-Vn9e6VtdbUT3tq.md @@ -1,7 +1,7 @@ # Routing In server-side game development, **routing** refers to the specification of how an application responds to a client request to a particular endpoint, which is a URI (or path) and a specific HTTP request method (GET, POST, etc.). Each route can have one or more handler functions, which are executed when the route is matched. These handler functions, often coming into play within complex multiplayer game scenarios, handle the logic needed for the route, including data transmission, game state updates, etc. The use of properly configured routes ensures the correct data is sent where it is needed, supporting seamless gameplay interactions. -Learn more from the following resources: +Visit the following resources to learn more: - [@article@Introduction to Routers and Routing - NetworkLessons](https://networklessons.com/ip-routing/introduction-to-routers-and-routing) - [@article@What is Routing? - Cisco](https://www.cisco.com/site/us/en/learn/topics/networking/what-is-routing.html) diff --git a/src/data/roadmaps/server-side-game-developer/content/rpc--rest@YxaroYL_Az0vKRCeu2jsp.md b/src/data/roadmaps/server-side-game-developer/content/rpc--rest@YxaroYL_Az0vKRCeu2jsp.md index a4edc1396087..a47885d552d7 100644 --- a/src/data/roadmaps/server-side-game-developer/content/rpc--rest@YxaroYL_Az0vKRCeu2jsp.md +++ b/src/data/roadmaps/server-side-game-developer/content/rpc--rest@YxaroYL_Az0vKRCeu2jsp.md @@ -5,7 +5,7 @@ RPC (Remote Procedure Call) and REST (Representational State Transfer) are two d In the context of game development, both RPC and REST can be used depending on the specific needs of the game and the underlying architecture that supports it. Both of them offer unique characteristics that make them suitable for different aspects or modules inside a game like character control, game state management, real-time networking, etc. While RPC might be more suited for real-time, fast communication, REST can be leveraged for independent, scalable, and stateless nature of its design. In sum, RPC and REST terms come up frequently in server-side game development due to their importance in determining how your game will communicate between its different parts, especially in multiplayer environments. It is crucial to make the appropriate choice based on your game's requirements and desired user experience. -Learn more from the following resources: +Visit the following resources to learn more: - [@article@RPC vs REST - Difference Between API Architectures - AWS](https://aws.amazon.com/compare/the-difference-between-rpc-and-rest/) - [@article@Understanding the Difference Between RPC and REST for Web APIs - Merge](https://www.merge.dev/blog/understanding-the-difference-between-rpc-and-rest-for-web-apis) diff --git a/src/data/roadmaps/server-side-game-developer/content/security@qkO0s9zR0sAnjTRWcrLQY.md b/src/data/roadmaps/server-side-game-developer/content/security@qkO0s9zR0sAnjTRWcrLQY.md index 79c282b73209..f6e0a3e4a980 100644 --- a/src/data/roadmaps/server-side-game-developer/content/security@qkO0s9zR0sAnjTRWcrLQY.md +++ b/src/data/roadmaps/server-side-game-developer/content/security@qkO0s9zR0sAnjTRWcrLQY.md @@ -1,7 +1,7 @@ # Security In server-side game development, the aspect of IP (Internet Protocol) security is of paramount importance. This primarily involves ensuring the safety of online gaming interactions, protection of sensitive user data being transmitted, and thwarting possible cyber-attacks or threats. This might include mitigation strategies against DDoS (Distributed Denial of Service) attacks, which are common in multiplayer gaming environments, IP spoofing, and session hijacking. Security measures often involve developing secure server architectures, encryption of data in transit and at rest, validation and sanitization of user input, and implementing comprehensive security policies and procedures. Regular risk assessment and vulnerability scanning are also crucial for identifying and addressing potential security loopholes. Therefore, for any game developer, understanding IP security protocols and integrating them into game development processes is essential to provide users with trustworthy gaming environments. -Learn more from the following resources: +Visit the following resources to learn more: - [@article@Protect Multiplayer Game Servers From DDoS Attacks - AWS](https://aws.amazon.com/blogs/gametech/protect-multiplayer-game-servers-from-ddos-attacks-using-amazon-gamelift-2/) - [@article@Securing Your Game Server - Best Practices - Iceline Hosting](https://iceline-hosting.com/blog/securing-your-game-server-best-practicies) diff --git a/src/data/roadmaps/server-side-game-developer/content/segment-structure@zTCmPUp9j5P1wpGgiboMa.md b/src/data/roadmaps/server-side-game-developer/content/segment-structure@zTCmPUp9j5P1wpGgiboMa.md index fa76c9d4d43a..d0e7bb516a79 100644 --- a/src/data/roadmaps/server-side-game-developer/content/segment-structure@zTCmPUp9j5P1wpGgiboMa.md +++ b/src/data/roadmaps/server-side-game-developer/content/segment-structure@zTCmPUp9j5P1wpGgiboMa.md @@ -1,7 +1,7 @@ # Segment Structure TCP (Transmission Control Protocol) uses a method called "segmentation" to manage data transmission. In this approach, TCP divides a stream of data into smaller parts, known as "segments". Each of these segments is then independently sent over the internet. A basic TCP segment consists of a header and the data section. The header contains various fields such as source port, destination port, sequence number, acknowledgment number, data offset, reserved section, control bit, window, checksum, urgent pointer, and options. The rest of the segment is occupied by the data transferred by TCP. Understanding the structure of these segments is crucial for understanding how TCP, and thereby much of the Internet, operates. -Learn more from the following resources: +Visit the following resources to learn more: - [@article@TCP Segment Structure - IBM](https://www.ibm.com/docs/en/zos/3.1.0?topic=tcp-segment-structure) - [@article@TCP Header: Size, Structure, Options, Format, Checksum - Noction](https://www.noction.com/blog/tcp-header) diff --git a/src/data/roadmaps/server-side-game-developer/content/select@5-5toy2CblZPCV9d5QPEo.md b/src/data/roadmaps/server-side-game-developer/content/select@5-5toy2CblZPCV9d5QPEo.md index 41a401f2748f..1cea0136be64 100644 --- a/src/data/roadmaps/server-side-game-developer/content/select@5-5toy2CblZPCV9d5QPEo.md +++ b/src/data/roadmaps/server-side-game-developer/content/select@5-5toy2CblZPCV9d5QPEo.md @@ -10,7 +10,7 @@ better performance and scalability. Visit the following resources to learn more: -- [@documentation@Linux select API](https://man7.org/linux/man-pages/man2/select.2.html) +- [@official@Linux select API](https://man7.org/linux/man-pages/man2/select.2.html) - [@article@I/O Multiplexing: The select and poll Functions - Shichao's Notes](https://notes.shichao.io/unp/ch6/) - [@article@Linux select() - Synchronous I/O Multiplexing - phoenixNAP](https://phoenixnap.com/kb/linux-select) -- [@documentation@select() - IBM Documentation](https://www.ibm.com/docs/en/zos/3.1.0?topic=functions-select-suspend-execution-pending-multiple-descriptors) +- [@official@select() - IBM Documentation](https://www.ibm.com/docs/en/zos/3.1.0?topic=functions-select-suspend-execution-pending-multiple-descriptors) diff --git a/src/data/roadmaps/server-side-game-developer/content/selective-ack@SPpOO25b7wpajWDIrKi1u.md b/src/data/roadmaps/server-side-game-developer/content/selective-ack@SPpOO25b7wpajWDIrKi1u.md index 74e07571ee2c..6ea68563f189 100644 --- a/src/data/roadmaps/server-side-game-developer/content/selective-ack@SPpOO25b7wpajWDIrKi1u.md +++ b/src/data/roadmaps/server-side-game-developer/content/selective-ack@SPpOO25b7wpajWDIrKi1u.md @@ -1,7 +1,7 @@ # Selective Acknowledgement Selective Acknowledgement (SACK) is a mechanism introduced in TCP to improve its efficiency in handling packet loss in the network. When TCP detects packet loss, it normally retransmits all packets sent after the lost packet, regardless of whether they were received successfully or not. SACK, however, allows the receiver to acknowledge non-consecutive packets, effectively informing the sender exactly which packets were received successfully and which weren't. By using this mechanism, TCP can selectively retransmit only those packets that were lost, saving bandwidth and improving overall performance. -Learn more from the following resources: +Visit the following resources to learn more: - [@article@RFC 2018 - TCP Selective Acknowledgment Options - IETF](https://datatracker.ietf.org/doc/html/rfc2018) - [@article@RFC 3517: A Conservative Selective Acknowledgment (SACK)-based Loss Recovery Algorithm - IETF](https://www.rfc-editor.org/rfc/rfc3517.html) diff --git a/src/data/roadmaps/server-side-game-developer/content/serialization@TS6dz61rUSxm-SqmK6JKe.md b/src/data/roadmaps/server-side-game-developer/content/serialization@TS6dz61rUSxm-SqmK6JKe.md index ccbea8f60443..300cfa315407 100644 --- a/src/data/roadmaps/server-side-game-developer/content/serialization@TS6dz61rUSxm-SqmK6JKe.md +++ b/src/data/roadmaps/server-side-game-developer/content/serialization@TS6dz61rUSxm-SqmK6JKe.md @@ -1,7 +1,7 @@ # Serialization Serialization in server-side game development is the process of transforming data objects or structures into a format that can be stored, transmitted, and reconstructed later. It's significant because it enables you to save the state of a game, pass it between servers, or send it to clients. The two main types of serialization are binary and XML/JSON. Binary serialization turns your objects into a very compact binary format. XML/JSON serialization turns your objects into a textual format, which is less efficient but more human-readable and easier to debug. Depending on your specific needs, you may choose one over the other. Note also that each of these methods has its own exacerbations in terms of compatibility, performance, and security implications. -Learn more from the following resources: +Visit the following resources to learn more: - [@article@Protobuf vs JSON: Performance, Efficiency and API Speed - Gravitee](https://www.gravitee.io/blog/protobuf-vs-json) - [@article@Data Serialization for Games - Game Developer](https://www.gamedeveloper.com/programming/data-serialization-for-games) diff --git a/src/data/roadmaps/server-side-game-developer/content/server-side-development@rQArtuVKGVgLn_fw9yO3b.md b/src/data/roadmaps/server-side-game-developer/content/server-side-development@rQArtuVKGVgLn_fw9yO3b.md index 0b4f8693137d..050b327da46f 100644 --- a/src/data/roadmaps/server-side-game-developer/content/server-side-development@rQArtuVKGVgLn_fw9yO3b.md +++ b/src/data/roadmaps/server-side-game-developer/content/server-side-development@rQArtuVKGVgLn_fw9yO3b.md @@ -1,7 +1,7 @@ # Server Side The term "server-side" refers to operations that are performed by the server in a client-server relationship in a computer network. In games, the server-side is responsible for the logic and rules of the game, data persistence, security, and synchronization of the game state among all connected clients. It essentially handles all processing that isn't done on the client-side. Code run on the server-side can be written in various programming languages, but it's often in PHP, Ruby, Python, .NET, Java, or JavaScript (Node.js). Knowing server-side programming is critical for any game developer to create maintainable, scalable, and secure online games. -Learn more from the following resources: +Visit the following resources to learn more: - [@article@Introduction to the Server Side - MDN](https://developer.mozilla.org/en-US/docs/Learn_web_development/Extensions/Server-side/First_steps/Introduction) - [@article@Learning Server-side Programming through Game Development - Coursera](https://www.coursera.org/learn/learning-server-side-programming-through-game-development) diff --git a/src/data/roadmaps/server-side-game-developer/content/serverless@DOmbRRK_RRPElOuTB7AAK.md b/src/data/roadmaps/server-side-game-developer/content/serverless@DOmbRRK_RRPElOuTB7AAK.md index 63330d15ab01..141c2278b510 100644 --- a/src/data/roadmaps/server-side-game-developer/content/serverless@DOmbRRK_RRPElOuTB7AAK.md +++ b/src/data/roadmaps/server-side-game-developer/content/serverless@DOmbRRK_RRPElOuTB7AAK.md @@ -1,7 +1,7 @@ # Serverless **Serverless** is a cloud architecture model where the application developers don't have to provision, scale, and manage servers or runtimes, to build their applications. The name serverless comes from the idea that the tasks traditionally performed by a server are handled elsewhere, abstracting the responsibility of managing servers away from the developer. Developers can write and deploy code without worrying about the underlying infrastructure. A serverless model uses backends as a service (BaaS) and functions as a service (FaaS), providing automatic scaling, patching, and capacity provisioning. Popular examples of serverless providers are AWS Lambda, Google Cloud Functions, and Azure Functions. -Learn more from the following resources: +Visit the following resources to learn more: - [@article@Building a Serverless Multiplayer Game That Scales - AWS](https://aws.amazon.com/blogs/compute/building-a-serverless-multiplayer-game-that-scales/) - [@article@Serverless Game Architecture - Ben Hofferber](https://benhofferber.com/code/serverless-game-architecture/) diff --git a/src/data/roadmaps/server-side-game-developer/content/sharding@3use5vuLBJTk40wOg9S-X.md b/src/data/roadmaps/server-side-game-developer/content/sharding@3use5vuLBJTk40wOg9S-X.md index 083b60ea8678..b8c9a1c2ffd2 100644 --- a/src/data/roadmaps/server-side-game-developer/content/sharding@3use5vuLBJTk40wOg9S-X.md +++ b/src/data/roadmaps/server-side-game-developer/content/sharding@3use5vuLBJTk40wOg9S-X.md @@ -1,7 +1,7 @@ # Sharding Sharding is a type of database partitioning that separates very large databases into smaller, faster, more easily managed parts called data shards. The word shard means a small part of a whole. Each shard is held on a separate database server instance, to spread load and reduce the risk of a single point of failure. Sharding can be done on a horizontal or vertical basis. Horizontal Sharding, also known as data sharding, involves putting different rows onto different tables. Vertical Sharding, on the other hand, involves putting different columns onto different tables. It's possible to shard on the basis of certain columns, and databases can be sharded in many different ways. Sharding is a complex process, but proper planning can allow for increased scalability and performance improvements. -Learn more from the following resources: +Visit the following resources to learn more: - [@article@A Comprehensive Guide to Sharding - PubNub](https://www.pubnub.com/guides/sharding/) - [@article@Sharded Cluster Components - MongoDB Docs](https://www.mongodb.com/docs/manual/core/sharded-cluster-components/) diff --git a/src/data/roadmaps/server-side-game-developer/content/socket-programming@HvpuFTCknHPhnFkhmhRc4.md b/src/data/roadmaps/server-side-game-developer/content/socket-programming@HvpuFTCknHPhnFkhmhRc4.md index 57025c3e2e80..66a3dd33a84a 100644 --- a/src/data/roadmaps/server-side-game-developer/content/socket-programming@HvpuFTCknHPhnFkhmhRc4.md +++ b/src/data/roadmaps/server-side-game-developer/content/socket-programming@HvpuFTCknHPhnFkhmhRc4.md @@ -1,7 +1,7 @@ # Socket Programming Socket programming is a method of communication between two computers using a network protocol, typically TCP/IP. In server-side game development, socket programming is used to facilitate real-time, bi-directional communication between the server and client(s). The server opens a socket that waits for incoming connection requests from the client side. Once a connection is established, the server and client can exchange data until the connection is closed. This facilitates live multiplayer gaming experiences, allowing users on different computers to interact within the same game environment.```socket programming``` in Python, for example, includes modules for creating both the server side (```socketserver```) and client side (```socket```) of the conversation. -Learn more from the following resources: +Visit the following resources to learn more: - [@article@C# Networking: Raw Sockets, TCP, and UDP Programming - Dev.to](https://dev.to/chakewitz/c-networking-raw-sockets-tcp-and-udp-programming-46oc) - [@article@Python Sockets - Real Python](https://realpython.com/python-sockets/) diff --git a/src/data/roadmaps/server-side-game-developer/content/spinlock@lVXfA_oZr82mFfBvLnnRK.md b/src/data/roadmaps/server-side-game-developer/content/spinlock@lVXfA_oZr82mFfBvLnnRK.md index 9fed971721af..45a76d53e0a2 100644 --- a/src/data/roadmaps/server-side-game-developer/content/spinlock@lVXfA_oZr82mFfBvLnnRK.md +++ b/src/data/roadmaps/server-side-game-developer/content/spinlock@lVXfA_oZr82mFfBvLnnRK.md @@ -1,7 +1,7 @@ # Spinlock `Spinlock` is a type of synchronization mechanism that exists in a busy-wait-state (essentially, 'spinning') until the lock can be acquired. This contrasts with other locking mechanisms that might put a thread to sleep if the desired lock is not available. It's generally used in scenarios where thread sleeping (context switching) could be costlier than spinning. However, it must be handled properly. An improperly managed spinlock can cause high CPU usage, as the wait is active; it continually consumes processing capacity. Hence, their usage is more beneficial in scenarios where the wait time to acquire a lock is reasonably short. -Learn more from the following resources: +Visit the following resources to learn more: - [@article@Kernel Locks - IBM](https://www.ibm.com/docs/en/aix/7.2?topic=concepts-kernel-locks) - [@article@Spinlock - Wikipedia](https://en.wikipedia.org/wiki/Spinlock) diff --git a/src/data/roadmaps/server-side-game-developer/content/ssl@PSvPjaVtko71BeIA-hYqf.md b/src/data/roadmaps/server-side-game-developer/content/ssl@PSvPjaVtko71BeIA-hYqf.md index 79d197d56c69..2f1061b206bb 100644 --- a/src/data/roadmaps/server-side-game-developer/content/ssl@PSvPjaVtko71BeIA-hYqf.md +++ b/src/data/roadmaps/server-side-game-developer/content/ssl@PSvPjaVtko71BeIA-hYqf.md @@ -1,7 +1,7 @@ # SSL Secure Sockets Layer (SSL) is a security protocol which provides encrypted communication between a web browser and a web server. This protocol operates via a process where the SSL certificate, held by the web server, creates two cryptographic keys - a Public Key and a Private Key. The public key is placed into a Certificate Signing Request (CSR) - a file also containing detailed information about the web server and your organization. A certificate authority then validates these details and issue an SSL certificate for your web server. This SSL certificate contains the new, unique public key for your web's session data. When a browser connects to this web server and the SSL handshake is complete, an encrypted SSL session is established via the protocols of symmetric cryptography. It's noteworthy to mention that even though SSL has been succeeded by Transport Layer Security (TLS), people still refer to these certificates as SSL. -Learn more from the following resources: +Visit the following resources to learn more: - [@article@What is SSL/TLS: An In-Depth Guide - SSL.com](https://www.ssl.com/article/what-is-ssl-tls-an-in-depth-guide/) - [@article@What is SSL, TLS and HTTPS? - DigiCert](https://www.digicert.com/what-is-ssl-tls-and-https) diff --git a/src/data/roadmaps/server-side-game-developer/content/streaming-vs-broadcast@pJw8fN1dt3BABtZVz7wGE.md b/src/data/roadmaps/server-side-game-developer/content/streaming-vs-broadcast@pJw8fN1dt3BABtZVz7wGE.md index fa0a76935e0b..e6ce5ad27519 100644 --- a/src/data/roadmaps/server-side-game-developer/content/streaming-vs-broadcast@pJw8fN1dt3BABtZVz7wGE.md +++ b/src/data/roadmaps/server-side-game-developer/content/streaming-vs-broadcast@pJw8fN1dt3BABtZVz7wGE.md @@ -1,7 +1,7 @@ # Streaming vs Broadcast In the context of network protocol, streaming and broadcasting are two methods for transmitting data packets. Streaming, often performed over TCP, entails sending data from one source to a single specific destination. This method is comparable to a one-to-one phone call. The streaming process is characterized by steady data transmission directly to a single receiver who has initiated a connection. On the contrary, broadcasting refers to the transmittal of data packets from one source to all possible destinations in the network. Similar to a public announcement over a loudspeaker, the data is sent to all receptive entities. Broadcasting primarily utilizes the UDP protocol and does not require a direct connection or acknowledgement of receipt from the recipients. -Learn more from the following resources: +Visit the following resources to learn more: - [@article@TCP vs UDP: What's the Difference for Video Streaming? - Ant Media](https://antmedia.io/tcp-vs-udp-video-streaming/) - [@article@UDP vs. TCP and Which One to Use for Video Streaming - Wowza](https://www.wowza.com/blog/udp-vs-tcp) diff --git a/src/data/roadmaps/server-side-game-developer/content/synchronization@idmrgKgVWVLZYANbXiZnS.md b/src/data/roadmaps/server-side-game-developer/content/synchronization@idmrgKgVWVLZYANbXiZnS.md index e23a7f649183..5f93c0e4ddd8 100644 --- a/src/data/roadmaps/server-side-game-developer/content/synchronization@idmrgKgVWVLZYANbXiZnS.md +++ b/src/data/roadmaps/server-side-game-developer/content/synchronization@idmrgKgVWVLZYANbXiZnS.md @@ -1,7 +1,7 @@ # Synchronization In the context of multithreading, **synchronization** is a mechanism which ensures that two or more concurrent threads don't simultaneously execute some particular program segment known as a critical section. Concurrent accesses to shared resource can lead to race conditions. Two or more operating systems' threads can access shared data simultaneously. With synchronization, you can ensure that only one thread can access the shared resource at a time, hence avoiding any data inconsistency. Different synchronization techniques such as locks, semaphores, condition variables, monitors and signaling are used to deal with synchronization situations, each with its own pros and cons. -Learn more from the following resources: +Visit the following resources to learn more: - [@article@Barrier Synchronization In Multithreading: A Practical Guide - ITU Online](https://www.ituonline.com/tech-definitions/what-is-multithreading-synchronization/) - [@article@Java Synchronization - Oracle Docs](https://docs.oracle.com/javase/tutorial/essential/concurrency/locksync.html) diff --git a/src/data/roadmaps/server-side-game-developer/content/synchrony@l5QTk408Ubagw8XzRAfoZ.md b/src/data/roadmaps/server-side-game-developer/content/synchrony@l5QTk408Ubagw8XzRAfoZ.md index 125331d3ee11..6d6071170fa7 100644 --- a/src/data/roadmaps/server-side-game-developer/content/synchrony@l5QTk408Ubagw8XzRAfoZ.md +++ b/src/data/roadmaps/server-side-game-developer/content/synchrony@l5QTk408Ubagw8XzRAfoZ.md @@ -1,7 +1,7 @@ # Synchrony In a reactive paradigm, "synchrony" is a key concept related to data management and interactions among multiple components in a server-side game development context. It refers to the idea that operations or processes are executed 'in sync', meaning that the next operation starts strictly after the previous operation has already finished. In a synchronous communication, for instance, the sender can't start a new communication until the receiver confirmed receiving the last parcel. It's different from "asynchrony" where various operations can run concurrently, not waiting for previous operations to finish before moving on. Overall, understanding the concepts of synchrony and asynchrony are crucial for making efficient use of resources in server-side game development, and picking the right approach depends on the specific use case and requirements. -Learn more from the following resources: +Visit the following resources to learn more: - [@article@Synchronous vs Asynchronous Programming: A Developer Guide - Augment Code](https://www.augmentcode.com/learn/synchronous-vs-asynchronous-programming-a-developer-guide) - [@article@Synchronous Vs Asynchronous Gameplay in Online Games - Game Developer](https://www.gamedeveloper.com/design/synchronous-vs-asynchronous-gameplay-in-online-games) diff --git a/src/data/roadmaps/server-side-game-developer/content/task-based@LKPcEeqBOPhQOztD3cM3T.md b/src/data/roadmaps/server-side-game-developer/content/task-based@LKPcEeqBOPhQOztD3cM3T.md index 9a36c705948f..be88945a6489 100644 --- a/src/data/roadmaps/server-side-game-developer/content/task-based@LKPcEeqBOPhQOztD3cM3T.md +++ b/src/data/roadmaps/server-side-game-developer/content/task-based@LKPcEeqBOPhQOztD3cM3T.md @@ -1,7 +1,7 @@ # Task-Based Task-based multithreading refers to a model where tasks are the units of work abstracted from threads. In this model, application logic is divided into smaller tasks, each capable of running independent of the others. The tasks are then executed by a pool of threads, managed by a scheduler. Unlike traditional thread-centric models where each thread performs a specific task, task-based multithreading allows for greater flexibility by decoupling the tasks from the threads and letting the system dynamically assign tasks to idle threads. With task-based multithreading, developers no longer need to manually manage threading details like creation, control, synchronization, and termination, hence enabling more focus on the development of the game logic. -Learn more from the following resources: +Visit the following resources to learn more: - [@article@Implementations of Task-Based Parallelism in Game Engines - StackExchange](https://gamedev.stackexchange.com/questions/60240/implementations-of-task-based-parallelism-in-game-engines) - [@article@Task-based Multithreading: How to Program for 100 Cores - GDC Vault](https://gdcvault.com/play/1012321/Task-based-Multithreading-How-to) diff --git a/src/data/roadmaps/server-side-game-developer/content/tcp-vs-udp@RfTcTUjaXyp49FnUf44MK.md b/src/data/roadmaps/server-side-game-developer/content/tcp-vs-udp@RfTcTUjaXyp49FnUf44MK.md index d77bdd76b10d..d867aefffca2 100644 --- a/src/data/roadmaps/server-side-game-developer/content/tcp-vs-udp@RfTcTUjaXyp49FnUf44MK.md +++ b/src/data/roadmaps/server-side-game-developer/content/tcp-vs-udp@RfTcTUjaXyp49FnUf44MK.md @@ -1,7 +1,7 @@ # TCP vs UDP TCP, or Transmission Control Protocol, is a connection-oriented protocol that guarantees delivery of packets to the destination router. It includes error-checking and ensures packets are delivered in the correct order. On the other hand, UDP, or User Datagram Protocol, is a connectionless protocol which doesn't guarantee delivery or ensure correct sequencing of packets. As a result, UDP is considered faster and more efficient for some applications like video streaming or online gaming where speed matters more than accuracy. So, choosing between TCP and UDP really boils down to the specific requirements and priorities of the situation - it's a trade-off between speed and reliability. -Learn more from the following resources: +Visit the following resources to learn more: - [@article@TCP or UDP for a Multiplayer Game? - StackExchange](https://softwareengineering.stackexchange.com/questions/342254/tcp-or-udp-for-a-multiplayer-game) - [@article@Game Servers: UDP vs TCP - 1024 Monkeys](https://1024monkeys.wordpress.com/2014/04/01/game-servers-udp-vs-tcp/) diff --git a/src/data/roadmaps/server-side-game-developer/content/tcp@mUCidjOsVLMAVDf2jmV5F.md b/src/data/roadmaps/server-side-game-developer/content/tcp@mUCidjOsVLMAVDf2jmV5F.md index cb74caf24cfe..642ba47b11b4 100644 --- a/src/data/roadmaps/server-side-game-developer/content/tcp@mUCidjOsVLMAVDf2jmV5F.md +++ b/src/data/roadmaps/server-side-game-developer/content/tcp@mUCidjOsVLMAVDf2jmV5F.md @@ -1,7 +1,7 @@ # TCP TCP, an acronym for Transmission Control Protocol, is a fundamental protocol in the suite of internet protocols. It is a connection-oriented, reliable, byte stream service that sits at the transport layer of the OSI Model. In simpler terms, TCP enables two hosts to establish a connection and exchange data. During this communication, TCP ensures that data is not lost or received out of order by providing error checking mechanisms and a system for retransmission of lost data. Furthermore, to ensure efficient use of network resources, TCP implements flow control, congestion control and provides a means for hosts to dynamically adjust the throughput of the connection. -Learn more from the following resources: +Visit the following resources to learn more: - [@article@Transmission Control Protocol (TCP) - Khan Academy](https://www.khanacademy.org/computing/computers-and-internet/xcae6f4a7ff015e7d:the-internet/xcae6f4a7ff015e7d:transporting-packets/a/transmission-control-protocol--tcp) - [@article@A Comprehensive Guide to TCP/IP - PubNub](https://www.pubnub.com/guides/tcp-ip/) diff --git a/src/data/roadmaps/server-side-game-developer/content/tdd@FKOhe21PVlaKIoZI4hd49.md b/src/data/roadmaps/server-side-game-developer/content/tdd@FKOhe21PVlaKIoZI4hd49.md index b6059e325411..22d21e3441d5 100644 --- a/src/data/roadmaps/server-side-game-developer/content/tdd@FKOhe21PVlaKIoZI4hd49.md +++ b/src/data/roadmaps/server-side-game-developer/content/tdd@FKOhe21PVlaKIoZI4hd49.md @@ -1,7 +1,7 @@ # TDD `Test Driven Development (TDD)` is a development strategy in which developers write tests before writing the bare minimum of code required for the test to be passed. The process involves three stages: red, green, and refactor. In the red phase, a test is written which initially fails (since the code it's testing doesn't exist yet). In the green phase, the minimal amount of code to make the test pass is created. Lastly, in the refactor phase, the written code is improved without affecting its behavior. The process is often visualized as a cycle: "Red - Green - Refactor". This repeating process allows for smaller, more defined feature development, reduces bug emergence, and encourages simple design. TDD is primarily used in agile development environments. -Learn more from the following resources: +Visit the following resources to learn more: - [@article@Test-Driven Game Development (Part 1) - Games From Within](https://gamesfromwithin.com/stepping-through-the-looking-glass-test-driven-game-development-part-1) - [@article@How I Use Test Driven Development to Make Games - Ariel Coppes](https://arielcoppes.dev/2023/10/29/tdd-to-make-games.html) diff --git a/src/data/roadmaps/server-side-game-developer/content/tensorflow@iJE9RnKC8QjPnsFeZAbtl.md b/src/data/roadmaps/server-side-game-developer/content/tensorflow@iJE9RnKC8QjPnsFeZAbtl.md index d0dd21ff4227..e7ee83ee437f 100644 --- a/src/data/roadmaps/server-side-game-developer/content/tensorflow@iJE9RnKC8QjPnsFeZAbtl.md +++ b/src/data/roadmaps/server-side-game-developer/content/tensorflow@iJE9RnKC8QjPnsFeZAbtl.md @@ -2,7 +2,7 @@ **TensorFlow** is an open-source, end-to-end platform initially developed by Google Brain Team. Focusing on machine learning and equipped to handle deep learning tasks, TensorFlow takes input as a multi-dimensional array also known as a 'tensor'. The framework allows developers to create dataflow graphs. These graphs describe how data moves in a computing unit, be it a machine or a cloud. Within the graph, nodes represent mathematical operations while edges symbolize the tensors. TensorFlow is highly scalable and allows for computations across multiple CPUs or GPUs, making it appropriate for various tasks - be it server-side game development or research. -Learn more from the following resources: +Visit the following resources to learn more: - [@article@Tutorials | TensorFlow Core - TensorFlow](https://www.tensorflow.org/tutorials) - [@article@TensorFlow – What Is It and Why Does It Matter? - NVIDIA](https://www.nvidia.com/en-au/glossary/tensorflow/) diff --git a/src/data/roadmaps/server-side-game-developer/content/thread-building-block-c@tiG0mZpLJ2zUr2IPYyhnv.md b/src/data/roadmaps/server-side-game-developer/content/thread-building-block-c@tiG0mZpLJ2zUr2IPYyhnv.md index 0e2a79d53860..142bdf17a748 100644 --- a/src/data/roadmaps/server-side-game-developer/content/thread-building-block-c@tiG0mZpLJ2zUr2IPYyhnv.md +++ b/src/data/roadmaps/server-side-game-developer/content/thread-building-block-c@tiG0mZpLJ2zUr2IPYyhnv.md @@ -1,8 +1,8 @@ # Thread Building Block (C++) The **Thread Building Blocks** (TBB) is an open-source C++ library developed by Intel. It is designed to take advantage of multi-core processors by simplifying the process of deploying parallel tasks. Using TBB, you can easily break down your tasks into smaller sub-tasks that can be processed in parallel, improving the speed and efficiency of your game server. TBB encompasses generic parallel algorithms, concurrent containers, a scalable memory allocator, work-stealing task scheduler, and low-level synchronization primitives. However, it's not a library for threading as POSIX or Win32 threads, rather, it's a higher-level, task-based parallelism that abstracts platform details and threading mechanism for performance and scalability. -Learn more from the following resources: +Visit the following resources to learn more: - [@article@Getting Started with Intel Threading Building Blocks - Intel](https://www.intel.com/content/www/us/en/developer/articles/guide/get-started-with-tbb.html) -- [@repository@oneAPI Threading Building Blocks (oneTBB) - GitHub](https://github.com/uxlfoundation/oneTBB) +- [@opensource@oneAPI Threading Building Blocks (oneTBB) - GitHub](https://github.com/uxlfoundation/oneTBB) - [@article@Intel oneAPI Threading Building Blocks - Intel](https://www.intel.com/content/www/us/en/developer/tools/oneapi/onetbb.html) diff --git a/src/data/roadmaps/server-side-game-developer/content/thread-local-storage@IeD-oQ1bkwlKNC-R0lJjZ.md b/src/data/roadmaps/server-side-game-developer/content/thread-local-storage@IeD-oQ1bkwlKNC-R0lJjZ.md index 9356d7367910..ba8723b199ce 100644 --- a/src/data/roadmaps/server-side-game-developer/content/thread-local-storage@IeD-oQ1bkwlKNC-R0lJjZ.md +++ b/src/data/roadmaps/server-side-game-developer/content/thread-local-storage@IeD-oQ1bkwlKNC-R0lJjZ.md @@ -2,7 +2,7 @@ `Thread Local Storage (TLS)` is a mechanism by which variables are allocated such that each thread gets its own individually allocated variable, but the name of the variable is the same in each thread. In other words, the same variable can simultaneously hold different values for different threads. TLS is required when you need to use a global or static variable in a thread-safe manner but the data must be unique to each thread. TLS can be used in many applications, but it is particularly useful for storing per-thread state in server applications. -Learn more from the following resources: +Visit the following resources to learn more: - [@article@Thread-local storage - Wikipedia](https://en.wikipedia.org/wiki/Thread-local_storage) - [@article@Thread Local Storage - Win32 apps - Microsoft Learn](https://learn.microsoft.com/en-us/windows/win32/procthread/thread-local-storage) diff --git a/src/data/roadmaps/server-side-game-developer/content/timestamp@6KAYNPLEFMp6Jha8FLMAU.md b/src/data/roadmaps/server-side-game-developer/content/timestamp@6KAYNPLEFMp6Jha8FLMAU.md index 02511073a817..e83d9b37b3ef 100644 --- a/src/data/roadmaps/server-side-game-developer/content/timestamp@6KAYNPLEFMp6Jha8FLMAU.md +++ b/src/data/roadmaps/server-side-game-developer/content/timestamp@6KAYNPLEFMp6Jha8FLMAU.md @@ -2,7 +2,7 @@ A `timestamp` in server side game development is essentially a sequence of characters, encoding the date and time at which a certain event occurred. This data is particularly significant when tracking the sequence of certain events, debugging issues, logging, and when performing any sort of data analysis. The timestamp is typically generated by the server and it reflects the server's current date and time. For instance, you might find it in a server log file, indicating when each event occurred, or in a database row, showing when each row was created or last updated. Timestamps are often included in the HTTP headers to let the client know when the resource was last modified. -Learn more from the following resources: +Visit the following resources to learn more: - [@article@Unix time - Wikipedia](https://en.wikipedia.org/wiki/Unix_time) - [@article@Best practices for timestamps and time zones in databases - Tinybird](https://www.tinybird.co/blog/database-timestamps-timezones) diff --git a/src/data/roadmaps/server-side-game-developer/content/tls@FX8ASd-QzTUFDHzBB93WK.md b/src/data/roadmaps/server-side-game-developer/content/tls@FX8ASd-QzTUFDHzBB93WK.md index 7495db6d627a..0d90325eec0d 100644 --- a/src/data/roadmaps/server-side-game-developer/content/tls@FX8ASd-QzTUFDHzBB93WK.md +++ b/src/data/roadmaps/server-side-game-developer/content/tls@FX8ASd-QzTUFDHzBB93WK.md @@ -1,6 +1,6 @@ # Tls -Learn more from the following resources: +Visit the following resources to learn more: - [@article@The TLS Handshake Explained - Auth0](https://auth0.com/blog/the-tls-handshake-explained/) - [@article@Transport Layer Security (TLS) - MDN Web Docs](https://developer.mozilla.org/en-US/docs/Web/Security/Defenses/Transport_Layer_Security) diff --git a/src/data/roadmaps/server-side-game-developer/content/toml@l8iEC3g0ICSfmIE1MxcUl.md b/src/data/roadmaps/server-side-game-developer/content/toml@l8iEC3g0ICSfmIE1MxcUl.md index e59c98519405..4538f5230464 100644 --- a/src/data/roadmaps/server-side-game-developer/content/toml@l8iEC3g0ICSfmIE1MxcUl.md +++ b/src/data/roadmaps/server-side-game-developer/content/toml@l8iEC3g0ICSfmIE1MxcUl.md @@ -2,7 +2,7 @@ `TOML`, which stands for Tom's Obvious, Minimal Language, is a configuration file format that is easy to read due to its straightforward and simple syntax. The language is designed to be unambiguous and lean, intending to make it easy for a machine to parse. It supports basic data types, such as Integer, String, Boolean, and Float, Date-Time, Array, and Table. Unlike other similar file formats, `TOML` provides a more structured hierarchy. You can use `TOML` for configuration, serialization, and other similar tasks in game development. -Learn more from the following resources: +Visit the following resources to learn more: - [@article@TOML: Tom's Obvious Minimal Language](https://toml.io/en/) - [@article@Learn TOML in Y Minutes](https://learnxinyminutes.com/toml/) diff --git a/src/data/roadmaps/server-side-game-developer/content/transactions@r2OeI7YC1BLLfctC8q69W.md b/src/data/roadmaps/server-side-game-developer/content/transactions@r2OeI7YC1BLLfctC8q69W.md index 41b6bbacfcda..17e136856120 100644 --- a/src/data/roadmaps/server-side-game-developer/content/transactions@r2OeI7YC1BLLfctC8q69W.md +++ b/src/data/roadmaps/server-side-game-developer/content/transactions@r2OeI7YC1BLLfctC8q69W.md @@ -2,7 +2,7 @@ In server-side game development, **transactions** are critical elements that facilitate the exchange or interaction between different processes and data streams. These are usually carried out via a database or a server and are atomically treated as a single unit of work, ensuring data consistency and integrity. Transactions follow a specific pattern known as ACID (Atomicity, Consistency, Isolation, Durability) which makes sure that all intended operations within a transaction are successfully performed or none of them are, preventing disruptions in the event of an error or failure. It also ensures that concurrent execution of transactions results in a system state that would be achieved if transactions were executed sequentially. It's important for a server-side game developer to understand how to manage and control transactions to maintain the robustness of the game's backend system. -Learn more from the following resources: +Visit the following resources to learn more: - [@article@ACID Transactions in DBMS Explained - MongoDB](https://www.mongodb.com/resources/basics/databases/acid-transactions) - [@article@A Guide to Database Transactions: From ACID to Concurrency Control - ByteByteGo](https://blog.bytebytego.com/p/a-guide-to-database-transactions) diff --git a/src/data/roadmaps/server-side-game-developer/content/udp@IMyHwnXxJK6oFxzOMLxjS.md b/src/data/roadmaps/server-side-game-developer/content/udp@IMyHwnXxJK6oFxzOMLxjS.md index a8370d65fdea..2d71d5682d84 100644 --- a/src/data/roadmaps/server-side-game-developer/content/udp@IMyHwnXxJK6oFxzOMLxjS.md +++ b/src/data/roadmaps/server-side-game-developer/content/udp@IMyHwnXxJK6oFxzOMLxjS.md @@ -2,7 +2,7 @@ `UDP`, or User Datagram Protocol, is a communications protocol that sends data over the internet. Unlike TCP (Transmission Control Protocol), it's a connectionless protocol that doesn't ensure data packet delivery. It transmits datagrams – an independent, discrete packet of data – without first establishing a proper handshake between the sender and the receiver. The sender doesn't wait for an acknowledgment after sending a datagram, and the receiver doesn't send any acknowledgment upon receiving a datagram. This makes UDP faster but less reliable than TCP. UDP is used for time-sensitive transmissions where dropped packets are acceptable, such as in live video streaming, voice over IP (VoIP), and online multiplayer gaming. -Learn more from the following resources: +Visit the following resources to learn more: - [@article@User Datagram Protocol (UDP) - Beej's Guide to Network Concepts](https://beej.us/guide/bgnet0/html/split/user-datagram-protocol-udp.html) - [@article@What Is User Datagram Protocol (UDP)? - emnify](https://www.emnify.com/blog/udp) diff --git a/src/data/roadmaps/server-side-game-developer/content/update-process@3Eat22rFjUl4eTtGz8u4N.md b/src/data/roadmaps/server-side-game-developer/content/update-process@3Eat22rFjUl4eTtGz8u4N.md index a67f25ece22c..080cc1c0e4ae 100644 --- a/src/data/roadmaps/server-side-game-developer/content/update-process@3Eat22rFjUl4eTtGz8u4N.md +++ b/src/data/roadmaps/server-side-game-developer/content/update-process@3Eat22rFjUl4eTtGz8u4N.md @@ -2,7 +2,7 @@ In the reactive model, the client sends requests to the server, which then processes the request and sends back a response. This model is called 'reactive' because the server only acts or 'reacts' when it receives a request from the client. The "update process" plays a vital role in this model. It's the server's responsibility to keep the game world updated and synchronized among all players. This updating process is typically done in a loop that processes all the changes that happen in the game like players’ actions, NPC movements, in-game events or game physics. It updates the game world and informs the players about the changes. Also, if a player makes changes like moving a character or attacking an enemy, it sends this information to the server adding it to the update loop. The frequency of this updating process is often referred to as 'tick rate'. -Learn more from the following resources: +Visit the following resources to learn more: - [@article@Game Server Tick Rate Explained: Gameplay Precision vs Infrastructure Cost - Edgegap](https://edgegap.com/blog/game-server-tick-rate-explained-gameplay-precision-vs-infrastructure-cost) - [@article@Tick and update rates - Unity Netcode for GameObjects](https://docs.unity3d.com/Packages/com.unity.netcode.gameobjects@2.4/manual/learn/ticks-and-update-rates.html) diff --git a/src/data/roadmaps/server-side-game-developer/content/veto@ZLTfpRZ0rF-mtd7Z0R2WF.md b/src/data/roadmaps/server-side-game-developer/content/veto@ZLTfpRZ0rF-mtd7Z0R2WF.md index 655330ab85a4..cd37914154d3 100644 --- a/src/data/roadmaps/server-side-game-developer/content/veto@ZLTfpRZ0rF-mtd7Z0R2WF.md +++ b/src/data/roadmaps/server-side-game-developer/content/veto@ZLTfpRZ0rF-mtd7Z0R2WF.md @@ -2,7 +2,7 @@ `Veto` is often used in multiplayer games to prevent or allow certain actions during the game. For instance, players can issue commands to block specific actions from their opponents. As a server-side game developer, you must ensure security measures are in place to validate the authenticity of these commands to safeguard against potential vulnerability. A veto vulnerability can occur when malicious players manipulate veto commands to their advantage or disrupt the game, which can lead to an unfair gaming environment or even crash the server. Therefore, your code should always verify who is sending veto commands and check the validity of these commands. -Learn more from the following resources: +Visit the following resources to learn more: - [@article@OWASP Game Security Framework](https://owasp.org/www-project-gamesec-framework/OGSF) - [@article@Validating User Actions on the Server - GameDev Stack Exchange](https://gamedev.stackexchange.com/questions/101290/validating-user-actions-on-the-server) diff --git a/src/data/roadmaps/server-side-game-developer/content/vulnerability@MwLWDlciJOq_0n5S3GoF-.md b/src/data/roadmaps/server-side-game-developer/content/vulnerability@MwLWDlciJOq_0n5S3GoF-.md index 2315e79a6231..ef2b309b31b6 100644 --- a/src/data/roadmaps/server-side-game-developer/content/vulnerability@MwLWDlciJOq_0n5S3GoF-.md +++ b/src/data/roadmaps/server-side-game-developer/content/vulnerability@MwLWDlciJOq_0n5S3GoF-.md @@ -2,7 +2,7 @@ `TCP` (Transmission Control Protocol) is an important protocol known for its reliability in delivering data packets, but it also has several vulnerabilities. The most significant weakness is TCP’s susceptibility to a variety of **Denial-of-Service (DoS)** attacks, such as TCP SYN flood attacks, where an attacker sends a succession of SYN requests to a target's system in an attempt to consume server resources to make the system unresponsive. Additionally, sequence prediction can be exploited where an attacker can predict the sequence number of TCP packets to hijack the TCP session. There are also risks of IP spoofing, where an attacker can forge the IP address in the TCP packet header and pretend to be another user in the network. These vulnerabilities may expose sensitive information, disrupt normal functions or allow unauthorized access, especially in the context of a server-side game developer dealing with potentially large volumes of traffic. -Learn more from the following resources: +Visit the following resources to learn more: - [@article@What is a TCP SYN Flood | Mitigation Techniques - Imperva](https://www.imperva.com/learn/ddos/syn-flood/) - [@article@What Are TCP SYN Flood DDOS Attacks & 6 Ways to Stop Them - Radware](https://www.radware.com/security/ddos-knowledge-center/ddospedia/tcp-flood/) diff --git a/src/data/roadmaps/server-side-game-developer/content/window-scaling@zvBKjceXRSfEe_3MDCEL5.md b/src/data/roadmaps/server-side-game-developer/content/window-scaling@zvBKjceXRSfEe_3MDCEL5.md index 11bae03501cd..3957f174e466 100644 --- a/src/data/roadmaps/server-side-game-developer/content/window-scaling@zvBKjceXRSfEe_3MDCEL5.md +++ b/src/data/roadmaps/server-side-game-developer/content/window-scaling@zvBKjceXRSfEe_3MDCEL5.md @@ -1,7 +1,7 @@ # Window Scaling Window Scaling is a mechanism in the Transmission Control Protocol (TCP) that provides support for larger receiver window sizes beyond the maximum limit of 65,535 bytes. This TCP feature is essential when dealing with high latency or high bandwidth networks (common in server-side game development), where frames might be significantly delayed or rapidly transmitted. The window size initially specified in the TCP header is augmented via a scale factor (defined during the connection setup), allowing the receiver window size to be as large as 1 gigabyte. However, keep in mind that Window Scaling can only be employed at the connection setup stage; once the connection is established, the scaling factor cannot be changed. -Learn more from the following resources: +Visit the following resources to learn more: - [@article@TCP Window Size Scaling - NetworkLessons](https://networklessons.com/network-fundamentals/tcp-window-size-scaling) - [@article@TCP Window Scale Option - Wikipedia](https://en.wikipedia.org/wiki/TCP_window_scale_option) diff --git a/src/data/roadmaps/server-side-game-developer/content/windows@mW2L_9NckgPRH7g5W9NHq.md b/src/data/roadmaps/server-side-game-developer/content/windows@mW2L_9NckgPRH7g5W9NHq.md index 810d63ce056d..af0a396a907a 100644 --- a/src/data/roadmaps/server-side-game-developer/content/windows@mW2L_9NckgPRH7g5W9NHq.md +++ b/src/data/roadmaps/server-side-game-developer/content/windows@mW2L_9NckgPRH7g5W9NHq.md @@ -1,7 +1,7 @@ # Windows In the context of server-side game development, Windows operating system offers an API for Thread Local Storage (TLS). This refers to a mechanism by which variables are allocated that are unique for each thread in a program. When a thread reads from or writes to a TLS index, it is actually referencing a thread-specific memory block. This memory block is dynamically allocated from the system heap when the thread is created and subsequently freed up when the thread is terminated. This management of memory is done implicitly by the system which can reduce complexity for developers. -Learn more from the following resources: +Visit the following resources to learn more: - [@article@Windows Game Development Guide - Microsoft Learn](https://learn.microsoft.com/en-us/windows/uwp/gaming/e2e) - [@article@How to Set Up a Dedicated Game Server - Intel](https://www.intel.com/content/www/us/en/gaming/resources/game-server.html) diff --git a/src/data/roadmaps/server-side-game-developer/content/winsock@GfTXffisLyQgp66zcQ7Py.md b/src/data/roadmaps/server-side-game-developer/content/winsock@GfTXffisLyQgp66zcQ7Py.md index 4ef3ae31b453..9c2756f471be 100644 --- a/src/data/roadmaps/server-side-game-developer/content/winsock@GfTXffisLyQgp66zcQ7Py.md +++ b/src/data/roadmaps/server-side-game-developer/content/winsock@GfTXffisLyQgp66zcQ7Py.md @@ -1,7 +1,7 @@ # Winsock `Winsock` is an acronym for Windows Sockets API, a technical specification that defines how networking software should interact with TCP/IP network protocols, such as TCP, UDP, and ICMP, on a Windows Operating System. Essentially, Winsock provides an interface for developers to use when they need to write network applications. This API provides functionalities to create a socket, bind it to a specific address, listen to incoming connections, send and receive data, and finally, close the connection. Winsock also aids in handling network errors and exceptions. For developing multiplayer server-side games, it is useful in managing client-server communications, multiplayer logic, and real-time updates. Note that in the gaming context, the Winsock library is typically used for real-time, high-performance applications due to its low-level access to the TCP/IP stack. -Learn more from the following resources: +Visit the following resources to learn more: - [@article@Getting Started with Winsock - Microsoft Learn](https://learn.microsoft.com/en-us/windows/win32/winsock/getting-started-with-winsock) - [@article@Winsock Functions - Microsoft Learn](https://learn.microsoft.com/en-us/windows/win32/winsock/winsock-functions) diff --git a/src/data/roadmaps/server-side-game-developer/content/wsa-poll@D9Yeyn8phDhB1ohMWccgr.md b/src/data/roadmaps/server-side-game-developer/content/wsa-poll@D9Yeyn8phDhB1ohMWccgr.md index 1009302bc76e..0be847da4b39 100644 --- a/src/data/roadmaps/server-side-game-developer/content/wsa-poll@D9Yeyn8phDhB1ohMWccgr.md +++ b/src/data/roadmaps/server-side-game-developer/content/wsa-poll@D9Yeyn8phDhB1ohMWccgr.md @@ -8,9 +8,9 @@ connections. However, it is generally less efficient than `epoll` on Linux due t scanning mechanism. For high-performance game servers on Windows, IOCP (I/O Completion Ports) is often preferred over `WSA-Poll`. -Learn more from the following resources: +Visit the following resources to learn more: -- [@documentation@Microsoft WSA-Poll Documentation](https://learn.microsoft.com/en-us/windows/win32/api/winsock2/nf-winsock2-wsapoll) +- [@official@Microsoft WSA-Poll Documentation](https://learn.microsoft.com/en-us/windows/win32/api/winsock2/nf-winsock2-wsapoll) - [@article@WSAPoll is Broken - Daniel Stenberg](https://daniel.haxx.se/blog/2012/10/10/wsapoll-is-broken/) - [@article@WSAPOLLFD Structure - Microsoft Learn](https://learn.microsoft.com/en-us/windows/win32/api/winsock2/ns-winsock2-wsapollfd) - [@article@WSAPoll Sample Code - Microsoft Windows Classic Samples](https://github.com/microsoft/Windows-classic-samples/blob/main/Samples/Win7Samples/netds/winsock/wsapoll/poll.cpp) diff --git a/src/data/roadmaps/server-side-game-developer/content/xml@v43K6srds7m5SQFqNaY0T.md b/src/data/roadmaps/server-side-game-developer/content/xml@v43K6srds7m5SQFqNaY0T.md index d0f760dff94e..9afd2fa82bf8 100644 --- a/src/data/roadmaps/server-side-game-developer/content/xml@v43K6srds7m5SQFqNaY0T.md +++ b/src/data/roadmaps/server-side-game-developer/content/xml@v43K6srds7m5SQFqNaY0T.md @@ -1,7 +1,7 @@ # XML XML, or Extensible Markup Language, is a language designed to store and transport data without being dependent on a particular software or hardware. Unlike HTML which displays data and focuses on how data looks, XML works as a tool to transfer data and emphasizes on what the data is. XML data is known as self-describing or self-defining, as it has the ability to define and describe the structure and data types itself. It uses tags just like HTML, but the tags in XML are not predefined; it allows the author to define his/her own tags and document structure. XML also supports Unicode, allowing almost any information in any human language to be communicated. It adheres to a strict syntax and is both human-readable and machine-readable, making it a widely used standard in web and server-side development. -Learn more from the following resources: +Visit the following resources to learn more: - [@article@XML Tutorial - W3Schools](https://www.w3schools.com/xml/) - [@article@XML Introduction - MDN](https://developer.mozilla.org/en-US/docs/Web/XML/XML_introduction) diff --git a/src/data/roadmaps/server-side-game-developer/content/yaml@uHcUSVLz_2-Usk6ckSvwr.md b/src/data/roadmaps/server-side-game-developer/content/yaml@uHcUSVLz_2-Usk6ckSvwr.md index a32218e7d4d0..23c96033df92 100644 --- a/src/data/roadmaps/server-side-game-developer/content/yaml@uHcUSVLz_2-Usk6ckSvwr.md +++ b/src/data/roadmaps/server-side-game-developer/content/yaml@uHcUSVLz_2-Usk6ckSvwr.md @@ -1,7 +1,7 @@ # YAML YAML, which stands for "YAML Ain't Markup Language," is a human-readable data serialization standard that can be used in conjunction with all programming languages. It is often used to write configuration files and in applications where data is being stored or transmitted. YAML supports advanced features like referencing, merging, arrays and dictionaries. Also, it is flexible and supports various data structures like scalars, sequences, associative arrays. Though it might seem similar to JSON and XML, it focuses on data serialization rather than marking up documents, and ensures readability for humans. It uses a whitespace indentation to denote structure, which can simplify file format complexities. -Learn more from the following resources: +Visit the following resources to learn more: - [@article@YAML Tutorial: A Complete Language Guide - Spacelift](https://spacelift.io/blog/yaml) - [@article@YAML for Beginners - Red Hat](https://www.redhat.com/en/blog/yaml-beginners)