Asp.Net Core中WebSocket绑定的方法详解

2025-05-29 0 99

说明

Websocket是html5后的产物,对于asp.net core中也得到了支持,Asp.Net Core中WebScoket的操作使用基本上和Asp.net中相同,不同的是,绑定监听。

Asp.Net Core2.0默认已经支持WebSocket,不需要另外安装Nuget包。

通过对HttpContext中的WebSockets.AcceptWebSocketAsync方法,接受WebSocket请求;并返回WebScoket对象。

下面话不多说了,来一起看看详细的介绍吧。

一、示例1,

1.后台启动文件Startup的configure中绑定WebSocket的路由监听

?

1

2

3

4

5

6

7

8

9

10

11
public void Configure(IApplicationBuilder app, IHostingEnvironment env, IServiceProvider svp)

{

......

//绑定WebSocket

app.Map("/wsone/Connect", (con) =>

{

con.UseWebSockets();

WSHanleTwo _two = new WSHanleTwo();

con.Use(_two.Connect);

});

}

2.定义请求处理类

?

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42
using System.Net.WebSockets;

using System.Threading;

using System.Threading.Tasks;

namespace Core_Razor_2

{

public class WSHanleTwo

{

private WebSocket socket = null;

//创建链接

public async Task Connect(HttpContext context, Func<Task> n)

{

try

{

//执行接收

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

this.socket = socket;

//执行监听

await EchoLoop();

}

catch (Exception ex)

{

throw ex;

}

}

/// <summary>

/// 响应处理

/// </summary>

/// <returns></returns>

async Task EchoLoop()

{

var buffer = new byte[1024];

var seg = new ArraySegment<byte>(buffer);

while (this.socket.State == WebSocketState.Open)

{

var incoming = await this.socket.ReceiveAsync(seg, CancellationToken.None);

byte[] backInfo = System.Text.UTF8Encoding.Default.GetBytes("服务端相应内容");

var outgoing = new ArraySegment<byte>(backInfo, 0, incoming.Count);

await this.socket.SendAsync(outgoing, WebSocketMessageType.Text, true, CancellationToken.None);

}

}

}

}

3.前台请求代码

?

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26
var socket;

//var uri = "ws://" + window.location.host + "/ws";

var uri = "ws://" + window.location.host + "@Url.Action("Connect")";

var output;

var text = "test echo";

function write(s) {

var p = document.createElement("p");

p.innerHTML = s;

output.appendChild(p);

}

function doConnect() {

socket = new WebSocket(uri);

socket.onopen = function (e) { write("opened " + uri); doSend(); };

socket.onclose = function (e) { write("closed"); };

socket.onmessage = function (e) { write("Received: " + e.data); socket.close(); };

socket.onerror = function (e) { write("Error: " + e.data); };

}

function doSend() {

write("Sending: " + text);

socket.send(text);

}

function onInit() {

output = document.getElementById("output");

doConnect();

}

window.onload = onInit;

二、为了简单绑定,可以这样封装

?

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37
public class SocketHandler

{

public const int BufferSize = 4096;

WebSocket socket;

SocketHandler(WebSocket socket)

{

this.socket = socket;

}

async Task EchoLoop()

{

var buffer = new byte[BufferSize];

var seg = new ArraySegment<byte>(buffer);

while (this.socket.State == WebSocketState.Open)

{

var incoming = await this.socket.ReceiveAsync(seg, CancellationToken.None);

var outgoing = new ArraySegment<byte>(buffer, 0, incoming.Count);

await this.socket.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();

var h = new SocketHandler(socket);

await h.EchoLoop();

}

/// <summary>

/// 路由绑定处理

/// </summary>

/// <param name="app"></param>

public static void Map(IApplicationBuilder app)

{

app.UseWebSockets();

app.Use(SocketHandler.Acceptor);

}

}

路由绑定:

?

1

2

3
[csharp] view plain copy

//绑定websocket

app.Map("/ws", SocketHandler.Map);

Asp.Net Core上传控件:Uploader.rar

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,如果有疑问大家可以留言交流,谢谢大家对快网idc的支持。

原文链接:http://blog.csdn.net/u011127019/article/details/77408072

收藏 (0) 打赏

感谢您的支持,我会继续努力的!

打开微信/支付宝扫一扫,即可进行扫码打赏哦,分享从这里开始,精彩与您同在
点赞 (0)

声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。

快网idc优惠网 建站教程 Asp.Net Core中WebSocket绑定的方法详解 https://www.kuaiidc.com/99361.html

相关文章

发表评论
暂无评论