NTDLS.ReliableMessaging
1.3.1
See the version list below for details.
dotnet add package NTDLS.ReliableMessaging --version 1.3.1
NuGet\Install-Package NTDLS.ReliableMessaging -Version 1.3.1
<PackageReference Include="NTDLS.ReliableMessaging" Version="1.3.1" />
<PackageVersion Include="NTDLS.ReliableMessaging" Version="1.3.1" />
<PackageReference Include="NTDLS.ReliableMessaging" />
paket add NTDLS.ReliableMessaging --version 1.3.1
#r "nuget: NTDLS.ReliableMessaging, 1.3.1"
#:package NTDLS.ReliableMessaging@1.3.1
#addin nuget:?package=NTDLS.ReliableMessaging&version=1.3.1
#tool nuget:?package=NTDLS.ReliableMessaging&version=1.3.1
NTDLS.ReliableMessaging
📦 Be sure to check out the NuGet pacakge: https://www.nuget.org/packages/NTDLS.ReliableMessaging
NTDLS.ReliableMessaging provides incredibly lightweight, reliable, and high-performance TCP/IP based inter-process-communication functionality. This includes a server which listens for incoming connections and a client which makes a connection to the server.
Once connected the server and the client can send fire-and-forget style notifications or dispatch queries which require a reply.
All messages are guaranteed to be received in their entirety and in the order in which they were dispatched.
Example of server and client sending notifications and a query:
//Class used to send a notification.
internal class MyNotification : IFramePayloadNotification
{
public string Message { get; set; }
public MyNotification(string message)
{
Message = message;
}
}
//Class used to send a query (which expects a response).
internal class MyQuery : IFramePayloadQuery
{
public string Message { get; set; }
public MyQuery(string message)
{
Message = message;
}
}
//Class used to reply to a query.
internal class MyQueryReply : IFramePayloadQueryReply
{
public string Message { get; set; }
public MyQueryReply(string message)
{
Message = message;
}
}
static void Main()
{
//Start a server and add a "query received" and "notification received" event handler.
var server = new MessageServer();
server.OnQueryReceived += Server_OnQueryReceived;
server.OnNotificationReceived += Server_OnNotificationReceived;
server.Start(45784);
//Start a client and connect to the server.
var client = new MessageClient();
client.Connect("localhost", 45784);
client.Notify(new MyNotification("This is message 001 from the client."));
client.Notify(new MyNotification("This is message 002 from the client."));
client.Notify(new MyNotification("This is message 003 from the client."));
//Send a query to the server, specify which type of reply we expect.
client.Query<MyQueryReply>(new MyQuery("This is the query from the client.")).ContinueWith(x =>
{
//If we recevied a reply, print it to the console.
if (x.IsCompletedSuccessfully && x.Result != null)
{
Console.WriteLine($"Client received query reply: '{x.Result.Message}'");
}
});
Console.WriteLine("Press [enter] to shutdown.");
Console.ReadLine();
//Cleanup.
client.Disconnect();
server.Stop();
}
private static void Server_OnNotificationReceived(MessageServer server, Guid connectionId, IFramePayloadNotification payload)
{
if (payload is MyNotification notification)
{
Console.WriteLine($"Server received notification: {notification.Message}");
}
else
{
throw new NotImplementedException();
}
}
private static IFramePayloadQueryReply Server_OnQueryReceived(MessageServer server, Guid connectionId, IFramePayloadQuery payload)
{
if (payload is MyQuery query)
{
Console.WriteLine($"Server received query: '{query.Message}'");
//Return with a class that implements IFrameQueryReply to reply to the client.
return new MyQueryReply("This is the query reply from the server.");
}
else
{
throw new NotImplementedException();
}
}
| Product | Versions Compatible and additional computed target framework versions. |
|---|---|
| .NET | net6.0 is compatible. net6.0-android was computed. net6.0-ios was computed. net6.0-maccatalyst was computed. net6.0-macos was computed. net6.0-tvos was computed. net6.0-windows was computed. net7.0 is compatible. net7.0-android was computed. net7.0-ios was computed. net7.0-maccatalyst was computed. net7.0-macos was computed. net7.0-tvos was computed. net7.0-windows was computed. net8.0 is compatible. net8.0-android was computed. net8.0-browser was computed. net8.0-ios was computed. net8.0-maccatalyst was computed. net8.0-macos was computed. net8.0-tvos was computed. net8.0-windows was computed. net9.0 was computed. net9.0-android was computed. net9.0-browser was computed. net9.0-ios was computed. net9.0-maccatalyst was computed. net9.0-macos was computed. net9.0-tvos was computed. net9.0-windows was computed. net10.0 was computed. net10.0-android was computed. net10.0-browser was computed. net10.0-ios was computed. net10.0-maccatalyst was computed. net10.0-macos was computed. net10.0-tvos was computed. net10.0-windows was computed. |
-
net6.0
- NTDLS.StreamFraming (>= 1.2.1)
-
net7.0
- NTDLS.StreamFraming (>= 1.2.1)
-
net8.0
- NTDLS.StreamFraming (>= 1.2.1)
NuGet packages (5)
Showing the top 5 NuGet packages that depend on NTDLS.ReliableMessaging:
| Package | Downloads |
|---|---|
|
NTDLS.CatMQ.Shared
Shared library for NTDLS.CatMQ.Client and NTDLS.CatMQ.Server. Versioned independently from the dependent packages. |
|
|
NTDLS.MemoryQueue
An in-memory, non-persistent message queue designed for efficient inter-process communication, task queuing, load balancing, and data buffering over TCP/IP |
|
|
NTDLS.KitKey.Shared
Shared library for NTDLS.KitKey.Client and NTDLS.KitKey.Server. Versioned independently from the dependent packages. |
|
|
NTDLS.Katzebase.Api
Client for Katzebase document-based database engine for Windows and Linux. |
|
|
NTDLS.Katzebase.Client.dev
Client for Katzebase document-based database engine for Windows and Linux. |
GitHub repositories
This package is not used by any popular GitHub repositories.
| Version | Downloads | Last Updated |
|---|---|---|
| 3.2.11 | 301 | 11/22/2025 |
| 3.2.10 | 371 | 11/14/2025 |
| 3.2.9 | 189 | 10/27/2025 |
| 3.2.8 | 218 | 8/23/2025 |
| 3.2.7 | 241 | 6/3/2025 |
| 3.2.6 | 320 | 5/27/2025 |
| 3.2.5 | 237 | 5/23/2025 |
| 3.2.4 | 205 | 5/22/2025 |
| 3.2.3 | 356 | 5/22/2025 |
| 3.2.2 | 217 | 5/22/2025 |
| 3.2.1 | 192 | 5/22/2025 |
| 3.2.0 | 186 | 5/22/2025 |
| 3.1.1 | 220 | 5/21/2025 |
| 3.1.0 | 207 | 5/20/2025 |
| 3.0.2 | 207 | 5/19/2025 |
| 3.0.1 | 208 | 5/16/2025 |
| 3.0.0 | 250 | 5/16/2025 |
| 2.1.8 | 269 | 5/14/2025 |
| 2.1.7 | 319 | 5/14/2025 |
| 2.1.6 | 288 | 5/2/2025 |
| 2.1.5 | 351 | 3/10/2025 |
| 2.1.4 | 171 | 3/2/2025 |
| 2.1.3 | 235 | 1/31/2025 |
| 2.1.2 | 220 | 1/30/2025 |
| 2.1.1 | 234 | 1/25/2025 |
| 2.1.0 | 182 | 1/19/2025 |
| 2.0.1 | 669 | 1/13/2025 |
| 2.0.0 | 229 | 1/13/2025 |
| 1.12.0 | 224 | 1/11/2025 |
| 1.11.7 | 352 | 1/8/2025 |
| 1.11.6 | 436 | 1/4/2025 |
| 1.11.5 | 250 | 1/4/2025 |
| 1.11.4 | 721 | 12/31/2024 |
| 1.11.3 | 203 | 12/31/2024 |
| 1.11.2 | 183 | 12/27/2024 |
| 1.11.1 | 219 | 12/26/2024 |
| 1.11.0 | 428 | 12/21/2024 |
| 1.10.18 | 224 | 12/3/2024 |
| 1.10.17 | 186 | 12/3/2024 |
| 1.10.16 | 170 | 10/22/2024 |
| 1.10.15 | 182 | 10/22/2024 |
| 1.10.14 | 161 | 10/22/2024 |
| 1.10.13 | 156 | 10/22/2024 |
| 1.10.12 | 193 | 10/13/2024 |
| 1.10.11 | 194 | 10/13/2024 |
| 1.10.10 | 185 | 10/13/2024 |
| 1.10.9 | 764 | 8/28/2024 |
| 1.10.8 | 283 | 8/25/2024 |
| 1.10.7 | 229 | 8/24/2024 |
| 1.10.6 | 218 | 8/20/2024 |
| 1.10.5 | 223 | 8/20/2024 |
| 1.10.4 | 215 | 8/13/2024 |
| 1.10.3 | 208 | 8/13/2024 |
| 1.10.2 | 199 | 8/13/2024 |
| 1.10.1 | 192 | 8/13/2024 |
| 1.10.0 | 236 | 8/12/2024 |
| 1.9.3 | 310 | 8/7/2024 |
| 1.9.2 | 187 | 8/7/2024 |
| 1.9.1 | 200 | 8/5/2024 |
| 1.9.0 | 171 | 8/5/2024 |
| 1.8.8 | 144 | 8/3/2024 |
| 1.8.7 | 173 | 8/1/2024 |
| 1.8.6 | 276 | 6/26/2024 |
| 1.8.5 | 207 | 6/20/2024 |
| 1.8.4 | 206 | 6/19/2024 |
| 1.8.3 | 187 | 6/19/2024 |
| 1.8.2 | 201 | 6/11/2024 |
| 1.8.1 | 188 | 6/11/2024 |
| 1.8.0 | 199 | 6/10/2024 |
| 1.7.6 | 179 | 6/8/2024 |
| 1.7.5 | 230 | 6/8/2024 |
| 1.7.4 | 168 | 6/8/2024 |
| 1.7.3 | 221 | 6/7/2024 |
| 1.7.2 | 177 | 6/7/2024 |
| 1.7.1 | 216 | 6/7/2024 |
| 1.7.0 | 169 | 6/7/2024 |
| 1.6.2 | 206 | 6/6/2024 |
| 1.6.1 | 205 | 6/6/2024 |
| 1.6.0 | 193 | 6/6/2024 |
| 1.5.5 | 208 | 6/6/2024 |
| 1.5.4 | 177 | 6/6/2024 |
| 1.5.3 | 187 | 6/6/2024 |
| 1.5.2 | 223 | 6/5/2024 |
| 1.5.1 | 204 | 5/3/2024 |
| 1.5.0 | 169 | 5/2/2024 |
| 1.4.1 | 225 | 2/19/2024 |
| 1.4.0 | 319 | 2/15/2024 |
| 1.3.11 | 541 | 2/1/2024 |
| 1.3.10 | 371 | 1/31/2024 |
| 1.3.9 | 220 | 1/22/2024 |
| 1.3.8 | 192 | 1/22/2024 |
| 1.3.7 | 208 | 1/4/2024 |
| 1.3.6 | 223 | 12/29/2023 |
| 1.3.5 | 205 | 12/27/2023 |
| 1.3.4 | 222 | 12/27/2023 |
| 1.3.3 | 209 | 12/22/2023 |
| 1.3.2 | 203 | 12/21/2023 |
| 1.3.1 | 179 | 12/21/2023 |
| 1.3.0 | 203 | 12/21/2023 |
| 1.2.4 | 212 | 12/19/2023 |
| 1.2.3 | 222 | 12/18/2023 |
| 1.2.2 | 232 | 11/15/2023 |
| 1.2.1 | 183 | 11/10/2023 |
| 1.2.0 | 199 | 11/7/2023 |
| 1.1.0 | 191 | 11/7/2023 |
| 1.0.1 | 181 | 11/7/2023 |
| 1.0.0 | 175 | 11/6/2023 |
Added server Disconnect() and GetClient() to get underlying TcpClient.