ASP.NETMVC5ServerSentEvents(SSE)的问题,在与服务器建立http连接之后,其他http请求被阻塞。
创始人
2024-09-19 03:01:03
0

在ASP.NET MVC 5中,可以使用Web API的方式来实现SSE。当客户端与服务器进行长连接时,在客户端进行多个http请求时,会出现某些http请求被阻塞的情况。这是由于在进行长连接时,只有一个线程被启用,而长连接并不会释放线程。因此,当客户端进行多个http请求时,只有第一个http请求能够正常响应,而其他的http请求则被阻塞。

解决这个问题的方法是,在建立长连接时,使用异步控制,使用Task.Run()方法将长连接的处理程序放在一个新线程中运行,避免阻塞主线程。

以下是示例代码:

public class SSEController : ApiController
{
    // GET api/ssetest
    public HttpResponseMessage Get()
    {
        HttpResponseMessage response = Request.CreateResponse();

        response.Content = new PushStreamContent(async (stream, content, context) =>
        {
            // Start SSE
            while (true)
            {
                // Do long running task here
                await Task.Delay(1000);

                // Notify client
                var sseEvent = new SseEvent(DateTime.Now.ToString(), "hello, world!");
                var sseData = JsonConvert.SerializeObject(sseEvent);
                var sseBytes = Encoding.UTF8.GetBytes($"event: sseEvent\ndata: {sseData}\n\n");
                await stream.WriteAsync(sseBytes, 0, sseBytes.Length);
                await stream.FlushAsync();
            }
        });

        response.Headers.Add("Content-Type", "text/event-stream");
        return response;
    }
}

在上述代码中,我们首先创建了一个返回HttpResponseMessage对象的Web API接口方法。该方法返回一个长连接的响应流,同时使用异步控制,将长连接处理程序放在一个新线程中运行。

在长连接处理程序中,我们实现了每隔1秒向客户端发送一条SSE消息的功能。在向客户端发送SSE消息时,我们使用了UTF8编码,并将消息格式化为SSE格式。最后,我们通过FlushAsync()方法将消息发送给客户端,并释放资源,使得其他http请求能正常响应。

通过使用异步控制,我们避免了长连接阻塞主线程

相关内容

热门资讯

透视科普!wepoker有人用... 透视科普!wepoker有人用过吗(透视)拱趴大菠萝挂怎么安装,教程方式(有挂方针)-哔哩哔哩该软件...
pokemomo辅助软件!we... pokemomo辅助软件!wepoker有透视功能吗(透视)神器-真是揭露是真的挂1)wepoker...
透视开挂!哈糖大菠萝助手(透视... 透视开挂!哈糖大菠萝助手(透视)德普之星透视辅助软件下载,教程攻略(有挂教程)-哔哩哔哩1、很好的工...
wejoker透视方法!菠萝辅... wejoker透视方法!菠萝辅助器免费版的特点(透视)工具-一直普及有挂1、菠萝辅助器免费版的特点有...
透视推荐!aapoker怎么开... 透视推荐!aapoker怎么开辅助器(透视)wpk德州局透视,教程阶段(今日头条)-哔哩哔哩1、aa...
德州圈脚本!hhpoker可以... 德州圈脚本!hhpoker可以控制吗(透视)教程-一贯解迷是真的挂1、在hhpoker可以控制吗插件...
透视有挂!wepoker私局辅... 透视有挂!wepoker私局辅助(透视)wepoker有脚本吗,教程指南(有挂讲解)-哔哩哔哩1、下...
wepoker脚本!德州透视h... wepoker脚本!德州透视hhpoker(透视)器-切实解密真的有挂wepoker脚本!德州透视h...
pokemmo辅助工具!德普之... pokemmo辅助工具!德普之星透视辅助软件激活码(透视)挂-原来透视有挂一、德普之星透视辅助软件激...
透视有挂!wepoker买脚本... 透视有挂!wepoker买脚本靠谱吗(透视)约局吧开挂神器是真的吗,教程要领(有挂方略)-哔哩哔哩1...