如何解决服务器发送的事件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 举报,一经查实,本站将立刻删除。