首先,我知道SignalR是最好的websocket框架,我应该使用它而不是用低级实现来获得乐趣。
但是,是否有人知道如何在控制器中正确使用websocket? 我完全是绿色的。
任何好的教程都会非常有用:)
我试过这样做。
中间件
app.UseWebSockets();
app.Use(async (context, next) =>
{
var http = (HttpContext)context;
if (http.WebSockets.IsWebSocketRequest)
{
WebSocket webSocket = await http.WebSockets.AcceptWebSocketAsync();
}
else
{
await next();
}
});
//thanks to next(); app.UseMvc();
控制器
[Route("ws")]
public class MonitorController : Controller
{
HttpContext context;
WebSocket socket;
public MonitorController(IHttpContextAccessor accessor)
{
this.context = accessor.HttpContext;
if (!this.context.WebSockets.IsWebSocketRequest)
throw new InvalidOperationException("incoming request is not a websocket request");
}
[HttpGet]
public IActionResult Get()
{
return new MonitorWaiter(Wait);
}
.... some code MonitorWaiter.....
本地主机:5000 / WS
GET HTTP/1.1:
Host: localhost:5000/ws
Upgrade: websocket
Connection: Upgrade
Sec-WebSocket-Key: dGhlIHNhbXBsZSBub25jZQ==
Sec-WebSocket-Version: 13
在调试过程中,它进入中间件但跳过控制器。
非常感谢您的一些建议。
我看到可以通过将服务器添加到处理程序 - >来完成。 app.Use();并且在控制器中使用了一些客户端实现,但问题仍然是什么时候我想创建几个服务器?
相关文章:Using WebSockets with ASP.NET Web API
我不知道它是否属实,但我认为应该通常使用websocket处理程序,而不是尝试使用api控制器。