Minimal Reactive Socket Implementation
- asynchronous connect
- observable accept and receive
- supports .NET Standard 2.0
- dependencies: Reactive Extensions 4
- simple and intuitive API
- tested
- fast
interface IRxSocketServer: IDisposable
{
IObservable<IRxSocketClient> AcceptObservable { get; }
}
// Create a socket server on the Endpoint.
IRxSocketServer server = RxSocketServer.Create(IPEndPoint);
// Start accepting connections from clients.
server.AcceptObservable.Subscribe(onNext: acceptClient =>
{
acceptClient.ReceiveObservable.ToStrings().Subscribe(onNext: message =>
{
// Echo received messages back to the client.
acceptClient.Send(message.ToByteArray());
});
});
interface IRxSocketClient: IDisposable
{
bool Connected { get; }
void Send(byte[] buffer, int offset = 0, int length = 0);
IObservable<byte> ReceiveObservable { get; }
}
// Create a socket client by connecting to the server at EndPoint.
IRxSocketClient client = await RxSocketClient.ConnectAsync(IPEndPoint);
client.ReceiveObservable.ToStrings().Subscribe(onNext: message =>
{
// Receive message from the server.
Assert.Equal("Hello!", message);
});
// Send a message to the server.
client.Send("Hello!".ToByteArray());
// Wait for the message to be received by the server and sent back to the client.
await Task.Delay(100);
client.Dispose();
server.Dispose();