wwwroot/index.html
, sayfa yüklenirken http://www.somehost.ca/sse
url için bir EventSource
oluşturun. Ardından olaylarını konsola yazın.
<body>
<script type="text/javascript">
var source = new EventSource('sse');
source.onmessage = function (event) {
console.log('onmessage: ' + event.data);
};
source.onopen = function(event) {
console.log('onopen');
};
source.onerror = function(event) {
console.log('onerror');
}
</script>
</body>
Ara Katman
katman sse
yolunu işler. Content-Type
başlığını, sunucu soketi olayının gerektirdiği text/event-stream
olarak ayarlar. Bağlantıyı kapatmadan yanıt akışına yazar. Yazma arasında beş saniye geciktirerek iş yapmayı taklit eder. katman olduğu gibi
app.Use(async (context, next) =>
{
if (context.Request.Path.ToString().Equals("/sse"))
{
var response = context.Response;
response.Headers.Add("Content-Type", "text/event-stream");
for(var i = 0; true; ++i)
{
// WriteAsync requires `using Microsoft.AspNetCore.Http`
await response
.WriteAsync($"data: Middleware {i} at {DateTime.Now}\r\r");
response.Body.Flush();
await Task.Delay(5 * 1000);
}
}
await next.Invoke();
});
Kontrol
kontrol aynı şey yapar. Firefox
yılında
[Route("/api/sse")]
public class ServerSentEventController
{
private readonly IHttpContextAccessor _httpContextAccessor;
public ServerSentEventController(
IHttpContextAccessor httpContextAccessor)
{
_httpContextAccessor = httpContextAccessor;
}
[HttpGet]
public async Task Get()
{
var response = _httpContextAccessor.HttpContext.Response;
response.Headers.Add("Content-Type", "text/event-stream");
for(var i = 0; true; ++i)
{
await response
.WriteAsync($"data: Controller {i} at {DateTime.Now}\r\r");
response.Body.Flush();
await Task.Delay(5 * 1000);
}
}
}
Konsol Çıktı Bu Firefox konsol penceresinde sonucudur. Her beş saniyede yeni mesajlar gelir.
onopen
onmessage: Message 0 at 4/15/2016 3:39:04 PM
onmessage: Message 1 at 4/15/2016 3:39:09 PM
onmessage: Message 2 at 4/15/2016 3:39:14 PM
onmessage: Message 3 at 4/15/2016 3:39:19 PM
onmessage: Message 4 at 4/15/2016 3:39:24 PM
Referanslar:
Eğer SignalR söz ediyorsunuz? – Tseng
Hayır, henüz Core için bir Sinyal Yok. – Zygimantas
Nitekim, SignalR 3 hem resmi nuget feed'inde hem de myget ahırlarında https://www.myget.org/gallery/aspnetmaster ve geceliklerde rc1 finalinde mevcuttur. Bu yüzden sordum. Ancak, ASP.NET Core 1.0 yol haritasında belirtildiği gibi piyasaya sürüldüğünde yayınlanmaya hazır olmayacaktır. Https://github.com/aspnet/Home/wiki/Roadmap – Tseng