diff --git a/handbook/docs/httpservice.mdx b/handbook/docs/httpservice.mdx index e4ff36223..87ceb4abb 100644 --- a/handbook/docs/httpservice.mdx +++ b/handbook/docs/httpservice.mdx @@ -247,7 +247,7 @@ foreach (var file in multifileCollection.Files) } await e.Context.Response - .SetStatus() + .SetStatusWithSuccess() .FromText("Ok") .AnswerAsync(); ``` @@ -355,7 +355,7 @@ public class MyHttpPlug2 : PluginBase, IHttpPlugin var autoGzip = true;//自动判断是否应用gzip压缩。 await response - .SetStatus()//必须要有状态 + .SetStatusWithSuccess()//必须要有状态 .FromFileAsync(fileInfo, e.Context.Request, fileName, maxSpeed, bufferLength, autoGzip); //或者直接使用HttpContext @@ -445,7 +445,7 @@ public class MyHttpPlug3 : PluginBase, IHttpPlugin //回应html await response - .SetStatus()//必须要有状态 + .SetStatusWithSuccess()//必须要有状态 .SetContentTypeByExtension(".html") .SetContent(sb.ToString()) .AnswerAsync(); diff --git a/handbook/docs/websocketclient.mdx b/handbook/docs/websocketclient.mdx index a237931a3..91fa32db9 100644 --- a/handbook/docs/websocketclient.mdx +++ b/handbook/docs/websocketclient.mdx @@ -377,7 +377,7 @@ using (var client = GetClient()) 【方法1】 -```csharp {22-49} showLineNumbers +```csharp {22-46} showLineNumbers //当WebSocket想要使用ReadAsync时,需要设置此值为true client.AllowAsyncRead = true; @@ -401,6 +401,13 @@ while (true) { case WSDataType.Cont: { + //如果是非net6.0即以上,即:NetFramework平台使用。原因是stream不支持span写入 + //var segment = data.AsSegment(); + //stream.Write(segment.Array, segment.Offset, segment.Count); + + //如果是net6.0以上,直接写入span即可 + stream.Write(data.Span); + //收到的是中继包 if (dataFrame.FIN)//判断是否为最终包 { @@ -415,17 +422,6 @@ while (true) this.m_logger.Info($"WebSocket二进制:{stream.Length}长度"); } } - else - { - //否,继续缓存 - - //如果是非net6.0即以上,即:NetFramework平台使用。原因是stream不支持span写入 - //var segment = data.AsSegment(); - //stream.Write(segment.Array, segment.Offset, segment.Count); - - //如果是net6.0以上,直接写入span即可 - stream.Write(data.Span); - } } break; case WSDataType.Text: diff --git a/handbook/docs/websocketheartbeat.mdx b/handbook/docs/websocketheartbeat.mdx index 3d098979c..4c8c09885 100644 --- a/handbook/docs/websocketheartbeat.mdx +++ b/handbook/docs/websocketheartbeat.mdx @@ -64,8 +64,8 @@ await client.ConnectAsync(); 直接发送心跳,可以直接使用扩展方法。 ```csharp showLineNumbers -client.Ping(); -client.Pong(); +await client.PingAsync(); +await client.PongAsync(); ``` 或者自己构建数据帧 diff --git a/handbook/docs/websocketservice.mdx b/handbook/docs/websocketservice.mdx index 1804a0953..1495f84ae 100644 --- a/handbook/docs/websocketservice.mdx +++ b/handbook/docs/websocketservice.mdx @@ -89,7 +89,7 @@ service.Logger.Info("服务器已启动"); /// /// /// -private static bool VerifyConnection(IHttpSessionClient client, HttpContext context) +private static Task VerifyConnection(IHttpSessionClient client, HttpContext context) { if (!context.Request.IsUpgrade())//如果不包含升级协议的header,就直接返回false。 { @@ -107,9 +107,9 @@ private static bool VerifyConnection(IHttpSessionClient client, HttpContext cont } else { - context.Response + await context.Response .SetStatus(403, "token不正确") - .Answer(); + .AnswerAsync(); } } else if (context.Request.UrlEquals("/wsheader"))//以此连接,则需要从header传入token才可以连接 @@ -120,9 +120,9 @@ private static bool VerifyConnection(IHttpSessionClient client, HttpContext cont } else { - context.Response + await context.Response .SetStatus(403, "token不正确") - .Answer(); + .AnswerAsync(); } } return false; @@ -179,7 +179,8 @@ public class MyApiServer : SingletonRpcServer { if (callContext.Caller is HttpSessionClient sessionClient) { - if (await sessionClient.SwitchProtocolToWebSocketAsync(callContext.HttpContext)) + var result=await sessionClient.SwitchProtocolToWebSocketAsync(callContext.HttpContext); + if (result.IsSuccess) { m_logger.Info("WS通过WebApi连接"); var webSocket = sessionClient.WebSocket; @@ -398,7 +399,7 @@ class MyReadWebSocketPlugin : PluginBase, IWebSocketHandshakedPlugin using (var receiveResult = await client.ReadAsync(CancellationToken.None)) { - if (receiveResult.DataFrame == null) + if (receiveResult.IsCompleted) { break; } @@ -474,7 +475,7 @@ private static HttpService CreateHttpService() 使用`ReadAsync`,在`OnWebSocketHandshaked`组合消息。 -```csharp {33-60} showLineNumbers +```csharp {33-52} showLineNumbers internal class MyReadTextWebSocketPlugin : PluginBase, IWebSocketHandshakedPlugin { private readonly ILog m_logger; @@ -509,8 +510,11 @@ internal class MyReadTextWebSocketPlugin : PluginBase, IWebSocketHandshakedPlugi { case WSDataType.Cont: { - //收到的是中继包 - if (dataFrame.FIN)//判断是否为最终包 + //先缓存中继数据 + stream.Write(data.Span); + + //然后判断中继包是否为最终包 + if (dataFrame.FIN) { //是 @@ -523,17 +527,6 @@ internal class MyReadTextWebSocketPlugin : PluginBase, IWebSocketHandshakedPlugi this.m_logger.Info($"WebSocket二进制:{stream.Length}长度"); } } - else - { - //否,继续缓存 - - //如果是非net6.0即以上,即:NetFramework平台使用。原因是stream不支持span写入 - //var segment = data.AsSegment(); - //stream.Write(segment.Array, segment.Offset, segment.Count); - - //如果是net6.0以上,直接写入span即可 - stream.Write(data.Span); - } } break; case WSDataType.Text: