WebSocketServer is lightweight and high performance WebSocket server library. Support route, full duplex communication, multiplexing, pipeline, encryption. WebSocketServer 是一个轻量级、高性能WebSocket服务端库。支持 WebApi 路由、全双工通信、多路复用、管道、加密等。
WebSocketServer is lightweight and high performance WebSocket library.support route, full duplex communication.
Install-Package Cyaim.WebSocketServer
services.ConfigureWebSocketRoute(x =>
{
//Define channels
x.WebSocketChannels = new Dictionary<string, WebSocketRouteOption.WebSocketChannelHandler>()
{
{ "/ws",new MvcChannelHandler(4*1024).ConnectionEntry}
};
x.ApplicationServiceCollection = services;
});var webSocketOptions = new WebSocketOptions()
{
KeepAliveInterval = TimeSpan.FromSeconds(120),
ReceiveBufferSize = 4 * 1024
};
app.UseWebSockets(webSocketOptions);
app.UseWebSocketServer(app.ApplicationServices);[WebSocket] -> "method" parameter ignore case
Example Code:
// mark WebSocket
[WebSocket()]
[HttpGet]
public IEnumerable<WeatherForecast> Get()
{
var rng = new Random();
return Enumerable.Range(1, 2).Select(index => new WeatherForecast
{
Date = DateTime.Now.AddDays(index),
TemperatureC = rng.Next(-20, 55),
Summary = Summaries[rng.Next(Summaries.Length)]
}).ToArray();
}Scheme namespace 👇
Request Cyaim.WebSocketServer.Infrastructure.Handlers.MvcRequestScheme
Response Cyaim.WebSocketServer.Infrastructure.Handlers.MvcResponseScheme
Request target ignore case
Request scheme
{
"target": "WeatherForecast.Get",
"body": {}
}This request will be located at "WeatherForecastController" -> "Get" Method.
Response to this request
{
"Status": 0,
"Msg": null,
"RequestTime": 637395762382112345,
"ComplateTime": 637395762382134526,
"Body": [{
"Date": "2020-10-30T13:50:38.2133285+08:00",
"TemperatureC": 43,
"TemperatureF": 109,
"Summary": "Scorching"
}, {
"Date": "2020-10-31T13:50:38.213337+08:00",
"TemperatureC": 1,
"TemperatureF": 33,
"Summary": "Chilly"
}]
}Forward invoke method return content will write MvcResponseScheme.Body.
Example Code:
[WebSocket]
[HttpGet]
public IEnumerable<WeatherForecast> Get(Test a)
{
var rng = new Random();
return Enumerable.Range(1, 2).Select(index => new WeatherForecast
{
TemperatureC = a.PreTemperatureC + rng.Next(-20, 55),
Summary = a.PreSummary + Summaries[rng.Next(Summaries.Length)]
}).ToArray();
}public class Test
{
public string PreSummary { get; set; }
public int PreTemperatureC { get; set; }
}Request parameter
{
"target": "WeatherForecast.Get",
"body": {
"PreSummary":"Cyaim_",
"PreTemperatureC":233
}
}Request body will write invoke method parameter.
Response to this request
{
"Status": 0,
"Msg": null,
"RequestTime": 0,
"ComplateTime": 637395922139434966,
"Body": [{
"Date": "0001-01-01T00:00:00",
"TemperatureC": 282,
"TemperatureF": 539,
"Summary": "Cyaim_Warm"
}, {
"Date": "0001-01-01T00:00:00",
"TemperatureC": 285,
"TemperatureF": 544,
"Summary": "Cyaim_Sweltering"
}]
}