试图封装一个部分视图以显示我可以推回给客户的反馈。
本文展示了一种使用 HTML5 服务器发送事件 (SSE) 推回数据的方法。
我注意到,如果我打开几个浏览器选项卡然后关闭一个,我会遇到异常,因为逻辑没有从 ConcurrentQueue 中删除相应的流。我修改了代码如下
private static void TimerCallback(object state)
{
StreamWriter data;
Random randNum = new Random();
// foreach (var data in _streammessage)
for (int x = 0; x < _streammessage.Count; x++)
{
_streammessage.TryDequeue(out data);
data.WriteLine("data:" + randNum.Next(30, 100) + "\n");
try
{
data.Flush();
_streammessage.Enqueue(data);
}
catch (Exception ex)
{
// dont re-add the stream as an error ocurred presumable the client has lost connection
}
}
//To set timer with random interval
_timer.Value.Change(TimeSpan.FromMilliseconds(randNum.Next(1, 3) * 500), TimeSpan.FromMilliseconds(-1));
}
我还必须修改 OnStreamAvailable 成员,因为框架语法已更改为第二个参数是 HttpContent 而不是 HttpContentHeaders
public static void OnStreamAvailable(Stream stream, HttpContent headers, TransportContext context)
现在的问题是,如果我添加或删除客户端,我仍然会出现不一致的行为,即尝试初始化新客户端时它会超时。有没有人有任何想法或更多使用 SSE 与 WinAPI 和正确的“方法框架”来处理断开连接的客户端的例子
干杯蒂姆