.net 服务器推送信息,.net websocket服务端开发,实现消息推送功能

WebSocket协议是一种双向通信协议,它建立在TCP之上,同http一样通过TCP来传输数据,但是它和http最大的不同有两点:

WebSocket是一种双向通信协议,在建立连接后,WebSocket服务器和Browser/UA都能主动的向对方发送或接收数据,就像Socket一样,不同的是WebSocket是一种建立在Web基础上的一种简单模拟Socket的协议;

WebSocket需要通过握手连接,类似于TCP它也需要客户端和服务器端进行握手连接,连接成功后才能相互通信。

当Web应用程序调用new WebSocket(url)接口时,Browser就开始了与地址为url的WebServer建立握手连接的过程。

下面为大家讲解一下.net websocket服务端的实现机制。

服务端:

1、新建一个ASP.NET Core Web应用程序。

2、NuGet安装Microsoft.AspNetCore.WebSockets包。

3、在Startup类的Configue函数里输入以下代码:

app.UseWebSockets();

app.Use(async (context, next) =>

{

if (context.Request.Path == "/ws")

{

if (context.WebSockets.IsWebSocketRequest)

{

WebSocket webSocket = await context.WebSockets.AcceptWebSocketAsync();

await Echo(context, webSocket);

}

else

{

context.Response.StatusCode = 400;

}

}

else

{

await next();

}

});

其中,Echo函数如下:

private async Task Echo(HttpContext context, WebSocket webSocket)

{

var buffer = new byte[1024 * 4];

WebSocketReceiveResult result = await webSocket.ReceiveAsync(new ArraySegment(buffer), CancellationToken.None);

while (!result.CloseStatus.HasValue)

{

await webSocket.SendAsync(new ArraySegment(buffer, 0, result.Count), result.MessageType, result.EndOfMessage, CancellationToken.None);

result = await webSocket.ReceiveAsync(new ArraySegment(buffer), CancellationToken.None);

}

await webSocket.CloseAsync(result.CloseStatus.Value, result.CloseStatusDescription, CancellationToken.None);

}

上述代码实现的是一个回声功能,也就是客户端发什么消息过来,都原样返回。经过上面三步,.net websocket服务端的开发工作就完成了。

客户端:

客户端(js)的代码也很简单,如下:

var ws = new WebSocket("ws://localhost:53014/ws");

ws.onopen = function (evt) {

console.log("Connection open ...");

};

ws.onmessage = function (evt) {

console.log("Received Message: " + evt.data);

};

setInterval(() => {

ws.send("hello");

}, 3000);

客户端3秒向服务器发送一条消息,然后会马上收到回复。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值