Asp.Netcoreのwebsocket
Websocketはhtml 5の後の産物であり、aspに対して.Netcoreでもサポートされており、まずNuGetにMicrosoftを追加する.AspNetCore.WebSocketsの引用(現在は1.0.1バージョン、2017年3月7日発売).
まずConfigureにミドルウェアを追加
次に、Websocketを自分で処理するミドルウェアを定義します.コードは次のとおりです.
ミドルウェア拡張の追加
これでStartupでcsのConfigureには、以下のコードで作成したミドルウェアが追加されています.
このサービス・エンドの作成が完了しました.次に、クライアントを参照してください.
ここでは基本的な例にすぎず、自分のビジネスに応じて異なる機能を実現することができます.
まずConfigureにミドルウェアを追加
// websocket
app.UseWebSockets();
次に、Websocketを自分で処理するミドルウェアを定義します.コードは次のとおりです.
using Microsoft.AspNetCore.Http;
using System;
using System.Net.WebSockets;
using System.Threading;
using System.Threading.Tasks;
namespace Asp.NetCore_WebPage.Middleware
{
///
/// websocket , ,
///
public class WebSocketNotifyMiddleware
{
///
///
///
private readonly RequestDelegate _next;
///
///
///
///
public WebSocketNotifyMiddleware(RequestDelegate next)
{
_next = next;
}
///
///
///
///
///
public Task Invoke(HttpContext context)
{
// websocket
if (context.WebSockets.IsWebSocketRequest)
{
//
var webSocket = context.WebSockets.AcceptWebSocketAsync().Result;
//
new Thread(Accept).Start(webSocket);
while (webSocket.State == WebSocketState.Open)
{
webSocket.SendAsync(new ArraySegment(System.Text.Encoding.UTF8.GetBytes($"{DateTime.Now}")), System.Net.WebSockets.WebSocketMessageType.Text, true, CancellationToken.None);
Thread.Sleep(1000);
}
}
return this._next(context);
}
///
/// ,
///
///
void Accept(object obj)
{
var webSocket = obj as WebSocket;
while (true)
{
var acceptArr = new byte[1024];
var result = webSocket.ReceiveAsync(new ArraySegment(acceptArr), CancellationToken.None).Result;
var acceptStr = System.Text.Encoding.UTF8.GetString(acceptArr).Trim(char.MinValue);
Console.WriteLine(" :" + acceptStr);
}
}
}
}
ミドルウェア拡張の追加
using Microsoft.AspNetCore.Builder;
using Microsoft.AspNetCore.Http;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Net.WebSockets;
using System.Threading;
using System.Threading.Tasks;
namespace Asp.NetCore_WebPage.Middleware
{
///
/// websocket
///
public static class WebSocketNotifyMiddlewareExtensions
{
///
/// websocket
///
///
///
public static IApplicationBuilder UseWebSocketNotify(
this IApplicationBuilder builder)
{
return builder.UseMiddleware();
}
}
}
これでStartupでcsのConfigureには、以下のコードで作成したミドルウェアが追加されています.
// websocket
app.UseWebSockets();
app.UseWebSocketNotify();
このサービス・エンドの作成が完了しました.次に、クライアントを参照してください.
:
@section scripts{
var socket;
var uri = "ws://localhost:5000/ws";
//
function doConnect(open, accept, close, error) {
console.log("doConnect")
// websocket,
socket = new WebSocket(uri);
socket.onopen = function (e) { open();};
socket.onclose = function (e) { close(); };
socket.onmessage = function (e) {
accept(e.data);
};
socket.onerror = function (e) { error(e.data); };
}
//
function doSend(message) {
console.log("doSend")
socket.send(message);
}
// socket
function doClose() {
console.log("doClose")
socket.close();
}
//
function open() {
console.log("open")
document.getElementById("message").innerText = " ";
}
//
function accept(result) {
console.log("accept")
document.getElementById("output").innerText=result;
}
//
function close() {
console.log("close")
document.getElementById("message").innerText=" ";
}//
function error(result) {
console.log("error")
alert(" :"+result);
}
//
function start() {
console.log("start")
doConnect(open, accept, close, error);
}
function send()
{
console.log("send")
doSend(document.getElementById("sendtxt").value);
}
}
ここでは基本的な例にすぎず、自分のビジネスに応じて異なる機能を実現することができます.