Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/Mun1z/KingNetwork
KingNetwork is an open source library to facilitate the creation and communication of clients and servers via TCP, UDP, WebSocket and RUDP sockets.
https://github.com/Mun1z/KingNetwork
king kingnetwork mmorpg multiplayer mun1z network socket tcp udp uinity3d unity web websocket
Last synced: 3 months ago
JSON representation
KingNetwork is an open source library to facilitate the creation and communication of clients and servers via TCP, UDP, WebSocket and RUDP sockets.
- Host: GitHub
- URL: https://github.com/Mun1z/KingNetwork
- Owner: MUN1Z
- License: mit
- Created: 2018-10-22T20:29:46.000Z (over 6 years ago)
- Default Branch: main
- Last Pushed: 2022-05-10T02:19:07.000Z (over 2 years ago)
- Last Synced: 2024-11-09T11:12:18.363Z (3 months ago)
- Topics: king, kingnetwork, mmorpg, multiplayer, mun1z, network, socket, tcp, udp, uinity3d, unity, web, websocket
- Language: C#
- Homepage: https://github.com/Mun1z/KingNetwork
- Size: 1.04 MB
- Stars: 102
- Watchers: 13
- Forks: 20
- Open Issues: 2
-
Metadata Files:
- Readme: README.md
- License: LICENSE.md
Awesome Lists containing this project
README
[![MIT License](https://img.shields.io/apm/l/atomic-design-ui.svg?)](https://github.com/tterb/atomic-design-ui/blob/master/LICENSEs)
[![Discord](https://img.shields.io/discord/507641974421979145?label=Discord)](https://discord.gg/N8gyF7)
[![GitHub stars](https://img.shields.io/github/stars/mun1z/kingnetwork?label=stargazers&logoColor=yellow&style=social)](https://github.com/mun1z/kingnetwork/stargazers)
# Examples
**Cubes Unity Example**
# Nuget Packages
**King Server**
https://www.nuget.org/packages/KingNetwork.Server/**King Client**
https://www.nuget.org/packages/KingNetwork.Client/**King Shared**
https://www.nuget.org/packages/KingNetwork.Shared/# Using the TCP connection on KingServer
```C#
// create and start the async server
var server = new KingServer(port: 7171);
server.MessageReceivedHandler = OnMessageReceived;//ASync execution
await server.StartAsync(); //You can pass a out var cancellationToken in parameter
//Sync execution
server.Start();// implements the callback for MessageReceivedHandler
private void OnMessageReceived(IClient client, IKingBufferReader reader)
{
Console.WriteLine($"Received data from client {client.Id}, data length {reader.Length()}");
}// send a message to all clients
using(var writer = KingBufferWriter.Create())
{
writer.Write("Test message!");
server.SendMessageToAll(writer);
}// stop the server when you don't need it anymore
server.Stop();
```# Using the TCP connection on KingClient
```C#
// create and connect the client
var client = new KingClient();
client.MessageReceivedHandler = OnMessageReceived;
client.Connect("127.0.0.1", 7171);// implements the callback for MessageReceivedHandler
private void OnMessageReceived(IKingBufferReader reader)
{
Console.WriteLine($"Received data from server, data length {reader.Length()}");
}/// send a message to server
using(var writer = KingBufferWriter.Create()
{
writer.Write("Test message!");
client.SendMessage(writer);
}// disconnect from the server when we are done
client.Disconnect();
```# Using the UDP connection on KingServer
```C#
// create and start the server
var server = new KingServer(listenerType: NetworkListenerType.UDP, port: 7171);
server.MessageReceivedHandler = OnMessageReceived;//ASync execution
await server.StartAsync(); //You can pass a out var cancellationToken in parameter
//Sync execution
server.Start();// implements the callback for MessageReceivedHandler
private void OnMessageReceived(IClient client, IKingBufferReader reader)
{
Console.WriteLine($"Received data from client {client.Id}, data length {reader.Length()}");
}// send a message to all clients
using(var writer = KingBufferWriter.Create())
{
writer.Write("Test message!");
server.SendMessageToAll(writer);
}// stop the server when you don't need it anymore
server.Stop();
```# Using the UDP connection on KingClient
```C#
// create and connect the client
var client = new KingClient(listenerType: NetworkListenerType.UDP);
client.MessageReceivedHandler = OnMessageReceived;
client.Connect("127.0.0.1", 7171);// implements the callback for MessageReceivedHandler
private void OnMessageReceived(IKingBufferReader reader)
{
Console.WriteLine($"Received data from server, data length {reader.Length()}");
}/// send a message to server
using(var writer = KingBufferWriter.Create()
{
writer.Write("Test message!");
client.SendMessage(writer);
}// disconnect from the server when we are done
client.Disconnect();
```# Using the RUDP connection on KingServer
```C#
// create and start the server
var server = new KingServer(listenerType: NetworkListenerType.RUDP, port: 7171);
server.MessageReceivedHandler = OnMessageReceived;//ASync execution
await server.StartAsync(); //You can pass a out var cancellationToken in parameter
//Sync execution
server.Start();// implements the callback for MessageReceivedHandler
private void OnMessageReceived(IClient client, IKingBufferReader reader)
{
Console.WriteLine($"Received data from client {client.Id}, data length {reader.Length()}");
}// send a message to all clients
using(var writer = KingBufferWriter.Create())
{
writer.Write("Test message!");
//You can use RudpMessageType.Reliable to send Reliable messages and RudpMessageType.Unreliable to send Unreliable messages
server.SendMessageToAll(writer, RudpMessageType.Reliable);
}// stop the server when you don't need it anymore
server.Stop();
```# Using the RUDP connection on KingClient
```C#
// create and connect the client
var client = new KingClient(listenerType: NetworkListenerType.RUDP);
client.MessageReceivedHandler = OnMessageReceived;
client.Connect("127.0.0.1", 7171);// implements the callback for MessageReceivedHandler
private void OnMessageReceived(IKingBufferReader reader)
{
Console.WriteLine($"Received data from server, data length {reader.Length()}");
}/// send a message to server
using(var writer = KingBufferWriter.Create()
{
writer.Write("Test message!");
//You can use RudpMessageType.Reliable to send Reliable messages and RudpMessageType.Unreliable to send Unreliable messages
client.SendMessage(writer, RudpMessageType.Reliable);
}// disconnect from the server when we are done
client.Disconnect();
```# Using the WebSocket connection on KingServer
```C#
// create and start the server
var server = new KingServer(listenerType: NetworkListenerType.WSText, port: 7171); // Or NetworkListenerType.WSBinary
server.MessageReceivedHandler = OnMessageReceived;//ASync execution
await server.StartAsync(); //You can pass a out var cancellationToken in parameter
//Sync execution
server.Start();// implements the callback for MessageReceivedHandler
private void OnMessageReceived(IClient client, IKingBufferReader reader)
{
Console.WriteLine($"Received data from client {client.Id}, data length {reader.Length()}");
}// send a message to all clients
using(var writer = KingBufferWriter.Create())
{
writer.Write("Test message!");
server.SendMessageToAll(writer);
}// stop the server when you don't need it anymore
server.Stop();
```# Using the WebSocket connection on KingClient
```C#
// create and connect the client
var client = new KingClient(listenerType: NetworkListenerType.WSText); // Or NetworkListenerType.WSBinary
client.MessageReceivedHandler = OnMessageReceived;
client.Connect("127.0.0.1", 7171);// implements the callback for MessageReceivedHandler
private void OnMessageReceived(IKingBufferReader reader)
{
Console.WriteLine($"Received data from server, data length {reader.Length()}");
}/// send a message to server
using(var writer = KingBufferWriter.Create()
{
writer.Write("Test message!");
client.SendMessage(writer);
}// disconnect from the server when we are done
client.Disconnect();
```# TCP Benchmarks
**Connections Test**
We 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.
Test Computer: Acer F 15 with a 2,9 GHz Intel Core i7 7gen processor and 32 GB ram DDR4.
Test Results:| Clients | CPU Usage | Ram Usage | Bandwidth Client+Server | Result |
| ------- | ----------| --------- | ------------------------ | ------ |
| 64 | 0.5% | 9 MB | 0.3 MB/s | Passed |
| 128 | 1% | 10 MB | 0.7 MB/s | Passed |
| 500 | 18% | 18 MB | 2~3 MB/s | Passed |
| 1000 | 32% | 26 MB | 5~6 MB/s | Passed |