{"id":30676415,"url":"https://github.com/mun1z/kingnetwork","last_synced_at":"2025-09-01T10:13:20.000Z","repository":{"id":41157518,"uuid":"154212455","full_name":"MUN1Z/KingNetwork","owner":"MUN1Z","description":"KingNetwork is an open source library to facilitate the creation and communication of clients and servers via TCP, UDP, WebSocket and RUDP sockets.","archived":false,"fork":false,"pushed_at":"2022-05-10T02:19:07.000Z","size":1086,"stargazers_count":105,"open_issues_count":2,"forks_count":20,"subscribers_count":12,"default_branch":"main","last_synced_at":"2025-08-31T09:36:37.978Z","etag":null,"topics":["king","kingnetwork","mmorpg","multiplayer","mun1z","network","socket","tcp","udp","uinity3d","unity","web","websocket"],"latest_commit_sha":null,"homepage":"https://github.com/Mun1z/KingNetwork","language":"C#","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/MUN1Z.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE.md","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2018-10-22T20:29:46.000Z","updated_at":"2025-08-30T03:34:10.000Z","dependencies_parsed_at":"2022-09-01T13:42:36.109Z","dependency_job_id":null,"html_url":"https://github.com/MUN1Z/KingNetwork","commit_stats":null,"previous_names":[],"tags_count":4,"template":false,"template_full_name":null,"purl":"pkg:github/MUN1Z/KingNetwork","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/MUN1Z%2FKingNetwork","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/MUN1Z%2FKingNetwork/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/MUN1Z%2FKingNetwork/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/MUN1Z%2FKingNetwork/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/MUN1Z","download_url":"https://codeload.github.com/MUN1Z/KingNetwork/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/MUN1Z%2FKingNetwork/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":273105959,"owners_count":25046950,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","status":"online","status_checked_at":"2025-09-01T02:00:09.058Z","response_time":120,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["king","kingnetwork","mmorpg","multiplayer","mun1z","network","socket","tcp","udp","uinity3d","unity","web","websocket"],"created_at":"2025-09-01T10:13:19.136Z","updated_at":"2025-09-01T10:13:19.990Z","avatar_url":"https://github.com/MUN1Z.png","language":"C#","readme":"[![MIT License](https://img.shields.io/apm/l/atomic-design-ui.svg?)](https://github.com/tterb/atomic-design-ui/blob/master/LICENSEs)\n[![Discord](https://img.shields.io/discord/507641974421979145?label=Discord)](https://discord.gg/N8gyF7)\n[![GitHub stars](https://img.shields.io/github/stars/mun1z/kingnetwork?label=stargazers\u0026logoColor=yellow\u0026style=social)](https://github.com/mun1z/kingnetwork/stargazers)\n\n\u003cp align=\"center\"\u003e\n  \u003cimg src=\"https://github.com/Mun1z/KingNetwork/blob/main/resources/logo.png\"\u003e\n\u003c/p\u003e\n\n# Examples\n\n**Cubes Unity Example**\u003cbr/\u003e\n\n\u003cp align=\"center\"\u003e\n  \u003cimg src=\"https://github.com/Mun1z/KingNetwork/blob/main/resources/CubesExample.gif\"\u003e\n\u003c/p\u003e\n\n\u003cbr/\u003e\n\n# Nuget Packages\n\n**King Server**\u003cbr/\u003e\n\u003ca href=\"https://www.nuget.org/packages/KingNetwork.Server/\"\u003ehttps://www.nuget.org/packages/KingNetwork.Server/\u003c/a\u003e\u003cbr/\u003e\n\n**King Client**\u003cbr/\u003e\n\u003ca href=\"https://www.nuget.org/packages/KingNetwork.Client/\"\u003ehttps://www.nuget.org/packages/KingNetwork.Client/\u003c/a\u003e\u003cbr/\u003e\n\n**King Shared**\u003cbr/\u003e\n\u003ca href=\"https://www.nuget.org/packages/KingNetwork.Shared/\"\u003ehttps://www.nuget.org/packages/KingNetwork.Shared/\u003c/a\u003e\u003cbr/\u003e\u003cbr/\u003e\n\n# Using the TCP connection on KingServer\n```C#\n// create and start the async server\nvar server = new KingServer(port: 7171);\nserver.MessageReceivedHandler = OnMessageReceived;\n\n//ASync execution\nawait server.StartAsync(); //You can pass a out var cancellationToken in parameter\n//Sync execution\nserver.Start();\n\n// implements the callback for MessageReceivedHandler\nprivate void OnMessageReceived(IClient client, IKingBufferReader reader)\n{\n    Console.WriteLine($\"Received data from client {client.Id}, data length {reader.Length()}\");\n}\n\n// send a message to all clients\nusing(var writer = KingBufferWriter.Create())\n{\n    writer.Write(\"Test message!\");\n    server.SendMessageToAll(writer);\n}\n\n// stop the server when you don't need it anymore\nserver.Stop();\n```\n\n# Using the TCP connection on KingClient\n```C#\n// create and connect the client\nvar client = new KingClient();\nclient.MessageReceivedHandler = OnMessageReceived;\nclient.Connect(\"127.0.0.1\", 7171);\n\n// implements the callback for MessageReceivedHandler\nprivate void OnMessageReceived(IKingBufferReader reader)\n{\n    Console.WriteLine($\"Received data from server, data length {reader.Length()}\");\n}\n\n/// send a message to server\nusing(var writer = KingBufferWriter.Create()\n{\n    writer.Write(\"Test message!\");\n    client.SendMessage(writer);\n}\n\n// disconnect from the server when we are done\nclient.Disconnect();\n```\n\n# Using the UDP connection on KingServer\n```C#\n// create and start the server\nvar server = new KingServer(listenerType: NetworkListenerType.UDP, port: 7171);\nserver.MessageReceivedHandler = OnMessageReceived;\n\n//ASync execution\nawait server.StartAsync(); //You can pass a out var cancellationToken in parameter\n//Sync execution\nserver.Start();\n\n// implements the callback for MessageReceivedHandler\nprivate void OnMessageReceived(IClient client, IKingBufferReader reader)\n{\n    Console.WriteLine($\"Received data from client {client.Id}, data length {reader.Length()}\");\n}\n\n// send a message to all clients\nusing(var writer = KingBufferWriter.Create())\n{\n    writer.Write(\"Test message!\");\n    server.SendMessageToAll(writer);\n}\n\n// stop the server when you don't need it anymore\nserver.Stop();\n```\n\n# Using the UDP connection on KingClient\n```C#\n// create and connect the client\nvar client = new KingClient(listenerType: NetworkListenerType.UDP);\nclient.MessageReceivedHandler = OnMessageReceived;\nclient.Connect(\"127.0.0.1\", 7171);\n\n// implements the callback for MessageReceivedHandler\nprivate void OnMessageReceived(IKingBufferReader reader)\n{\n    Console.WriteLine($\"Received data from server, data length {reader.Length()}\");\n}\n\n/// send a message to server\nusing(var writer = KingBufferWriter.Create()\n{\n    writer.Write(\"Test message!\");\n    client.SendMessage(writer);\n}\n\n// disconnect from the server when we are done\nclient.Disconnect();\n```\n\n# Using the RUDP connection on KingServer\n```C#\n// create and start the server\nvar server = new KingServer(listenerType: NetworkListenerType.RUDP, port: 7171);\nserver.MessageReceivedHandler = OnMessageReceived;\n\n//ASync execution\nawait server.StartAsync(); //You can pass a out var cancellationToken in parameter\n//Sync execution\nserver.Start();\n\n// implements the callback for MessageReceivedHandler\nprivate void OnMessageReceived(IClient client, IKingBufferReader reader)\n{\n    Console.WriteLine($\"Received data from client {client.Id}, data length {reader.Length()}\");\n}\n\n// send a message to all clients\nusing(var writer = KingBufferWriter.Create())\n{\n    writer.Write(\"Test message!\");\n    //You can use RudpMessageType.Reliable to send Reliable messages and RudpMessageType.Unreliable to send Unreliable messages\n    server.SendMessageToAll(writer, RudpMessageType.Reliable);\n}\n\n// stop the server when you don't need it anymore\nserver.Stop();\n```\n\n# Using the RUDP connection on KingClient\n```C#\n// create and connect the client\nvar client = new KingClient(listenerType: NetworkListenerType.RUDP);\nclient.MessageReceivedHandler = OnMessageReceived;\nclient.Connect(\"127.0.0.1\", 7171);\n\n// implements the callback for MessageReceivedHandler\nprivate void OnMessageReceived(IKingBufferReader reader)\n{\n    Console.WriteLine($\"Received data from server, data length {reader.Length()}\");\n}\n\n/// send a message to server\nusing(var writer = KingBufferWriter.Create()\n{\n    writer.Write(\"Test message!\");\n    //You can use RudpMessageType.Reliable to send Reliable messages and RudpMessageType.Unreliable to send Unreliable messages\n    client.SendMessage(writer, RudpMessageType.Reliable);\n}\n\n// disconnect from the server when we are done\nclient.Disconnect();\n```\n\n# Using the WebSocket connection on KingServer\n```C#\n// create and start the server\nvar server = new KingServer(listenerType: NetworkListenerType.WSText, port: 7171); // Or NetworkListenerType.WSBinary\nserver.MessageReceivedHandler = OnMessageReceived;\n\n//ASync execution\nawait server.StartAsync(); //You can pass a out var cancellationToken in parameter\n//Sync execution\nserver.Start();\n\n// implements the callback for MessageReceivedHandler\nprivate void OnMessageReceived(IClient client, IKingBufferReader reader)\n{\n    Console.WriteLine($\"Received data from client {client.Id}, data length {reader.Length()}\");\n}\n\n// send a message to all clients\nusing(var writer = KingBufferWriter.Create())\n{\n    writer.Write(\"Test message!\");\n    server.SendMessageToAll(writer);\n}\n\n// stop the server when you don't need it anymore\nserver.Stop();\n```\n\n# Using the WebSocket connection on KingClient\n```C#\n// create and connect the client\nvar client = new KingClient(listenerType: NetworkListenerType.WSText); // Or NetworkListenerType.WSBinary\nclient.MessageReceivedHandler = OnMessageReceived;\nclient.Connect(\"127.0.0.1\", 7171);\n\n// implements the callback for MessageReceivedHandler\nprivate void OnMessageReceived(IKingBufferReader reader)\n{\n    Console.WriteLine($\"Received data from server, data length {reader.Length()}\");\n}\n\n/// send a message to server\nusing(var writer = KingBufferWriter.Create()\n{\n    writer.Write(\"Test message!\");\n    client.SendMessage(writer);\n}\n\n// disconnect from the server when we are done\nclient.Disconnect();\n```\n\n# TCP Benchmarks\n\n**Connections Test**\u003cbr/\u003e\nWe also test only the raw KingNetwork library by spawing 1 server and 1000 clients, each client sending 100 bytes 14 times per second and the server echoing the same message back to each client.\nTest Computer: Acer F 15 with a 2,9 GHz Intel Core i7 7gen processor and 32 GB ram DDR4.\u003cbr/\u003e\nTest Results:\u003cbr/\u003e\n\n| Clients | CPU Usage | Ram Usage | Bandwidth Client+Server  | Result |\n| ------- | ----------| --------- | ------------------------ | ------ |\n|  64     |      0.5% |      9 MB |         0.3 MB/s         | Passed |\n|  128    |        1% |     10 MB |         0.7 MB/s         | Passed |\n|  500    |       18% |     18 MB |         2~3 MB/s         | Passed |\n|  1000   |       32% |     26 MB |         5~6 MB/s         | Passed |\n","funding_links":[],"categories":[],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmun1z%2Fkingnetwork","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fmun1z%2Fkingnetwork","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmun1z%2Fkingnetwork/lists"}