網站首頁 編程語言 正文
今天小試了一下在Asp.net core中使用websocket,這里記錄一下:
在 Startup 類的 Configure 方法中添加 WebSocket 中間件。
app.UseWebSockets();
它也可以傳入一些參數
app.UseWebSockets(new WebSocketOptions()
{
KeepAliveInterval = TimeSpan.FromSeconds(120),
ReceiveBufferSize = 4 * 1024
});
添加WebSocket中間件的處理函數:
async Task WebSocketMiddleware(HttpContext context, Func<Task> next)
{
//這里監聽的是 /ws 作為地址
if (context.Request.Path != "/ws")
{
await next();
return;
}
if (!context.WebSockets.IsWebSocketRequest)
{
context.Response.StatusCode = 400;
return;
}
WebSocket webSocket = await context.WebSockets.AcceptWebSocketAsync();
await Echo(context, webSocket);
}
在Startup 類的 Configure函數中應用該中間件。?
app.Use(WebSocketMiddleware);
最后再來完成我們的WebScoket功能函數Echo
async Task Echo(HttpContext context, WebSocket webSocket)
{
var buffer = new byte[1024 * 4];
WebSocketReceiveResult result = await webSocket.ReceiveAsync(new ArraySegment<byte>(buffer), CancellationToken.None);
while (!result.CloseStatus.HasValue)
{
await webSocket.SendAsync(new ArraySegment<byte>(buffer, 0, result.Count),
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);
}
到此一個簡單的websocket應用就完成了,我們可以隨便找一個測試webscoket的程序或在線網頁測試一下了。
最后需要說明一下的時,本身asp.net core的websocket是可以在win7下跑的(來自于Kestrel內核的支持),但win7下的iis是不支持websocket反向代理的,因此如果在win7下開發或測試的時候,不要用iis來反向代理asp.net core程序。
原文鏈接:https://www.cnblogs.com/TianFang/p/8436790.html
相關推薦
- 2023-01-15 Android開發可添加頭尾的RecycleView的實現_Android
- 2022-03-29 Android頂部標題欄的布局設計_Android
- 2022-10-14 Android適配器和適配器視圖
- 2022-12-12 C語言中單鏈表(不帶頭結點)基本操作的實現詳解_C 語言
- 2022-12-23 C++類成員函數中的名字查找問題_C 語言
- 2022-09-17 利用Python提取PDF文本的簡單方法實例_python
- 2022-12-26 C++逆向分析移除鏈表元素實現方法詳解_C 語言
- 2022-03-29 python中format函數與round函數的區別_python
- 最近更新
-
- window11 系統安裝 yarn
- 超詳細win安裝深度學習環境2025年最新版(
- Linux 中運行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎操作-- 運算符,流程控制 Flo
- 1. Int 和Integer 的區別,Jav
- spring @retryable不生效的一種
- Spring Security之認證信息的處理
- Spring Security之認證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權
- redisson分布式鎖中waittime的設
- maven:解決release錯誤:Artif
- restTemplate使用總結
- Spring Security之安全異常處理
- MybatisPlus優雅實現加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務發現-Nac
- Spring Security之基于HttpR
- Redis 底層數據結構-簡單動態字符串(SD
- arthas操作spring被代理目標對象命令
- Spring中的單例模式應用詳解
- 聊聊消息隊列,發送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠程分支