服务器发送的事件CancellationToken无法与Kubernetes上部署的.NET Core MVC 3.1一起触发

问题描述

我无法检测到用户何时关闭浏览器。一切在本地环境下都可以正常工作,我可以向客户端发送消息并检测用户断开连接,但是当我将proyect部署到onpromise k8s集群时,除了用户断开连接之外,其他一切都正常。

    [HttpGet("listen")]
    public async Task Get(CancellationToken cancellationToken)
    {
        try
        {
            // handshake 
            var response = Response;
            response.Headers.Add("Content-Type","text/event-stream");
            response.Headers.Add("Connection","close");
            await response.WriteAsync($"data: __HANDSHAKE\r\r");

            response.Body.Flush();

            for(int i =0; i< 100 ; i++) {
                this.logger.Info($"cancellationToken.IsCancellationRequested {cancellationToken.IsCancellationRequested.ToString()}");
                await response.WriteAsync($"data: __HANDSHAKE\r\r");
                response.Body.Flush();
                Thread.Sleep(3000);
            }
            // Some other code 


        }
        catch (System.OperationCanceledException)
        {
            this.logger.Info("Conexion cerrada.");
        }
        catch (System.Exception ex)
        {
            this.logger.Info($"{ex.Message} - {ex.StackTrace}");
            throw;
        }
        finally{
            this.logger.Info($"FINALLY");
        }
    }

我设置了一些Nginx入口规则

Nginx.ingress.kubernetes.io/eventsource: "true"
Nginx.ingress.kubernetes.io/proxy-read-timeout: "3600"
Nginx.ingress.kubernetes.io/enable-cors: "true"

我的客户有这样的东西:

const sseUrl = URL;

const sse = new EventSource(sseUrl);

sse.onmessage = function (event) {
if (event.data == "__HANDSHAKE") {
  loggger.log("Handshaking ...");
  return;
}

const message = JSON.parse(event.data);

if (options.onMessages) {
  options.onMessages([message]);
}
};

任何评论将不胜感激。谢谢!

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)