asp.net WEBSocket简单例子 推送数据
public class SocketHandler
{
public const int BufferSize = 4096;
public WebSocket socket;
private static WebSocket webSocket;
private static HttpContext context;
private static byte[] faceJson;
SocketHandler(WebSocket socket)
{
this.socket = socket;
}
public static async Task Send(FaceCheckinEventArgs body)
{
MsgTemplate msgTemplate = new MsgTemplate();
msgTemplate.Name = body.DeviceName;
msgTemplate.PicUrl = body.PicUrl;
msgTemplate.UpTime = body.RecordTime.ToLocalTime().ToString();
msgTemplate.CarNo = body.CardID;
var json = JsonConvert.SerializeObject(msgTemplate);
faceJson = Encoding.UTF8.GetBytes(json);
if (webSocket == null)
return;
var outgoing = new ArraySegment<byte>(faceJson, 0, faceJson.Length);
await webSocket.SendAsync(outgoing, WebSocketMessageType.Text, true, CancellationToken.None);
}
static async Task Acceptor(HttpContext hc, Func<Task> n)
{
if (!hc.WebSockets.IsWebSocketRequest)
return;
var socket = await hc.WebSockets.AcceptWebSocketAsync();
webSocket = socket;
var h = new SocketHandler(socket);
context = hc;
var buffer = new byte[BufferSize];
var seg = new ArraySegment<byte>(buffer);
while(webSocket.State== WebSocketState.Open)
{
Thread.Sleep(1000);
}
}
public static void Map(IApplicationBuilder app)
{
app.UseWebSockets();
app.Use(SocketHandler.Acceptor);
}
}