现在做的是用websocket建立链接,然后服务器推送消息到客户端(若数据发送变化,则推送)
下面是服务端代码,本地已测试
public void ProcessRequest(HttpContext context)
{
if (context.IsWebSocketRequest)
{
context.AcceptWebSocketRequest(WebSocketRequestHandler);
}
}
public async Task WebSocketRequestHandler(AspNetWebSocketContext webSocketContext)
{
//获取当前的WebSocket对象
System.Net.WebSockets.WebSocket webSocket = webSocketContext.WebSocket;
Bll.All_Device_Connect bld = new Bll.All_Device_Connect();
int first = 0;
string ffs = "", ses = "";
if (webSocket.State == WebSocketState.Open)
{
while(true)
{
DataTable dt = bld.GetList();
if (first == 0)
{
ffs = DBHelper.JsonHelper.DatatableToJosn(dt);
ArraySegment<byte> buffer = new ArraySegment<byte>(new byte[1024]);
buffer = new ArraySegment<byte>(System.Text.Encoding.UTF8.GetBytes(ffs));
//发送数据(到客户端)
await webSocket.SendAsync(buffer, WebSocketMessageType.Text, true, CancellationToken.None);
first++;
}
else
{
ses = DBHelper.JsonHelper.DatatableToJosn(dt);
if (ffs != ses)//将此次结果与上一次结果进行比较
{
ffs = ses;//表字符串;若不同,则将该结果赋给ffs
ArraySegment<byte> buffer = new ArraySegment<byte>(new byte[1024]);
buffer = new ArraySegment<byte>(System.Text.Encoding.UTF8.GetBytes(ffs));
//发送数据(到客户端)
await webSocket.SendAsync(buffer, WebSocketMessageType.Text, true, CancellationToken.None);
}
}
if(webSocket.State!=WebSocketState.Open)
{
break;
}
}
}
}
但是将其发布至IIS上,客户端页面刷新多次之后,iis worker process CPU占用率直线上升,导致websocket发不出任何消息,但是将iis worker process手动释放后又可以发出消息,不知道是不是while死循环的原因?(但是我需要while循环给它一直做判断)