当前位置:网站首页>.net5 WebAPI中搭建WebSocket服务端
.net5 WebAPI中搭建WebSocket服务端
2022-04-22 06:29:00 【平山CP3】
背景:需要开发一个WebSocket服务端,用来向h5客户端推送消息;以前的做法是直接做一个windows服务,专门开一个端口来进行WebSocket连接,现在可以在.net5 WebAPI中直接支持WebSocket,且不用单开端口
使用步骤:
1.在Startup.cs的Configure中启用WebSocket中间件

app.UseWebSockets();
2.在控制器中添加Action,来接收WebSocket客户端的连接和处理接收、发送消息,关闭连接;
[HttpGet("/ws")]
public async Task Get()
{
if (HttpContext.WebSockets.IsWebSocketRequest)
{
//接受websocket客户端连接
using var webSocket = await HttpContext.WebSockets.AcceptWebSocketAsync();
await Echo(webSocket);
}
else
{
//不是websocket客户端请求
HttpContext.Response.StatusCode = 400;//
}
}
/// <summary>
/// 对客户端的处理,接受消息,发送消息,关闭连接
/// </summary>
/// <param name="webSocket"></param>
/// <returns></returns>
private async Task Echo(WebSocket webSocket)
{
var buffer = new byte[1024 * 4];
var result = await webSocket.ReceiveAsync(new ArraySegment<byte>(buffer), CancellationToken.None);
while (!result.CloseStatus.HasValue)
{
var serverMsg = Encoding.UTF8.GetBytes($"Server: Hello. You said: {Encoding.UTF8.GetString(buffer)}");
//向客户端发送消息
await webSocket.SendAsync(new ArraySegment<byte>(serverMsg, 0, serverMsg.Length), result.MessageType, result.EndOfMessage, CancellationToken.None);
//继续接受客户端消息
result = await webSocket.ReceiveAsync(new ArraySegment<byte>(buffer), CancellationToken.None);
}
//关闭释放与客户端连接
await webSocket.CloseAsync(result.CloseStatus.Value, result.CloseStatusDescription, CancellationToken.None);
}
3.具体可以按照自己的业务来做,比如存储一个客户端字典来维护,指定客户端进行发送消息。
4.H5上操作就是这样:
let ws = new WebSocket('ws://api.zhandian.com/ws');//连接的就是api网站的地址
ws.onmessage = function (e) {
//监听消息
console.log(e);
console.log(e.data);
};
当然我现在websocket客户端不多,还不知道客户端多的话,这样会不会影响api接口,等待验证
版权声明
本文为[平山CP3]所创,转载请带上原文链接,感谢
https://blog.csdn.net/weixin_33277597/article/details/119924908
边栏推荐
- [TCP / IP link layer 2]
- Read wwh-obd (iso27145 protocol) data stream
- 世平信息参与衡阳市“船山论坛”企业路演,畅谈数据安全,助力协同创新
- QT common tool class function encapsulation summary
- Raspberry Pie: use mono and C to call MSSQL database
- 攻防世界misc-noviciate(杂项)做题笔记
- Bert模型系列一:输入到底是什么东西呢?
- 关于transformer机制的理解
- Grail layout and double wing layout
- 行业应用 |从实践中读懂银行的敏感数据安全防护思路
猜你喜欢

助力2021杭州市网络安全宣传周 | 世平信息精彩活动合集

VMware set fixed IP address -- bridge mode

Reconnaissance des chiffres manuscrits MNIST basée sur le modèle lenet - 5 du réseau neuronal convolutif

继续树莓派4B+OLED:开机自动显示IP地址

Solve the problem that the message notification is blocked by the El dialog ($message, $alert, $notify, $confirm)

攻防世界misc-noviciate(杂项)做题笔记

读取ISO15031协议数据流

Ultra vires and business logic vulnerabilities

About XSS Cross Station

世平信息成功通过中国信通院“数据安全类产品能力验证”评测
随机推荐
文件安全笔记
Raspberry pie 4B: USB boot using raspi config
On June 1st, write a poem
Autoware Demo测试
A simple image processor running across C raspberry pie
flask 数据Model迁移报错
C-10 age issues
postgresql 里面查询存储过程
2021-10-08 selenium headless mode open browser
[TCP / IP overview]
树莓派4B:使用raspi-config实现USB BOOT
Resolve SSL SSLCertVerificationError: [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed
redis监听key过期事件
树莓派配置清单(入门参考)
Practical application of callable combined with countdownlatch
读取ISO15031协议数据流
世平信息上榜《CCSIP 2021中国网络安全产业全景图》
Read iso15031 protocol data stream
树莓派:使用mono和C#调用MSSQL数据库
世平信息上榜《2021年中国网络安全市场全景图》