Skip to content

Latest commit

History

95 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

MIT LicenseDiscordGitHub stars

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

// create and start the async servervarserver=newKingServer(port:7171);server.MessageReceivedHandler=OnMessageReceived;//ASync executionawaitserver.StartAsync();//You can pass a out var cancellationToken in parameter//Sync executionserver.Start();// implements the callback for MessageReceivedHandlerprivatevoidOnMessageReceived(IClientclient,IKingBufferReaderreader){Console.WriteLine($"Received data from client {client.Id}, data length {reader.Length()}");}// send a message to all clientsusing(varwriter=KingBufferWriter.Create()){writer.Write("Test message!");server.SendMessageToAll(writer);}// stop the server when you don't need it anymoreserver.Stop();

Using the TCP connection on KingClient

// create and connect the clientvarclient=newKingClient();client.MessageReceivedHandler=OnMessageReceived;client.Connect("127.0.0.1",7171);// implements the callback for MessageReceivedHandlerprivatevoidOnMessageReceived(IKingBufferReaderreader){Console.WriteLine($"Received data from server, data length {reader.Length()}");}/// send a message to serverusing(varwriter=KingBufferWriter.Create(){writer.Write("Test message!");
client.SendMessage(writer);}// disconnect from the server when we are doneclient.Disconnect();

Using the UDP connection on KingServer

// create and start the servervarserver=newKingServer(listenerType:NetworkListenerType.UDP,port:7171);server.MessageReceivedHandler=OnMessageReceived;//ASync executionawaitserver.StartAsync();//You can pass a out var cancellationToken in parameter//Sync executionserver.Start();// implements the callback for MessageReceivedHandlerprivatevoidOnMessageReceived(IClientclient,IKingBufferReaderreader){Console.WriteLine($"Received data from client {client.Id}, data length {reader.Length()}");}// send a message to all clientsusing(varwriter=KingBufferWriter.Create()){writer.Write("Test message!");server.SendMessageToAll(writer);}// stop the server when you don't need it anymoreserver.Stop();

Using the UDP connection on KingClient

// create and connect the clientvarclient=newKingClient(listenerType:NetworkListenerType.UDP);client.MessageReceivedHandler=OnMessageReceived;client.Connect("127.0.0.1",7171);// implements the callback for MessageReceivedHandlerprivatevoidOnMessageReceived(IKingBufferReaderreader){Console.WriteLine($"Received data from server, data length {reader.Length()}");}/// send a message to serverusing(varwriter=KingBufferWriter.Create(){writer.Write("Test message!");
client.SendMessage(writer);}// disconnect from the server when we are doneclient.Disconnect();

Using the RUDP connection on KingServer

// create and start the servervarserver=newKingServer(listenerType:NetworkListenerType.RUDP,port:7171);server.MessageReceivedHandler=OnMessageReceived;//ASync executionawaitserver.StartAsync();//You can pass a out var cancellationToken in parameter//Sync executionserver.Start();// implements the callback for MessageReceivedHandlerprivatevoidOnMessageReceived(IClientclient,IKingBufferReaderreader){Console.WriteLine($"Received data from client {client.Id}, data length {reader.Length()}");}// send a message to all clientsusing(varwriter=KingBufferWriter.Create()){writer.Write("Test message!");//You can use RudpMessageType.Reliable to send Reliable messages and RudpMessageType.Unreliable to send Unreliable messagesserver.SendMessageToAll(writer,RudpMessageType.Reliable);}// stop the server when you don't need it anymoreserver.Stop();

Using the RUDP connection on KingClient

// create and connect the clientvarclient=newKingClient(listenerType:NetworkListenerType.RUDP);client.MessageReceivedHandler=OnMessageReceived;client.Connect("127.0.0.1",7171);// implements the callback for MessageReceivedHandlerprivatevoidOnMessageReceived(IKingBufferReaderreader){Console.WriteLine($"Received data from server, data length {reader.Length()}");}/// send a message to serverusing(varwriter=KingBufferWriter.Create(){writer.Write("Test message!");//You can use RudpMessageType.Reliable to send Reliable messages and RudpMessageType.Unreliable to send Unreliable messagesclient.SendMessage(writer,RudpMessageType.Reliable);}// disconnect from the server when we are doneclient.Disconnect();

Using the WebSocket connection on KingServer

// create and start the servervarserver=newKingServer(listenerType:NetworkListenerType.WSText,port:7171);// Or NetworkListenerType.WSBinaryserver.MessageReceivedHandler=OnMessageReceived;//ASync executionawaitserver.StartAsync();//You can pass a out var cancellationToken in parameter//Sync executionserver.Start();// implements the callback for MessageReceivedHandlerprivatevoidOnMessageReceived(IClientclient,IKingBufferReaderreader){Console.WriteLine($"Received data from client {client.Id}, data length {reader.Length()}");}// send a message to all clientsusing(varwriter=KingBufferWriter.Create()){writer.Write("Test message!");server.SendMessageToAll(writer);}// stop the server when you don't need it anymoreserver.Stop();

Using the WebSocket connection on KingClient

// create and connect the clientvarclient=newKingClient(listenerType:NetworkListenerType.WSText);// Or NetworkListenerType.WSBinaryclient.MessageReceivedHandler=OnMessageReceived;client.Connect("127.0.0.1",7171);// implements the callback for MessageReceivedHandlerprivatevoidOnMessageReceived(IKingBufferReaderreader){Console.WriteLine($"Received data from server, data length {reader.Length()}");}/// send a message to serverusing(varwriter=KingBufferWriter.Create(){writer.Write("Test message!");
client.SendMessage(writer);}// disconnect from the server when we are doneclient.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:

ClientsCPU UsageRam UsageBandwidth Client+ServerResult
640.5%9 MB0.3 MB/sPassed
1281%10 MB0.7 MB/sPassed
50018%18 MB2~3 MB/sPassed
100032%26 MB5~6 MB/sPassed

About

KingNetwork is an open source library to facilitate the creation and communication of clients and servers via TCP, UDP, WebSocket and RUDP sockets.

Topics

Resources

Stars

107 stars

Watchers

10 watching

Forks

Releases

Packages

Used by

Contributors

Languages