We are building an orchestra in microservice architecture. We chose websockets as the RPC protocol to set up a stream pipeline that can be scaled using a server that supports websocket, such as Kestrel. This orchestra will work mainly on Linux servers (dockers).
For administration and monitoring purposes, we plan to use http://dotnetify.net/ to create a reactive web administrator portal (which can show the number of settlements and clients in semi-real mode, with push notify).
DotNetify uses SignalR, and we cannot use the SignalR layer on top of Websockets. We require minimal overhead on the top of the TCP protocol. Websocket itself is a beautiful standard and light enough, but SignalR adds support to those things that we really do not need (LAN, microservices). We are looking at WAMP, but in the proof of concept we will use a simple and simple custom handshake inside the websocket bus. Another reason is that our main backend is IBM AIX, and the RDBMS processing engine is a commercial binary conversion, so it is very difficult (almost impossible) to implement the SignalR protocol there. But we do not need this, because we do not want.
A possible solution to having [A] "clean" and [B] "server signalR" servers in one process is launching several Kestrels. I tried this (on windows and ubuntu) and it seems to work without problems. I just used the array Task.Run() and then Task.WaitAll(backgroundTasks) . One kestrel with SignalR, one without which it works on separate ports. Note. I could not find a suitable way to use multiple ports in one Kestrel and exclude SignalR from one port
My question is: although this seems to be working fine, can anyone confirm that it is safe? Especially with signal processing of libuv and os?
source share