我想创建:
- VS2017 中的 ASP.NET Core 1.1 Web 应用程序,带有一个 HttpGet 端点
- 端点应传输 0 到 255 之间的随机值
- 值应该每 20 毫秒更改一次。
- 客户端永远不要停止读取流并尽快获取新值。
到目前为止,这是我的代码:
客户端
public async Task SubscribeToUpdates()
{
this.subscribe = false;
try
{
var client = new HttpClient();
var stream = await client.GetStreamAsync(Constants.SubscribeEndpoint);
using (var rdr = new StreamReader(stream))
{
while (!rdr.EndOfStream && !subscribe)
{
var result = rdr.ReadLine();
var json = JObject.Parse(result);
this.HandleUpdateResult(json); // todo
}
}
}
catch (Exception e)
{
// TO do: log exception
}
}
服务器,不工作
[HttpGet]
public Task PushStreamContent()
{
HttpContext.Response.ContentType = "text/event-stream";
var sourceStream = randomStream();
return sourceStream.CopyToAsync(HttpContext.Response.Body);
}
public static Stream randomStream()
{
Random rnd = new Random();
MemoryStream stream = new MemoryStream();
StreamWriter writer = new StreamWriter(stream);
writer.Write(JsonConvert.SerializeObject(rnd.News(0,255));
writer.Flush();
stream.Position = 0;
return stream;
}
问题:
- 如何重写 Server 函数来创建无限流?
- 我们也欢迎其他解决方案,只要牢记它们符合 .net 核心并使客户能够尽快获得最新信息。
工作完整的 .Net 版本
我已经为 .net Standard 编写了代码,但不是为 .net core 编写的。原因是 .net core 中不存在 PushStreamContent :/.
[HttpGet]
public HttpResponseMessage PushStreamContent()
{
var response = Request.CreateResponse(HttpStatusCode.Accepted);
response.Content =
new PushStreamContent((stream, content, context) =>
{
var plotter = new Plotter();
while (true)
{
using (var writer = new StreamWriter(stream))
{
Random rnd = new Random()
writer.WriteLine(rnd.Next(0,255));
stream.Flush();
Thread.Sleep(20);
}
}
});
return response;
}
最佳答案
感谢“Mike McCaughan”和“Joel Harkes”之前的回答,我重新考虑了通信过程并从 REST 切换到 Websockets。
您可以找到一个很好的示例,了解如何在 .net Core(和 Xamarin.Forms)中使用 WebSockets here .您将不得不使用 Nuget 包“Websockets.PCL”。
关于c# - 如何在 asp.net core 中创建无限流端点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43280185/