一直只能只能用localhost测,又发现一个建接口,从而建websocket的方法!记录一下
参考:【ASP.NET Core 3.1 WebApi 系列【五】使用WebSocket - 你去了龙城我留了姑苏 - 博客园】
一、创建一个名为WebSocketsController的新控制器类,添加如下代码。
[HttpGet]
public async Task GetNotReadCount()
{
if (HttpContext.WebSockets.IsWebSocketRequest)
{
using var webSocket = await HttpContext.WebSockets.AcceptWebSocketAsync();
await Echo(webSocket);
}
else
{
HttpContext.Response.StatusCode = 400;
}
}
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($"服务端返回: {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);
}
二、在中间件管道中启用websoket中间件,在Configure
方法中启用验证
app.UseWebSockets();
代码执行步骤:
1、检查当前请求是否通过WebSockets,否则抛出400。
2、等待,直到客户端发起请求。
3、进入一个循环,直到客户端关闭连接。
4、在循环中,我们将发送“服务端返回: <client’s message>”信息,并把它发回给客户端。
5、等待,直到客户端发送另一个请求(测试用,实际中去掉等待)。
三、postman测试websoket
注意:Postman v8.5 及更高版本的公共测试版中可用。
1、新建websoket请求。
2、输入地址,点击链接。
3.代表连接成功。
4、客户端发送信息。
5、控制台显示客户端与服务端发送的消息。
6、正常显示信息则代表websoket创建成功,具体业务逻辑就可以在里面写了,是不是很简单。
--------然后发现这种只能反馈消息,不能通信,所以换了这个
【C#-WebSocket协议通讯_Net5 - ꧁执笔小白꧂ - 博客园】
(另一种 )一、WebAPI版服务器
- 可以使用“基于Http/2 的WebSockets 支持”
- 标头压缩。
- 多路复用,可减少向服务器发出多个请求时所需的时间和资源。
- HTTP/2 WebSockets 使用 CONNECT 请求而不是 GET,因此可能需要更新你自己的路由和控制器。见: