...
 
Commits (17)
    https://gitcode.net/qq_40374647/RRQMSocket/-/commit/15a684596f5590b8bfaf4c2e3f4f9907e085c7a7 修复ws协议的touchrpc连接问题 2023-02-15T12:39:43+08:00 若汝棋茗 505554090@qq.com https://gitcode.net/qq_40374647/RRQMSocket/-/commit/88db56d8cce92f7ec62870104a594dec84f9708c 文档更新 2023-02-15T12:42:55+08:00 若汝棋茗 505554090@qq.com https://gitcode.net/qq_40374647/RRQMSocket/-/commit/00d1925e3dc342b87ca3490883236ac6662bc0e2 更新引用 2023-02-15T12:44:42+08:00 若汝棋茗 505554090@qq.com https://gitcode.net/qq_40374647/RRQMSocket/-/commit/bb92b0781b777f443c7665cd1fd9f2d26c62c008 update README.md. 2023-02-15T04:49:33+00:00 若汝棋茗 505554090@qq.com Signed-off-by: <span data-trailer="Signed-off-by:"><a href="mailto:505554090@qq.com" title="505554090@qq.com"></a><a href="javascript:void(0)" class="avatar s16 avatar-inline identicon bg6" style="text-decoration: none">N</a><a href="mailto:505554090@qq.com" title="505554090@qq.com">若汝棋茗</a> &lt;<a href="mailto:505554090@qq.com" title="505554090@qq.com">505554090@qq.com</a>&gt;</span> https://gitcode.net/qq_40374647/RRQMSocket/-/commit/d9635360c55e6291438b8cdf196043d9b39bf7ac update README.en.md. 2023-02-15T04:52:23+00:00 若汝棋茗 505554090@qq.com Signed-off-by: <span data-trailer="Signed-off-by:"><a href="mailto:505554090@qq.com" title="505554090@qq.com"></a><a href="javascript:void(0)" class="avatar s16 avatar-inline identicon bg5" style="text-decoration: none">N</a><a href="mailto:505554090@qq.com" title="505554090@qq.com">若汝棋茗</a> &lt;<a href="mailto:505554090@qq.com" title="505554090@qq.com">505554090@qq.com</a>&gt;</span> https://gitcode.net/qq_40374647/RRQMSocket/-/commit/01c82e9a11a87e72a6f3179dd8dcd3e40eae99c9 测试github pages 2023-02-15T13:01:11+08:00 若汝棋茗 505554090@qq.com https://gitcode.net/qq_40374647/RRQMSocket/-/commit/dd419017c4bb0a635a0e4c824e0b7bda0ed72e9a Merge branch 'master' of https://gitee.com/RRQM_Home/TouchSocket 2023-02-15T13:01:14+08:00 若汝棋茗 505554090@qq.com https://gitcode.net/qq_40374647/RRQMSocket/-/commit/d0ac33afca7d2f093dac777c729756596192fb9d 测试文档 2023-02-15T13:15:00+08:00 若汝棋茗 505554090@qq.com https://gitcode.net/qq_40374647/RRQMSocket/-/commit/995620c5b8ba17f3ee28a94e95478f4ef16d223c 测试文档 2023-02-15T13:34:45+08:00 若汝棋茗 505554090@qq.com https://gitcode.net/qq_40374647/RRQMSocket/-/commit/c04ce1db6c3b8fd42ab83a89aecc1213e89c0fac 删除试验文档 2023-02-15T13:47:20+08:00 若汝棋茗 505554090@qq.com https://gitcode.net/qq_40374647/RRQMSocket/-/commit/f8cae8eb3f253d0248507b3e890b28d329114fbc 文档增加InheritedInterface 2023-02-15T15:10:49+08:00 若汝棋茗 505554090@qq.com https://gitcode.net/qq_40374647/RRQMSocket/-/commit/01eb661fd6f24161b4ce1a14a6389251381626d9 增加Websocket连接验证示例 2023-02-15T17:02:24+08:00 若汝棋茗 505554090@qq.com https://gitcode.net/qq_40374647/RRQMSocket/-/commit/408cc6a34b4c94e1d9d108e2d6749cdf35ed773a 更新文档 2023-02-15T17:04:59+08:00 若汝棋茗 505554090@qq.com https://gitcode.net/qq_40374647/RRQMSocket/-/commit/454104b4663785e9a213b2c572eec5a78e8145a4 更新引用 2023-02-15T17:07:29+08:00 若汝棋茗 505554090@qq.com https://gitcode.net/qq_40374647/RRQMSocket/-/commit/c3fb5d497f33a5ac6f78fc85e61227089e4d37f0 修复引用 2023-02-15T17:31:15+08:00 若汝棋茗 505554090@qq.com https://gitcode.net/qq_40374647/RRQMSocket/-/commit/95aa0b76b4d0de77fd768764b62d592ebd15616b 更新文档 2023-02-15T21:00:03+08:00 若汝棋茗 505554090@qq.com https://gitcode.net/qq_40374647/RRQMSocket/-/commit/4d086c784060e45efb188cbc5a68c6aa9a7a345b 更新文档 2023-02-16T09:43:25+08:00 若汝棋茗 505554090@qq.com
...@@ -9,8 +9,8 @@ ...@@ -9,8 +9,8 @@
[![NuGet(TouchSocket)](https://img.shields.io/nuget/v/TouchSocket.svg?label=TouchSocket)](https://www.nuget.org/packages/TouchSocket/) [![NuGet(TouchSocket)](https://img.shields.io/nuget/v/TouchSocket.svg?label=TouchSocket)](https://www.nuget.org/packages/TouchSocket/)
[![NuGet(TouchSocket)](https://img.shields.io/nuget/dt/TouchSocket.svg)](https://www.nuget.org/packages/TouchSocket/) [![NuGet(TouchSocket)](https://img.shields.io/nuget/dt/TouchSocket.svg)](https://www.nuget.org/packages/TouchSocket/)
[![License](https://img.shields.io/badge/license-Apache%202-4EB1BA.svg)](https://www.apache.org/licenses/LICENSE-2.0.html) [![License](https://img.shields.io/badge/license-Apache%202-4EB1BA.svg)](https://www.apache.org/licenses/LICENSE-2.0.html)
[![star](https://gitee.com/dotnetchina/TouchSocket/badge/star.svg?theme=gvp)](https://gitee.com/dotnetchina/TouchSocket/stargazers) [![star](https://gitee.com/RRQM_Home/TouchSocket/badge/star.svg?theme=gvp)](https://gitee.com/dotnetchina/TouchSocket/stargazers)
[![fork](https://gitee.com/dotnetchina/TouchSocket/badge/fork.svg?theme=gvp)](https://gitee.com/dotnetchina/TouchSocket/members) [![fork](https://gitee.com/RRQM_Home/TouchSocket/badge/fork.svg?theme=gvp)](https://gitee.com/dotnetchina/TouchSocket/members)
<a href="https://jq.qq.com/?_wv=1027&k=gN7UL4fw"> <a href="https://jq.qq.com/?_wv=1027&k=gN7UL4fw">
<img src="https://img.shields.io/badge/QQ群-234762506-red" alt="QQ"> <img src="https://img.shields.io/badge/QQ群-234762506-red" alt="QQ">
</a> </a>
...@@ -37,7 +37,7 @@ English | [中文](README.md) ...@@ -37,7 +37,7 @@ English | [中文](README.md)
【Enterprise version】 【Enterprise version】
| Nuget|Url |Describe| | Nuget|Url |Describe|
|---|---|---| |---|---|---|
|[![NuGet version (TouchSocketPro)](https://img.shields.io/nuget/v/TouchSocketPro.svg?label=TouchSocketPro)](https://www.nuget.org/packages/TouchSocketPro)|[Gitee](https://gitee.com/dotnetchina/TouchSocketPro)<br>[Github](https://github.com/RRQM/TouchSocketPro)| TouchSocketpro is the enterprise version of TouchSocket, which is based on the original. <br> There are also some corporate versions. For details, please see [Enterprise Edition Related](https://www.yuque.com/rrqm/touchsocket/80696720a95e415d94c87fa03642513d)| |[![NuGet version (TouchSocketPro)](https://img.shields.io/nuget/v/TouchSocketPro.svg?label=TouchSocketPro)](https://www.nuget.org/packages/TouchSocketPro)|[Gitee](https://gitee.com/dotnetchina/TouchSocketPro)<br>[Github](https://github.com/RRQM/TouchSocketPro)| TouchSocketpro is the enterprise version of TouchSocket, which is based on the original. <br> There are also some corporate versions. For details, please see [Enterprise Edition Related](https://rrqm_home.gitee.io/touchsocket/docs/enterprise/)|
| [![NuGet version (TouchSocketPro.AspNetCore)](https://img.shields.io/nuget/v/TouchSocketPro.AspNetCore.svg?label=TouchSocketPro.AspNetCore)](https://www.nuget.org/packages/TouchSocketPro.AspNetCore)|[Gitee](https://gitee.com/dotnetchina/TouchSocketPro)<br>[Github](https://github.com/RRQM/TouchSocketPro) | TouchSocketpro.aspnetcore is an exclusive version suitable for Aspnetcore.| | [![NuGet version (TouchSocketPro.AspNetCore)](https://img.shields.io/nuget/v/TouchSocketPro.AspNetCore.svg?label=TouchSocketPro.AspNetCore)](https://www.nuget.org/packages/TouchSocketPro.AspNetCore)|[Gitee](https://gitee.com/dotnetchina/TouchSocketPro)<br>[Github](https://github.com/RRQM/TouchSocketPro) | TouchSocketpro.aspnetcore is an exclusive version suitable for Aspnetcore.|
## 🖥Support environment ## 🖥Support environment
...@@ -161,7 +161,7 @@ In the config plug -in configuration, you must first enable the plug -in, and th ...@@ -161,7 +161,7 @@ In the config plug -in configuration, you must first enable the plug -in, and th
}); });
``` ```
**【FixedHeaderPackageAdapter包模式】** **【FixedHeaderPackageAdapter Pack】**
This adapter mainly solves the problem of TCP adhesion package. The data format adopts a simple and efficient "Baotou+Data Body" mode. Among them, Baotou supports: This adapter mainly solves the problem of TCP adhesion package. The data format adopts a simple and efficient "Baotou+Data Body" mode. Among them, Baotou supports:
...@@ -185,9 +185,6 @@ Users customize fixed Baotou adapters mainly help users solve data frame informa ...@@ -185,9 +185,6 @@ Users customize fixed Baotou adapters mainly help users solve data frame informa
Users customize non -fixed Baotou adapters mainly help users solve the data frame information with non -fixed Baotou. For example: the most typical HTTP packet, the data head and the data body are separated by "\r\n", and the data header is not fixed due to the different request information of the request request, and the length of the data body is not fixed, and the length of the data body is It is also specified by the value display of the data head, so you can consider using the CustomunfixedHeaderDatahandlingAdapter analysis, which can be achieved only through simple development. Users customize non -fixed Baotou adapters mainly help users solve the data frame information with non -fixed Baotou. For example: the most typical HTTP packet, the data head and the data body are separated by "\r\n", and the data header is not fixed due to the different request information of the request request, and the length of the data body is not fixed, and the length of the data body is It is also specified by the value display of the data head, so you can consider using the CustomunfixedHeaderDatahandlingAdapter analysis, which can be achieved only through simple development.
## 🧲Application scenario simulation
[Scene entrance](https://www.yuque.com/rrqm/touchsocket/wrwx9k)
*** ***
## Thank you ## Thank you
...@@ -196,4 +193,4 @@ Thank you for your support for TouchSocket. If you have any other questions, ple ...@@ -196,4 +193,4 @@ Thank you for your support for TouchSocket. If you have any other questions, ple
## Support author ## Support author
[Support entrance](https://www.yuque.com/rrqm/touchsocket/a5199820843b324f025633fdeee44394) [Support entrance](https://rrqm_home.gitee.io/touchsocket/docs/donate)
...@@ -39,7 +39,7 @@ ...@@ -39,7 +39,7 @@
【企业版】 【企业版】
| 名称|地址 |描述| | 名称|地址 |描述|
|---|---|---| |---|---|---|
|[![NuGet version (TouchSocketPro)](https://img.shields.io/nuget/v/TouchSocketPro.svg?label=TouchSocketPro)](https://www.nuget.org/packages/TouchSocketPro)|[Gitee](https://gitee.com/RRQM_Home/TouchSocketPro)<br>[Github](https://github.com/RRQM/TouchSocketPro)| TouchSocketPro是TouchSocket的企业版,这在原有基础之上,<br>还有一些企业版功能,详情请看[企业版相关](https://www.yuque.com/rrqm/touchsocket/80696720a95e415d94c87fa03642513d)| |[![NuGet version (TouchSocketPro)](https://img.shields.io/nuget/v/TouchSocketPro.svg?label=TouchSocketPro)](https://www.nuget.org/packages/TouchSocketPro)|[Gitee](https://gitee.com/RRQM_Home/TouchSocketPro)<br>[Github](https://github.com/RRQM/TouchSocketPro)| TouchSocketPro是TouchSocket的企业版,这在原有基础之上,<br>还有一些企业版功能,详情请看[企业版相关](https://rrqm_home.gitee.io/touchsocket/docs/enterprise/)|
| [![NuGet version (TouchSocketPro.AspNetCore)](https://img.shields.io/nuget/v/TouchSocketPro.AspNetCore.svg?label=TouchSocketPro.AspNetCore)](https://www.nuget.org/packages/TouchSocketPro.AspNetCore)|[Gitee](https://gitee.com/RRQM_Home/TouchSocketPro)<br>[Github](https://github.com/RRQM/TouchSocketPro) | TouchSocketPro.AspNetCore是适用于AspNetCore的专属版本。| | [![NuGet version (TouchSocketPro.AspNetCore)](https://img.shields.io/nuget/v/TouchSocketPro.AspNetCore.svg?label=TouchSocketPro.AspNetCore)](https://www.nuget.org/packages/TouchSocketPro.AspNetCore)|[Gitee](https://gitee.com/RRQM_Home/TouchSocketPro)<br>[Github](https://github.com/RRQM/TouchSocketPro) | TouchSocketPro.AspNetCore是适用于AspNetCore的专属版本。|
#### 特别声明 #### 特别声明
...@@ -190,9 +190,6 @@ TouchSocketBitConverter.DefaultEndianType = EndianType.Little; ...@@ -190,9 +190,6 @@ TouchSocketBitConverter.DefaultEndianType = EndianType.Little;
用户自定义不固定包头适配器,主要帮助用户解决具有包头不固定的数据帧信息。例如:最典型的HTTP数据包,其数据头和数据体由“\r\n”隔开,而数据头又因为请求者的请求信息的不同,头部数据也不固定,而数据体的长度,也是由数据头的ContentLength的值显式指定的,所以可以考虑使用CustomUnfixedHeaderDataHandlingAdapter解析,也是仅通过简单的开发,就能实现。 用户自定义不固定包头适配器,主要帮助用户解决具有包头不固定的数据帧信息。例如:最典型的HTTP数据包,其数据头和数据体由“\r\n”隔开,而数据头又因为请求者的请求信息的不同,头部数据也不固定,而数据体的长度,也是由数据头的ContentLength的值显式指定的,所以可以考虑使用CustomUnfixedHeaderDataHandlingAdapter解析,也是仅通过简单的开发,就能实现。
## 🧲应用场景模拟
[场景入口](https://www.yuque.com/rrqm/touchsocket/wrwx9k)
*** ***
## 致谢 ## 致谢
...@@ -201,4 +198,4 @@ TouchSocketBitConverter.DefaultEndianType = EndianType.Little; ...@@ -201,4 +198,4 @@ TouchSocketBitConverter.DefaultEndianType = EndianType.Little;
## 支持作者 ## 支持作者
[支持入口](https://www.yuque.com/rrqm/touchsocket/a5199820843b324f025633fdeee44394) [支持入口](https://rrqm_home.gitee.io/touchsocket/docs/donate)
...@@ -198,6 +198,10 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "RpcImplementationClassLibra ...@@ -198,6 +198,10 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "RpcImplementationClassLibra
EndProject EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "RecommendRpcConsoleApp", "examples\TouchRpc简单示例\推荐用法\RecommendRpcConsoleApp\RecommendRpcConsoleApp.csproj", "{211DDA93-B293-44AD-9A9D-FC1617EA6ECD}" Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "RecommendRpcConsoleApp", "examples\TouchRpc简单示例\推荐用法\RecommendRpcConsoleApp\RecommendRpcConsoleApp.csproj", "{211DDA93-B293-44AD-9A9D-FC1617EA6ECD}"
EndProject EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "WS连接验证", "WS连接验证", "{20A1BFEC-2EB8-417D-9F60-F2FA91D4B650}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "WSVerifyConsoleApp", "examples\WebSocket简单示例\WS连接验证\WSVerifyConsoleApp\WSVerifyConsoleApp.csproj", "{3D1AC964-6E36-495B-83B3-7E544C90074B}"
EndProject
Global Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Any CPU = Debug|Any CPU Debug|Any CPU = Debug|Any CPU
...@@ -440,6 +444,10 @@ Global ...@@ -440,6 +444,10 @@ Global
{211DDA93-B293-44AD-9A9D-FC1617EA6ECD}.Debug|Any CPU.Build.0 = Debug|Any CPU {211DDA93-B293-44AD-9A9D-FC1617EA6ECD}.Debug|Any CPU.Build.0 = Debug|Any CPU
{211DDA93-B293-44AD-9A9D-FC1617EA6ECD}.Release|Any CPU.ActiveCfg = Release|Any CPU {211DDA93-B293-44AD-9A9D-FC1617EA6ECD}.Release|Any CPU.ActiveCfg = Release|Any CPU
{211DDA93-B293-44AD-9A9D-FC1617EA6ECD}.Release|Any CPU.Build.0 = Release|Any CPU {211DDA93-B293-44AD-9A9D-FC1617EA6ECD}.Release|Any CPU.Build.0 = Release|Any CPU
{3D1AC964-6E36-495B-83B3-7E544C90074B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{3D1AC964-6E36-495B-83B3-7E544C90074B}.Debug|Any CPU.Build.0 = Debug|Any CPU
{3D1AC964-6E36-495B-83B3-7E544C90074B}.Release|Any CPU.ActiveCfg = Release|Any CPU
{3D1AC964-6E36-495B-83B3-7E544C90074B}.Release|Any CPU.Build.0 = Release|Any CPU
EndGlobalSection EndGlobalSection
GlobalSection(SolutionProperties) = preSolution GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE HideSolutionNode = FALSE
...@@ -519,6 +527,8 @@ Global ...@@ -519,6 +527,8 @@ Global
{9E48D8F5-6DDC-4590-9EF4-1C5BE9C6FD22} = {8CFACB33-960A-4BA7-972F-059B81E1A4B2} {9E48D8F5-6DDC-4590-9EF4-1C5BE9C6FD22} = {8CFACB33-960A-4BA7-972F-059B81E1A4B2}
{D3E53943-70C5-40C2-A76A-DB8FB0B951F0} = {8CFACB33-960A-4BA7-972F-059B81E1A4B2} {D3E53943-70C5-40C2-A76A-DB8FB0B951F0} = {8CFACB33-960A-4BA7-972F-059B81E1A4B2}
{211DDA93-B293-44AD-9A9D-FC1617EA6ECD} = {8CFACB33-960A-4BA7-972F-059B81E1A4B2} {211DDA93-B293-44AD-9A9D-FC1617EA6ECD} = {8CFACB33-960A-4BA7-972F-059B81E1A4B2}
{20A1BFEC-2EB8-417D-9F60-F2FA91D4B650} = {84D1227F-3419-4BCD-9331-8B61B2C19784}
{3D1AC964-6E36-495B-83B3-7E544C90074B} = {20A1BFEC-2EB8-417D-9F60-F2FA91D4B650}
EndGlobalSection EndGlobalSection
GlobalSection(ExtensibilityGlobals) = postSolution GlobalSection(ExtensibilityGlobals) = postSolution
SolutionGuid = {DB787235-A13A-4A3D-B5A8-5DFEB6511EEE} SolutionGuid = {DB787235-A13A-4A3D-B5A8-5DFEB6511EEE}
......
...@@ -6,7 +6,7 @@ ...@@ -6,7 +6,7 @@
</PropertyGroup> </PropertyGroup>
<ItemGroup> <ItemGroup>
<PackageReference Include="TouchSocket" Version="1.2.10" /> <PackageReference Include="TouchSocket" Version="1.2.12" />
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>
<None Update="SGCC测试数据.txt"> <None Update="SGCC测试数据.txt">
......
...@@ -7,6 +7,6 @@ ...@@ -7,6 +7,6 @@
</PropertyGroup> </PropertyGroup>
<ItemGroup> <ItemGroup>
<PackageReference Include="TouchSocket" Version="1.2.10" /> <PackageReference Include="TouchSocket" Version="1.2.12" />
</ItemGroup> </ItemGroup>
</Project> </Project>
...@@ -8,7 +8,7 @@ ...@@ -8,7 +8,7 @@
</PropertyGroup> </PropertyGroup>
<ItemGroup> <ItemGroup>
<PackageReference Include="TouchSocket" Version="1.2.10" /> <PackageReference Include="TouchSocket" Version="1.2.12" />
</ItemGroup> </ItemGroup>
</Project> </Project>
...@@ -9,7 +9,7 @@ ...@@ -9,7 +9,7 @@
</PropertyGroup> </PropertyGroup>
<ItemGroup> <ItemGroup>
<PackageReference Include="TouchSocketPro" Version="1.2.16" /> <PackageReference Include="TouchSocketPro" Version="1.2.19" />
</ItemGroup> </ItemGroup>
</Project> </Project>
\ No newline at end of file
...@@ -8,7 +8,7 @@ ...@@ -8,7 +8,7 @@
</PropertyGroup> </PropertyGroup>
<ItemGroup> <ItemGroup>
<PackageReference Include="TouchSocket" Version="1.2.10" /> <PackageReference Include="TouchSocket" Version="1.2.12" />
</ItemGroup> </ItemGroup>
</Project> </Project>
...@@ -8,7 +8,7 @@ ...@@ -8,7 +8,7 @@
</PropertyGroup> </PropertyGroup>
<ItemGroup> <ItemGroup>
<PackageReference Include="TouchSocket" Version="1.2.10" /> <PackageReference Include="TouchSocket" Version="1.2.12" />
</ItemGroup> </ItemGroup>
</Project> </Project>
...@@ -6,6 +6,6 @@ ...@@ -6,6 +6,6 @@
</PropertyGroup> </PropertyGroup>
<ItemGroup> <ItemGroup>
<PackageReference Include="TouchSocket" Version="1.2.10" /> <PackageReference Include="TouchSocket" Version="1.2.12" />
</ItemGroup> </ItemGroup>
</Project> </Project>
...@@ -6,7 +6,7 @@ ...@@ -6,7 +6,7 @@
</PropertyGroup> </PropertyGroup>
<ItemGroup> <ItemGroup>
<PackageReference Include="TouchSocket" Version="1.2.10" /> <PackageReference Include="TouchSocket" Version="1.2.12" />
</ItemGroup> </ItemGroup>
</Project> </Project>
...@@ -6,7 +6,7 @@ ...@@ -6,7 +6,7 @@
</PropertyGroup> </PropertyGroup>
<ItemGroup> <ItemGroup>
<PackageReference Include="TouchSocket" Version="1.2.10" /> <PackageReference Include="TouchSocket" Version="1.2.12" />
</ItemGroup> </ItemGroup>
</Project> </Project>
...@@ -6,6 +6,6 @@ ...@@ -6,6 +6,6 @@
</PropertyGroup> </PropertyGroup>
<ItemGroup> <ItemGroup>
<PackageReference Include="TouchSocket" Version="1.2.10" /> <PackageReference Include="TouchSocket" Version="1.2.12" />
</ItemGroup> </ItemGroup>
</Project> </Project>
...@@ -5,6 +5,6 @@ ...@@ -5,6 +5,6 @@
<TargetFramework>net6.0</TargetFramework> <TargetFramework>net6.0</TargetFramework>
</PropertyGroup> </PropertyGroup>
<ItemGroup> <ItemGroup>
<PackageReference Include="TouchSocket" Version="1.2.10" /> <PackageReference Include="TouchSocket" Version="1.2.12" />
</ItemGroup> </ItemGroup>
</Project> </Project>
...@@ -7,7 +7,7 @@ ...@@ -7,7 +7,7 @@
<ItemGroup> <ItemGroup>
<PackageReference Include="Consul" Version="1.6.10.8" /> <PackageReference Include="Consul" Version="1.6.10.8" />
<PackageReference Include="TouchSocket" Version="1.2.10" /> <PackageReference Include="TouchSocket" Version="1.2.12" />
</ItemGroup> </ItemGroup>
</Project> </Project>
...@@ -7,7 +7,7 @@ ...@@ -7,7 +7,7 @@
<ItemGroup> <ItemGroup>
<PackageReference Include="Consul" Version="1.6.10.8" /> <PackageReference Include="Consul" Version="1.6.10.8" />
<PackageReference Include="TouchSocket" Version="1.2.10" /> <PackageReference Include="TouchSocket" Version="1.2.12" />
</ItemGroup> </ItemGroup>
</Project> </Project>
...@@ -8,7 +8,7 @@ ...@@ -8,7 +8,7 @@
<ItemGroup> <ItemGroup>
<PackageReference Include="Consul" Version="1.6.10.8" /> <PackageReference Include="Consul" Version="1.6.10.8" />
<PackageReference Include="TouchSocket" Version="1.2.10" /> <PackageReference Include="TouchSocket" Version="1.2.12" />
</ItemGroup> </ItemGroup>
</Project> </Project>
\ No newline at end of file
...@@ -7,7 +7,7 @@ ...@@ -7,7 +7,7 @@
</PropertyGroup> </PropertyGroup>
<ItemGroup> <ItemGroup>
<PackageReference Include="TouchSocketPro" Version="1.2.16" /> <PackageReference Include="TouchSocketPro" Version="1.2.19" />
</ItemGroup> </ItemGroup>
</Project> </Project>
\ No newline at end of file
...@@ -7,6 +7,6 @@ ...@@ -7,6 +7,6 @@
</PropertyGroup> </PropertyGroup>
<ItemGroup> <ItemGroup>
<PackageReference Include="TouchSocketPro" Version="1.2.16" /> <PackageReference Include="TouchSocketPro" Version="1.2.19" />
</ItemGroup> </ItemGroup>
</Project> </Project>
\ No newline at end of file
...@@ -5,6 +5,6 @@ ...@@ -5,6 +5,6 @@
<TargetFramework>net6.0</TargetFramework> <TargetFramework>net6.0</TargetFramework>
</PropertyGroup> </PropertyGroup>
<ItemGroup> <ItemGroup>
<PackageReference Include="TouchSocket" Version="1.2.10" /> <PackageReference Include="TouchSocket" Version="1.2.12" />
</ItemGroup> </ItemGroup>
</Project> </Project>
...@@ -5,6 +5,6 @@ ...@@ -5,6 +5,6 @@
<TargetFramework>net6.0</TargetFramework> <TargetFramework>net6.0</TargetFramework>
</PropertyGroup> </PropertyGroup>
<ItemGroup> <ItemGroup>
<PackageReference Include="TouchSocket" Version="1.2.10" /> <PackageReference Include="TouchSocket" Version="1.2.12" />
</ItemGroup> </ItemGroup>
</Project> </Project>
...@@ -12,7 +12,7 @@ ...@@ -12,7 +12,7 @@
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>
<PackageReference Include="TouchSocketPro" Version="1.2.16" /> <PackageReference Include="TouchSocketPro" Version="1.2.19" />
<PackageReference Include="WPF-UI" Version="2.0.3" /> <PackageReference Include="WPF-UI" Version="2.0.3" />
<PackageReference Include="CommunityToolkit.Mvvm" Version="8.1.0" /> <PackageReference Include="CommunityToolkit.Mvvm" Version="8.1.0" />
</ItemGroup> </ItemGroup>
......
...@@ -12,7 +12,7 @@ ...@@ -12,7 +12,7 @@
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>
<PackageReference Include="TouchSocketPro" Version="1.2.16" /> <PackageReference Include="TouchSocketPro" Version="1.2.19" />
<PackageReference Include="WPF-UI" Version="2.0.3" /> <PackageReference Include="WPF-UI" Version="2.0.3" />
<PackageReference Include="CommunityToolkit.Mvvm" Version="8.1.0" /> <PackageReference Include="CommunityToolkit.Mvvm" Version="8.1.0" />
</ItemGroup> </ItemGroup>
......
...@@ -6,6 +6,6 @@ ...@@ -6,6 +6,6 @@
</PropertyGroup> </PropertyGroup>
<ItemGroup> <ItemGroup>
<PackageReference Include="TouchSocket" Version="1.2.10" /> <PackageReference Include="TouchSocket" Version="1.2.12" />
</ItemGroup> </ItemGroup>
</Project> </Project>
...@@ -7,6 +7,6 @@ ...@@ -7,6 +7,6 @@
<ItemGroup> <ItemGroup>
<PackageReference Include="Newtonsoft.Json" Version="13.0.2" /> <PackageReference Include="Newtonsoft.Json" Version="13.0.2" />
<PackageReference Include="TouchSocket" Version="1.2.10" /> <PackageReference Include="TouchSocket" Version="1.2.12" />
</ItemGroup> </ItemGroup>
</Project> </Project>
...@@ -9,7 +9,7 @@ ...@@ -9,7 +9,7 @@
<ItemGroup> <ItemGroup>
<PackageReference Include="log4net" Version="2.0.15" /> <PackageReference Include="log4net" Version="2.0.15" />
<PackageReference Include="TouchSocket" Version="1.2.10" /> <PackageReference Include="TouchSocket" Version="1.2.12" />
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>
......
...@@ -6,7 +6,7 @@ ...@@ -6,7 +6,7 @@
</PropertyGroup> </PropertyGroup>
<ItemGroup> <ItemGroup>
<PackageReference Include="TouchSocketPro" Version="1.2.16" /> <PackageReference Include="TouchSocketPro" Version="1.2.19" />
</ItemGroup> </ItemGroup>
</Project> </Project>
...@@ -6,6 +6,6 @@ ...@@ -6,6 +6,6 @@
</PropertyGroup> </PropertyGroup>
<ItemGroup> <ItemGroup>
<PackageReference Include="TouchSocket" Version="1.2.10" /> <PackageReference Include="TouchSocket" Version="1.2.12" />
</ItemGroup> </ItemGroup>
</Project> </Project>
...@@ -6,7 +6,7 @@ ...@@ -6,7 +6,7 @@
<ItemGroup> <ItemGroup>
<PackageReference Include="Swashbuckle.AspNetCore" Version="6.5.0" /> <PackageReference Include="Swashbuckle.AspNetCore" Version="6.5.0" />
<PackageReference Include="TouchSocketPro" Version="1.2.16" /> <PackageReference Include="TouchSocketPro" Version="1.2.19" />
<PackageReference Include="TouchSocketPro.AspNetCore" Version="1.2.0" /> <PackageReference Include="TouchSocketPro.AspNetCore" Version="1.2.1" />
</ItemGroup> </ItemGroup>
</Project> </Project>
...@@ -46,8 +46,8 @@ ...@@ -46,8 +46,8 @@
<Reference Include="System.Net.Http" /> <Reference Include="System.Net.Http" />
<Reference Include="System.Windows.Forms" /> <Reference Include="System.Windows.Forms" />
<Reference Include="System.Xml" /> <Reference Include="System.Xml" />
<Reference Include="TouchSocket, Version=1.2.10.0, Culture=neutral, PublicKeyToken=e66400a0f8ce7abb, processorArchitecture=MSIL"> <Reference Include="TouchSocket, Version=1.2.12.0, Culture=neutral, PublicKeyToken=e66400a0f8ce7abb, processorArchitecture=MSIL">
<HintPath>..\..\..\packages\TouchSocket.1.2.10\lib\net45\TouchSocket.dll</HintPath> <HintPath>..\..\..\packages\TouchSocket.1.2.12\lib\net45\TouchSocket.dll</HintPath>
</Reference> </Reference>
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>
......
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<packages> <packages>
<package id="TouchSocket" version="1.2.10" targetFramework="net48" /> <package id="TouchSocket" version="1.2.12" targetFramework="net48" />
</packages> </packages>
\ No newline at end of file
...@@ -6,7 +6,7 @@ ...@@ -6,7 +6,7 @@
</PropertyGroup> </PropertyGroup>
<ItemGroup> <ItemGroup>
<PackageReference Include="TouchSocket" Version="1.2.10" /> <PackageReference Include="TouchSocket" Version="1.2.12" />
</ItemGroup> </ItemGroup>
</Project> </Project>
...@@ -46,8 +46,8 @@ ...@@ -46,8 +46,8 @@
<Reference Include="System.Net.Http" /> <Reference Include="System.Net.Http" />
<Reference Include="System.Windows.Forms" /> <Reference Include="System.Windows.Forms" />
<Reference Include="System.Xml" /> <Reference Include="System.Xml" />
<Reference Include="TouchSocket, Version=1.2.10.0, Culture=neutral, PublicKeyToken=e66400a0f8ce7abb, processorArchitecture=MSIL"> <Reference Include="TouchSocket, Version=1.2.12.0, Culture=neutral, PublicKeyToken=e66400a0f8ce7abb, processorArchitecture=MSIL">
<HintPath>..\..\..\packages\TouchSocket.1.2.10\lib\net45\TouchSocket.dll</HintPath> <HintPath>..\..\..\packages\TouchSocket.1.2.12\lib\net45\TouchSocket.dll</HintPath>
</Reference> </Reference>
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>
......
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<packages> <packages>
<package id="TouchSocket" version="1.2.10" targetFramework="net48" /> <package id="TouchSocket" version="1.2.12" targetFramework="net48" />
</packages> </packages>
\ No newline at end of file
...@@ -8,7 +8,7 @@ ...@@ -8,7 +8,7 @@
</PropertyGroup> </PropertyGroup>
<ItemGroup> <ItemGroup>
<PackageReference Include="TouchSocket" Version="1.2.10" /> <PackageReference Include="TouchSocket" Version="1.2.12" />
</ItemGroup> </ItemGroup>
</Project> </Project>
...@@ -6,7 +6,7 @@ ...@@ -6,7 +6,7 @@
</PropertyGroup> </PropertyGroup>
<ItemGroup> <ItemGroup>
<PackageReference Include="TouchSocket" Version="1.2.10" /> <PackageReference Include="TouchSocket" Version="1.2.12" />
</ItemGroup> </ItemGroup>
</Project> </Project>
...@@ -8,7 +8,7 @@ ...@@ -8,7 +8,7 @@
</PropertyGroup> </PropertyGroup>
<ItemGroup> <ItemGroup>
<PackageReference Include="TouchSocket" Version="1.2.10" /> <PackageReference Include="TouchSocket" Version="1.2.12" />
</ItemGroup> </ItemGroup>
</Project> </Project>
...@@ -8,6 +8,6 @@ ...@@ -8,6 +8,6 @@
<Compile Include="..\TouchRpcServerApp\RpcProxy.cs" Link="RpcProxy.cs" /> <Compile Include="..\TouchRpcServerApp\RpcProxy.cs" Link="RpcProxy.cs" />
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>
<PackageReference Include="TouchSocket" Version="1.2.10" /> <PackageReference Include="TouchSocket" Version="1.2.12" />
</ItemGroup> </ItemGroup>
</Project> </Project>
\ No newline at end of file
...@@ -6,7 +6,7 @@ ...@@ -6,7 +6,7 @@
</PropertyGroup> </PropertyGroup>
<ItemGroup> <ItemGroup>
<PackageReference Include="TouchSocket" Version="1.2.10" /> <PackageReference Include="TouchSocket" Version="1.2.12" />
</ItemGroup> </ItemGroup>
</Project> </Project>
...@@ -8,7 +8,7 @@ ...@@ -8,7 +8,7 @@
</PropertyGroup> </PropertyGroup>
<ItemGroup> <ItemGroup>
<PackageReference Include="TouchSocketPro" Version="1.2.16" /> <PackageReference Include="TouchSocketPro" Version="1.2.19" />
</ItemGroup> </ItemGroup>
</Project> </Project>
...@@ -6,6 +6,6 @@ ...@@ -6,6 +6,6 @@
</PropertyGroup> </PropertyGroup>
<ItemGroup> <ItemGroup>
<PackageReference Include="TouchSocket" Version="1.2.10" /> <PackageReference Include="TouchSocket" Version="1.2.12" />
</ItemGroup> </ItemGroup>
</Project> </Project>
...@@ -7,6 +7,6 @@ ...@@ -7,6 +7,6 @@
<ItemGroup> <ItemGroup>
<PackageReference Include="Microsoft.Extensions.Logging.Abstractions" Version="7.0.0" /> <PackageReference Include="Microsoft.Extensions.Logging.Abstractions" Version="7.0.0" />
<PackageReference Include="Swashbuckle.AspNetCore" Version="6.5.0" /> <PackageReference Include="Swashbuckle.AspNetCore" Version="6.5.0" />
<PackageReference Include="TouchSocket.AspNetCore" Version="1.2.0" /> <PackageReference Include="TouchSocket.AspNetCore" Version="1.2.1" />
</ItemGroup> </ItemGroup>
</Project> </Project>
...@@ -7,6 +7,6 @@ ...@@ -7,6 +7,6 @@
<Compile Include="..\TouchRpcWebApplication\RpcProxy.cs" Link="RpcProxy.cs" /> <Compile Include="..\TouchRpcWebApplication\RpcProxy.cs" Link="RpcProxy.cs" />
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>
<PackageReference Include="TouchSocket.AspNetCore" Version="1.2.0" /> <PackageReference Include="TouchSocket.AspNetCore" Version="1.2.1" />
</ItemGroup> </ItemGroup>
</Project> </Project>
\ No newline at end of file
...@@ -6,7 +6,7 @@ ...@@ -6,7 +6,7 @@
<ItemGroup> <ItemGroup>
<PackageReference Include="MemoryPack" Version="1.9.13" /> <PackageReference Include="MemoryPack" Version="1.9.13" />
<PackageReference Include="TouchSocketPro" Version="1.2.16" /> <PackageReference Include="TouchSocketPro" Version="1.2.19" />
</ItemGroup> </ItemGroup>
</Project> </Project>
...@@ -7,8 +7,8 @@ ...@@ -7,8 +7,8 @@
<Nullable>enable</Nullable> <Nullable>enable</Nullable>
</PropertyGroup> </PropertyGroup>
<ItemGroup> <ItemGroup>
<PackageReference Include="TouchSocketPro" Version="1.2.16" /> <PackageReference Include="TouchSocketPro" Version="1.2.19" />
<PackageReference Include="TouchSocketPro.CodeAnalyzer" Version="1.2.6"> <PackageReference Include="TouchSocketPro.CodeAnalyzer" Version="1.2.8">
<PrivateAssets>all</PrivateAssets> <PrivateAssets>all</PrivateAssets>
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets> <IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
</PackageReference> </PackageReference>
......
...@@ -8,7 +8,7 @@ ...@@ -8,7 +8,7 @@
</PropertyGroup> </PropertyGroup>
<ItemGroup> <ItemGroup>
<PackageReference Include="TouchSocketPro" Version="1.2.16" /> <PackageReference Include="TouchSocketPro" Version="1.2.19" />
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>
......
...@@ -5,8 +5,8 @@ ...@@ -5,8 +5,8 @@
</PropertyGroup> </PropertyGroup>
<ItemGroup> <ItemGroup>
<PackageReference Include="TouchSocketPro" Version="1.2.16" /> <PackageReference Include="TouchSocketPro" Version="1.2.19" />
<PackageReference Include="TouchSocketPro.CodeAnalyzer" Version="1.2.6"> <PackageReference Include="TouchSocketPro.CodeAnalyzer" Version="1.2.8">
<PrivateAssets>all</PrivateAssets> <PrivateAssets>all</PrivateAssets>
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets> <IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
</PackageReference> </PackageReference>
......
...@@ -5,7 +5,7 @@ ...@@ -5,7 +5,7 @@
</PropertyGroup> </PropertyGroup>
<ItemGroup> <ItemGroup>
<PackageReference Include="TouchSocketPro" Version="1.2.16" /> <PackageReference Include="TouchSocketPro" Version="1.2.19" />
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>
......
...@@ -8,8 +8,8 @@ ...@@ -8,8 +8,8 @@
</PropertyGroup> </PropertyGroup>
<ItemGroup> <ItemGroup>
<PackageReference Include="TouchSocketPro" Version="1.2.16" /> <PackageReference Include="TouchSocketPro" Version="1.2.19" />
<PackageReference Include="TouchSocketPro.CodeAnalyzer" Version="1.2.6"> <PackageReference Include="TouchSocketPro.CodeAnalyzer" Version="1.2.8">
<PrivateAssets>all</PrivateAssets> <PrivateAssets>all</PrivateAssets>
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets> <IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
</PackageReference> </PackageReference>
......
...@@ -7,7 +7,7 @@ ...@@ -7,7 +7,7 @@
</PropertyGroup> </PropertyGroup>
<ItemGroup> <ItemGroup>
<PackageReference Include="TouchSocket" Version="1.2.10" /> <PackageReference Include="TouchSocket" Version="1.2.12" />
</ItemGroup> </ItemGroup>
</Project> </Project>
\ No newline at end of file
...@@ -7,7 +7,7 @@ ...@@ -7,7 +7,7 @@
</PropertyGroup> </PropertyGroup>
<ItemGroup> <ItemGroup>
<PackageReference Include="TouchSocket" Version="1.2.10" /> <PackageReference Include="TouchSocket" Version="1.2.12" />
</ItemGroup> </ItemGroup>
</Project> </Project>
\ No newline at end of file
...@@ -7,6 +7,6 @@ ...@@ -7,6 +7,6 @@
</PropertyGroup> </PropertyGroup>
<ItemGroup> <ItemGroup>
<PackageReference Include="TouchSocket" Version="1.2.10" /> <PackageReference Include="TouchSocket" Version="1.2.12" />
</ItemGroup> </ItemGroup>
</Project> </Project>
\ No newline at end of file
...@@ -8,7 +8,7 @@ ...@@ -8,7 +8,7 @@
</PropertyGroup> </PropertyGroup>
<ItemGroup> <ItemGroup>
<PackageReference Include="TouchSocket" Version="1.2.10" /> <PackageReference Include="TouchSocket" Version="1.2.12" />
</ItemGroup> </ItemGroup>
</Project> </Project>
...@@ -5,6 +5,6 @@ ...@@ -5,6 +5,6 @@
<TargetFramework>net6.0</TargetFramework> <TargetFramework>net6.0</TargetFramework>
</PropertyGroup> </PropertyGroup>
<ItemGroup> <ItemGroup>
<PackageReference Include="TouchSocket" Version="1.2.10" /> <PackageReference Include="TouchSocket" Version="1.2.12" />
</ItemGroup> </ItemGroup>
</Project> </Project>
...@@ -4,6 +4,6 @@ ...@@ -4,6 +4,6 @@
<TargetFramework>net6.0</TargetFramework> <TargetFramework>net6.0</TargetFramework>
</PropertyGroup> </PropertyGroup>
<ItemGroup> <ItemGroup>
<PackageReference Include="TouchSocket" Version="1.2.10" /> <PackageReference Include="TouchSocket" Version="1.2.12" />
</ItemGroup> </ItemGroup>
</Project> </Project>
\ No newline at end of file
...@@ -6,7 +6,7 @@ ...@@ -6,7 +6,7 @@
</PropertyGroup> </PropertyGroup>
<ItemGroup> <ItemGroup>
<PackageReference Include="TouchSocket" Version="1.2.10" /> <PackageReference Include="TouchSocket" Version="1.2.12" />
</ItemGroup> </ItemGroup>
</Project> </Project>
...@@ -7,7 +7,7 @@ ...@@ -7,7 +7,7 @@
</PropertyGroup> </PropertyGroup>
<ItemGroup> <ItemGroup>
<PackageReference Include="TouchSocket" Version="1.2.10" /> <PackageReference Include="TouchSocket" Version="1.2.12" />
</ItemGroup> </ItemGroup>
</Project> </Project>
\ No newline at end of file
using TouchSocket.Core;
using TouchSocket.Http;
using TouchSocket.Http.WebSockets;
using TouchSocket.Rpc.WebApi;
using TouchSocket.Rpc;
using TouchSocket.Sockets;
namespace WSVerifyConsoleApp
{
internal class Program
{
static void Main(string[] args)
{
WebApiVerify();
Console.ReadKey();
}
static void WebApiVerify()
{
var service = new HttpService();
service.Setup(new TouchSocketConfig()//加载配置
.UsePlugin()
.SetListenIPHosts(new IPHost[] { new IPHost(7789) })
.ConfigureContainer(a =>
{
a.AddConsoleLogger();
})
.ConfigureRpcStore(a =>
{
a.RegisterServer<MyServer>();
})
.ConfigurePlugins(a =>
{
a.UseWebApi();
a.UseWebSocket();//不用设置连接url
}))
.Start();
Console.WriteLine("服务器已启动,可使用下列地址连接");
Console.WriteLine("ws://127.0.0.1:7789/MyServer/ConnectWS?token=123");
WebSocketClient myWSClient = new WebSocketClient();
myWSClient.Setup(new TouchSocketConfig()
.SetRemoteIPHost("ws://127.0.0.1:7789/MyServer/ConnectWS?token=1234")
.ConfigureContainer(a =>
{
a.AddConsoleLogger();
}));
var result = myWSClient.TryConnect();
myWSClient.Logger.Info(result.ToString());
}
static void NormalVerify()
{
var service = new HttpService();
service.Setup(new TouchSocketConfig()//加载配置
.UsePlugin()
.SetListenIPHosts(new IPHost[] { new IPHost(7789) })
.ConfigureContainer(a =>
{
a.AddConsoleLogger();
})
.ConfigurePlugins(a =>
{
a.UseWebSocket()//添加WebSocket功能
.SetWSUrl("/ws");
//.SetCallback(WSCallback);//WSCallback回调函数是在WS收到数据时触发回调的。下面会用插件,所以我们不使用这种方式
a.Add<MyWebSocketPlugin>();//MyWebSocketPlugin是继承自WebSocketPluginBase的插件。
}))
.Start();
service.Logger.Info("Http服务器已启动");
service.Logger.Info("连接url:ws://127.0.0.1:7789/ws?token=123");
WebSocketClient myWSClient = new WebSocketClient();
myWSClient.Setup(new TouchSocketConfig()
.SetRemoteIPHost("ws://127.0.0.1:7789/ws?token=123")
.ConfigureContainer(a =>
{
a.AddConsoleLogger();
}));
var result = myWSClient.TryConnect();
myWSClient.Logger.Info(result.ToString());
}
}
public class MyServer : RpcServer
{
private readonly ILog m_logger;
public MyServer(ILog logger)
{
this.m_logger = logger;
}
[WebApi(HttpMethodType.GET, MethodFlags = MethodFlags.IncludeCallContext)]
public void ConnectWS(IWebApiCallContext callContext, string token)
{
if (token != "123")
{
callContext.HttpContext.Response
.SetStatus("400", "口令不正确")
.Answer();
return;
}
//下面进行连接
if (callContext.Caller is HttpSocketClient socketClient)
{
if (socketClient.SwitchProtocolToWebSocket(callContext.HttpContext))
{
m_logger.Info("WS通过WebApi连接");
}
}
}
}
class MyWebSocketPlugin : WebSocketPluginBase<HttpSocketClient>
{
protected override void OnHandshaking(HttpSocketClient client, HttpContextEventArgs e)
{
if (e.Context.Request.Query["token"] != "123")
{
e.IsPermitOperation = false; //参数不符合,直接拒绝
e.Handled = true;//表示该条消息已被本插件处理,不需要在向其他插件投递了。
return;
//或者直接回复,此处部分和http操作一致。
e.Context.Response
.SetStatus("400", "口令不正确")
.Answer();
}
base.OnHandshaking(client, e);
}
protected override void OnHandleWSDataFrame(HttpSocketClient client, WSDataFrameEventArgs e)
{
if (e.DataFrame.Opcode == WSDataType.Text)//文本数据
{
client.Logger.Info($"收到信息:{e.DataFrame.ToText()}");
}
else if (e.DataFrame.Opcode == WSDataType.Binary)//二进制
{
byte[] data = e.DataFrame.PayloadData.ToArray();
}
}
}
}
\ No newline at end of file
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<OutputType>Exe</OutputType>
<TargetFramework>net6.0</TargetFramework>
<ImplicitUsings>enable</ImplicitUsings>
<Nullable>enable</Nullable>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="TouchSocket" Version="1.2.12" />
</ItemGroup>
</Project>
...@@ -6,7 +6,7 @@ ...@@ -6,7 +6,7 @@
</PropertyGroup> </PropertyGroup>
<ItemGroup> <ItemGroup>
<PackageReference Include="TouchSocket" Version="1.2.10" /> <PackageReference Include="TouchSocket" Version="1.2.12" />
</ItemGroup> </ItemGroup>
</Project> </Project>
...@@ -4,6 +4,6 @@ ...@@ -4,6 +4,6 @@
<TargetFramework>net6.0</TargetFramework> <TargetFramework>net6.0</TargetFramework>
</PropertyGroup> </PropertyGroup>
<ItemGroup> <ItemGroup>
<PackageReference Include="TouchSocket" Version="1.2.10" /> <PackageReference Include="TouchSocket" Version="1.2.12" />
</ItemGroup> </ItemGroup>
</Project> </Project>
\ No newline at end of file
...@@ -6,7 +6,7 @@ ...@@ -6,7 +6,7 @@
</PropertyGroup> </PropertyGroup>
<ItemGroup> <ItemGroup>
<PackageReference Include="TouchSocket" Version="1.2.10" /> <PackageReference Include="TouchSocket" Version="1.2.12" />
</ItemGroup> </ItemGroup>
</Project> </Project>
...@@ -6,6 +6,6 @@ ...@@ -6,6 +6,6 @@
<ImplicitUsings>enable</ImplicitUsings> <ImplicitUsings>enable</ImplicitUsings>
</PropertyGroup> </PropertyGroup>
<ItemGroup> <ItemGroup>
<PackageReference Include="TouchSocket" Version="1.2.10" /> <PackageReference Include="TouchSocket" Version="1.2.12" />
</ItemGroup> </ItemGroup>
</Project> </Project>
...@@ -6,6 +6,6 @@ ...@@ -6,6 +6,6 @@
<UseWindowsForms>true</UseWindowsForms> <UseWindowsForms>true</UseWindowsForms>
</PropertyGroup> </PropertyGroup>
<ItemGroup> <ItemGroup>
<PackageReference Include="TouchSocketPro" Version="1.2.16" /> <PackageReference Include="TouchSocketPro" Version="1.2.19" />
</ItemGroup> </ItemGroup>
</Project> </Project>
\ No newline at end of file
...@@ -6,6 +6,6 @@ ...@@ -6,6 +6,6 @@
</PropertyGroup> </PropertyGroup>
<ItemGroup> <ItemGroup>
<PackageReference Include="TouchSocketPro" Version="1.2.16" /> <PackageReference Include="TouchSocketPro" Version="1.2.19" />
</ItemGroup> </ItemGroup>
</Project> </Project>
...@@ -4,13 +4,13 @@ ...@@ -4,13 +4,13 @@
<meta charset="UTF-8"> <meta charset="UTF-8">
<meta name="generator" content="Docusaurus v2.3.1"> <meta name="generator" content="Docusaurus v2.3.1">
<title data-rh="true">Page Not Found | TouchSocket</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://rrqm_home.gitee.io/touchsocket/404.html"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docusaurus_tag" content="default"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" name="docsearch:docusaurus_tag" content="default"><meta data-rh="true" property="og:title" content="Page Not Found | TouchSocket"><link data-rh="true" rel="icon" href="/touchsocket/img/favicon.ico"><link data-rh="true" rel="canonical" href="https://rrqm_home.gitee.io/touchsocket/404.html"><link data-rh="true" rel="alternate" href="https://rrqm_home.gitee.io/touchsocket/404.html" hreflang="en"><link data-rh="true" rel="alternate" href="https://rrqm_home.gitee.io/touchsocket/404.html" hreflang="x-default"><link rel="stylesheet" href="/touchsocket/assets/css/styles.d72046aa.css"> <title data-rh="true">Page Not Found | TouchSocket</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://rrqm_home.gitee.io/touchsocket/404.html"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docusaurus_tag" content="default"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" name="docsearch:docusaurus_tag" content="default"><meta data-rh="true" property="og:title" content="Page Not Found | TouchSocket"><link data-rh="true" rel="icon" href="/touchsocket/img/favicon.ico"><link data-rh="true" rel="canonical" href="https://rrqm_home.gitee.io/touchsocket/404.html"><link data-rh="true" rel="alternate" href="https://rrqm_home.gitee.io/touchsocket/404.html" hreflang="en"><link data-rh="true" rel="alternate" href="https://rrqm_home.gitee.io/touchsocket/404.html" hreflang="x-default"><link rel="stylesheet" href="/touchsocket/assets/css/styles.d72046aa.css">
<link rel="preload" href="/touchsocket/assets/js/runtime~main.2f749209.js" as="script"> <link rel="preload" href="/touchsocket/assets/js/runtime~main.4d96ddc9.js" as="script">
<link rel="preload" href="/touchsocket/assets/js/main.53d0b925.js" as="script"> <link rel="preload" href="/touchsocket/assets/js/main.66ba2a18.js" as="script">
</head> </head>
<body class="navigation-with-keyboard"> <body class="navigation-with-keyboard">
<script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus"> <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top navbarHideable_m1mJ"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2" d="M4 7h22M4 15h22M4 23h22"></path></svg></button><a class="navbar__brand" href="/touchsocket/"><div class="navbar__logo"><img src="/touchsocket/img/TouchSocketlogo.png" alt="TouchSocket Logo" class="themedImage_ToTc themedImage--light_HNdA"><img src="/touchsocket/img/TouchSocketlogo.png" alt="TouchSocket Logo" class="themedImage_ToTc themedImage--dark_i4oU"></div><b class="navbar__title text--truncate">TouchSocket</b></a><a class="navbar__item navbar__link" href="/touchsocket/docs">文档</a><a class="navbar__item navbar__link" href="/touchsocket/docs/upgrade">更新日志</a></div><div class="navbar__items navbar__items--right"><div class="navbar__item dropdown dropdown--hoverable dropdown--right"><a href="#" aria-haspopup="true" aria-expanded="false" role="button" class="navbar__link">源码</a><ul class="dropdown__menu"><li><a href="https://gitee.com/rrqm_home/touchsocket" target="_blank" rel="noopener noreferrer" class="dropdown__link">Gitee(主库)<svg width="12" height="12" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li><a href="https://github.com/RRQM/TouchSocket" target="_blank" rel="noopener noreferrer" class="dropdown__link">GitHub<svg width="12" height="12" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li><a href="https://www.nuget.org/profiles/rrqm" target="_blank" rel="noopener noreferrer" class="dropdown__link">Nuget<svg width="12" height="12" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li></ul></div><a href="https://gitee.com/dotnetchina" target="_blank" rel="noopener noreferrer" class="navbar__item navbar__link">社区<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a><div class="toggle_vylO colorModeToggle_DEke"><button class="clean-btn toggleButton_gllP toggleButtonDisabled_aARS" type="button" disabled="" title="Switch between dark and light mode (currently light mode)" aria-label="Switch between dark and light mode (currently light mode)" aria-live="polite"><svg viewBox="0 0 24 24" width="24" height="24" class="lightToggleIcon_pyhR"><path fill="currentColor" d="M12,9c1.65,0,3,1.35,3,3s-1.35,3-3,3s-3-1.35-3-3S10.35,9,12,9 M12,7c-2.76,0-5,2.24-5,5s2.24,5,5,5s5-2.24,5-5 S14.76,7,12,7L12,7z M2,13l2,0c0.55,0,1-0.45,1-1s-0.45-1-1-1l-2,0c-0.55,0-1,0.45-1,1S1.45,13,2,13z M20,13l2,0c0.55,0,1-0.45,1-1 s-0.45-1-1-1l-2,0c-0.55,0-1,0.45-1,1S19.45,13,20,13z M11,2v2c0,0.55,0.45,1,1,1s1-0.45,1-1V2c0-0.55-0.45-1-1-1S11,1.45,11,2z M11,20v2c0,0.55,0.45,1,1,1s1-0.45,1-1v-2c0-0.55-0.45-1-1-1C11.45,19,11,19.45,11,20z M5.99,4.58c-0.39-0.39-1.03-0.39-1.41,0 c-0.39,0.39-0.39,1.03,0,1.41l1.06,1.06c0.39,0.39,1.03,0.39,1.41,0s0.39-1.03,0-1.41L5.99,4.58z M18.36,16.95 c-0.39-0.39-1.03-0.39-1.41,0c-0.39,0.39-0.39,1.03,0,1.41l1.06,1.06c0.39,0.39,1.03,0.39,1.41,0c0.39-0.39,0.39-1.03,0-1.41 L18.36,16.95z M19.42,5.99c0.39-0.39,0.39-1.03,0-1.41c-0.39-0.39-1.03-0.39-1.41,0l-1.06,1.06c-0.39,0.39-0.39,1.03,0,1.41 s1.03,0.39,1.41,0L19.42,5.99z M7.05,18.36c0.39-0.39,0.39-1.03,0-1.41c-0.39-0.39-1.03-0.39-1.41,0l-1.06,1.06 c-0.39,0.39-0.39,1.03,0,1.41s1.03,0.39,1.41,0L7.05,18.36z"></path></svg><svg viewBox="0 0 24 24" width="24" height="24" class="darkToggleIcon_wfgR"><path fill="currentColor" d="M9.37,5.51C9.19,6.15,9.1,6.82,9.1,7.5c0,4.08,3.32,7.4,7.4,7.4c0.68,0,1.35-0.09,1.99-0.27C17.45,17.19,14.93,19,12,19 c-3.86,0-7-3.14-7-7C5,9.07,6.81,6.55,9.37,5.51z M12,3c-4.97,0-9,4.03-9,9s4.03,9,9,9s9-4.03,9-9c0-0.46-0.04-0.92-0.1-1.36 c-0.98,1.37-2.58,2.26-4.4,2.26c-2.98,0-5.4-2.42-5.4-5.4c0-1.81,0.89-3.42,2.26-4.4C12.92,3.04,12.46,3,12,3L12,3z"></path></svg></button></div><div class="searchBox_ZlJk"><div class="navbar__search searchBarContainer_NW3z"><input placeholder="Search" aria-label="Search" class="navbar__search-input"><div class="loadingRing_RJI3 searchBarLoadingRing_YnHq"><div></div><div></div><div></div><div></div></div><div class="searchHintContainer_Pkmr"><kbd class="searchHint_iIMx">ctrl</kbd><kbd class="searchHint_iIMx">K</kbd></div></div></div></div></div><div role="presentation" class="navbar-sidebar__backdrop"></div></nav><div id="docusaurus_skipToContent_fallback" class="main-wrapper mainWrapper_z2l0"><main class="container margin-vert--xl"><div class="row"><div class="col col--6 col--offset-3"><h1 class="hero__title">Page Not Found</h1><p>We could not find what you were looking for.</p><p>Please contact the owner of the site that linked you to the original URL and let them know their link is broken.</p></div></div></main></div><footer class="footer footer--dark"><div class="container container-fluid"><div class="row footer__links"><div class="col footer__col"><div class="footer__title">文档</div><ul class="footer__items clean-list"><li class="footer__item"><a class="footer__link-item" href="/touchsocket/docs">入门</a></li><li class="footer__item"><a class="footer__link-item" href="/touchsocket/docs">手册</a></li></ul></div><div class="col footer__col"><div class="footer__title">社区</div><ul class="footer__items clean-list"><li class="footer__item"><a href="https://gitee.com/rrqm_home/touchsocket/issues" target="_blank" rel="noopener noreferrer" class="footer__link-item">讨论<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li class="footer__item"><a href="https://gitee.com/rrqm_home/touchsocket/board" target="_blank" rel="noopener noreferrer" class="footer__link-item">看板<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li></ul></div><div class="col footer__col"><div class="footer__title">更多</div><ul class="footer__items clean-list"><li class="footer__item"><a href="https://gitee.com/rrqm_home/touchsocket" target="_blank" rel="noopener noreferrer" class="footer__link-item">仓库<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li></ul></div></div><div class="footer__bottom text--center"><div class="footer__copyright">Copyright © 2020-2023 若汝棋茗.</div></div></div></footer></div> <div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top navbarHideable_m1mJ"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2" d="M4 7h22M4 15h22M4 23h22"></path></svg></button><a class="navbar__brand" href="/touchsocket/"><div class="navbar__logo"><img src="/touchsocket/img/TouchSocketlogo.png" alt="TouchSocket Logo" class="themedImage_ToTc themedImage--light_HNdA"><img src="/touchsocket/img/TouchSocketlogo.png" alt="TouchSocket Logo" class="themedImage_ToTc themedImage--dark_i4oU"></div><b class="navbar__title text--truncate">TouchSocket</b></a><a class="navbar__item navbar__link" href="/touchsocket/docs">文档</a><a class="navbar__item navbar__link" href="/touchsocket/docs/upgrade">更新日志</a></div><div class="navbar__items navbar__items--right"><div class="navbar__item dropdown dropdown--hoverable dropdown--right"><a href="#" aria-haspopup="true" aria-expanded="false" role="button" class="navbar__link">源码</a><ul class="dropdown__menu"><li><a href="https://gitee.com/rrqm_home/touchsocket" target="_blank" rel="noopener noreferrer" class="dropdown__link">Gitee(主库)<svg width="12" height="12" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li><a href="https://github.com/RRQM/TouchSocket" target="_blank" rel="noopener noreferrer" class="dropdown__link">GitHub<svg width="12" height="12" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li><a href="https://www.nuget.org/profiles/rrqm" target="_blank" rel="noopener noreferrer" class="dropdown__link">Nuget<svg width="12" height="12" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li></ul></div><a href="https://gitee.com/dotnetchina" target="_blank" rel="noopener noreferrer" class="navbar__item navbar__link">社区<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a><div class="toggle_vylO colorModeToggle_DEke"><button class="clean-btn toggleButton_gllP toggleButtonDisabled_aARS" type="button" disabled="" title="Switch between dark and light mode (currently light mode)" aria-label="Switch between dark and light mode (currently light mode)" aria-live="polite"><svg viewBox="0 0 24 24" width="24" height="24" class="lightToggleIcon_pyhR"><path fill="currentColor" d="M12,9c1.65,0,3,1.35,3,3s-1.35,3-3,3s-3-1.35-3-3S10.35,9,12,9 M12,7c-2.76,0-5,2.24-5,5s2.24,5,5,5s5-2.24,5-5 S14.76,7,12,7L12,7z M2,13l2,0c0.55,0,1-0.45,1-1s-0.45-1-1-1l-2,0c-0.55,0-1,0.45-1,1S1.45,13,2,13z M20,13l2,0c0.55,0,1-0.45,1-1 s-0.45-1-1-1l-2,0c-0.55,0-1,0.45-1,1S19.45,13,20,13z M11,2v2c0,0.55,0.45,1,1,1s1-0.45,1-1V2c0-0.55-0.45-1-1-1S11,1.45,11,2z M11,20v2c0,0.55,0.45,1,1,1s1-0.45,1-1v-2c0-0.55-0.45-1-1-1C11.45,19,11,19.45,11,20z M5.99,4.58c-0.39-0.39-1.03-0.39-1.41,0 c-0.39,0.39-0.39,1.03,0,1.41l1.06,1.06c0.39,0.39,1.03,0.39,1.41,0s0.39-1.03,0-1.41L5.99,4.58z M18.36,16.95 c-0.39-0.39-1.03-0.39-1.41,0c-0.39,0.39-0.39,1.03,0,1.41l1.06,1.06c0.39,0.39,1.03,0.39,1.41,0c0.39-0.39,0.39-1.03,0-1.41 L18.36,16.95z M19.42,5.99c0.39-0.39,0.39-1.03,0-1.41c-0.39-0.39-1.03-0.39-1.41,0l-1.06,1.06c-0.39,0.39-0.39,1.03,0,1.41 s1.03,0.39,1.41,0L19.42,5.99z M7.05,18.36c0.39-0.39,0.39-1.03,0-1.41c-0.39-0.39-1.03-0.39-1.41,0l-1.06,1.06 c-0.39,0.39-0.39,1.03,0,1.41s1.03,0.39,1.41,0L7.05,18.36z"></path></svg><svg viewBox="0 0 24 24" width="24" height="24" class="darkToggleIcon_wfgR"><path fill="currentColor" d="M9.37,5.51C9.19,6.15,9.1,6.82,9.1,7.5c0,4.08,3.32,7.4,7.4,7.4c0.68,0,1.35-0.09,1.99-0.27C17.45,17.19,14.93,19,12,19 c-3.86,0-7-3.14-7-7C5,9.07,6.81,6.55,9.37,5.51z M12,3c-4.97,0-9,4.03-9,9s4.03,9,9,9s9-4.03,9-9c0-0.46-0.04-0.92-0.1-1.36 c-0.98,1.37-2.58,2.26-4.4,2.26c-2.98,0-5.4-2.42-5.4-5.4c0-1.81,0.89-3.42,2.26-4.4C12.92,3.04,12.46,3,12,3L12,3z"></path></svg></button></div><div class="searchBox_ZlJk"><div class="navbar__search searchBarContainer_NW3z"><input placeholder="Search" aria-label="Search" class="navbar__search-input"><div class="loadingRing_RJI3 searchBarLoadingRing_YnHq"><div></div><div></div><div></div><div></div></div><div class="searchHintContainer_Pkmr"><kbd class="searchHint_iIMx">ctrl</kbd><kbd class="searchHint_iIMx">K</kbd></div></div></div></div></div><div role="presentation" class="navbar-sidebar__backdrop"></div></nav><div id="docusaurus_skipToContent_fallback" class="main-wrapper mainWrapper_z2l0"><main class="container margin-vert--xl"><div class="row"><div class="col col--6 col--offset-3"><h1 class="hero__title">Page Not Found</h1><p>We could not find what you were looking for.</p><p>Please contact the owner of the site that linked you to the original URL and let them know their link is broken.</p></div></div></main></div><footer class="footer footer--dark"><div class="container container-fluid"><div class="row footer__links"><div class="col footer__col"><div class="footer__title">文档</div><ul class="footer__items clean-list"><li class="footer__item"><a class="footer__link-item" href="/touchsocket/docs">入门</a></li><li class="footer__item"><a class="footer__link-item" href="/touchsocket/docs">手册</a></li></ul></div><div class="col footer__col"><div class="footer__title">社区</div><ul class="footer__items clean-list"><li class="footer__item"><a href="https://gitee.com/rrqm_home/touchsocket/issues" target="_blank" rel="noopener noreferrer" class="footer__link-item">讨论<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li class="footer__item"><a href="https://gitee.com/rrqm_home/touchsocket/board" target="_blank" rel="noopener noreferrer" class="footer__link-item">看板<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li></ul></div><div class="col footer__col"><div class="footer__title">更多</div><ul class="footer__items clean-list"><li class="footer__item"><a href="https://gitee.com/rrqm_home/touchsocket" target="_blank" rel="noopener noreferrer" class="footer__link-item">仓库<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li></ul></div></div><div class="footer__bottom text--center"><div class="footer__copyright">Copyright © 2020-2023 若汝棋茗.</div></div></div></footer></div>
<script src="/touchsocket/assets/js/runtime~main.2f749209.js"></script> <script src="/touchsocket/assets/js/runtime~main.4d96ddc9.js"></script>
<script src="/touchsocket/assets/js/main.53d0b925.js"></script> <script src="/touchsocket/assets/js/main.66ba2a18.js"></script>
</body> </body>
</html> </html>
\ No newline at end of file
"use strict";(self.webpackChunktouchsocket=self.webpackChunktouchsocket||[]).push([[2362],{5745:e=>{e.exports=JSON.parse('{"name":"docusaurus-plugin-content-pages","id":"default"}')}}]); "use strict";(self.webpackChunktouchsocket=self.webpackChunktouchsocket||[]).push([[7987],{5745:e=>{e.exports=JSON.parse('{"name":"docusaurus-plugin-content-pages","id":"default"}')}}]);
\ No newline at end of file \ No newline at end of file
"use strict";(self.webpackChunktouchsocket=self.webpackChunktouchsocket||[]).push([[2264],{3905:(t,e,r)=>{r.d(e,{Zo:()=>s,kt:()=>d});var n=r(7294);function a(t,e,r){return e in t?Object.defineProperty(t,e,{value:r,enumerable:!0,configurable:!0,writable:!0}):t[e]=r,t}function o(t,e){var r=Object.keys(t);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(t);e&&(n=n.filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable}))),r.push.apply(r,n)}return r}function p(t){for(var e=1;e<arguments.length;e++){var r=null!=arguments[e]?arguments[e]:{};e%2?o(Object(r),!0).forEach((function(e){a(t,e,r[e])})):Object.getOwnPropertyDescriptors?Object.defineProperties(t,Object.getOwnPropertyDescriptors(r)):o(Object(r)).forEach((function(e){Object.defineProperty(t,e,Object.getOwnPropertyDescriptor(r,e))}))}return t}function l(t,e){if(null==t)return{};var r,n,a=function(t,e){if(null==t)return{};var r,n,a={},o=Object.keys(t);for(n=0;n<o.length;n++)r=o[n],e.indexOf(r)>=0||(a[r]=t[r]);return a}(t,e);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(t);for(n=0;n<o.length;n++)r=o[n],e.indexOf(r)>=0||Object.prototype.propertyIsEnumerable.call(t,r)&&(a[r]=t[r])}return a}var i=n.createContext({}),c=function(t){var e=n.useContext(i),r=e;return t&&(r="function"==typeof t?t(e):p(p({},e),t)),r},s=function(t){var e=c(t.components);return n.createElement(i.Provider,{value:e},t.children)},u={inlineCode:"code",wrapper:function(t){var e=t.children;return n.createElement(n.Fragment,{},e)}},m=n.forwardRef((function(t,e){var r=t.components,a=t.mdxType,o=t.originalType,i=t.parentName,s=l(t,["components","mdxType","originalType","parentName"]),m=c(r),d=a,k=m["".concat(i,".").concat(d)]||m[d]||u[d]||o;return r?n.createElement(k,p(p({ref:e},s),{},{components:r})):n.createElement(k,p({ref:e},s))}));function d(t,e){var r=arguments,a=e&&e.mdxType;if("string"==typeof t||a){var o=r.length,p=new Array(o);p[0]=m;var l={};for(var i in e)hasOwnProperty.call(e,i)&&(l[i]=e[i]);l.originalType=t,l.mdxType="string"==typeof t?t:a,p[1]=l;for(var c=2;c<o;c++)p[c]=r[c];return n.createElement.apply(null,p)}return n.createElement.apply(null,r)}m.displayName="MDXCreateElement"},2715:(t,e,r)=>{r.r(e),r.d(e,{assets:()=>i,contentTitle:()=>p,default:()=>u,frontMatter:()=>o,metadata:()=>l,toc:()=>c});var n=r(7462),a=(r(7294),r(3905));const o={id:"generateproxydescription",title:"\u751f\u6210\u3001\u83b7\u53d6\u4ee3\u7406"},p=void 0,l={unversionedId:"generateproxydescription",id:"generateproxydescription",title:"\u751f\u6210\u3001\u83b7\u53d6\u4ee3\u7406",description:"\u4e00\u3001\u8bf4\u660e",source:"@site/docs/generateproxydescription.mdx",sourceDirName:".",slug:"/generateproxydescription",permalink:"/touchsocket/docs/generateproxydescription",draft:!1,editUrl:"https://gitee.com/rrqm_home/touchsocket/tree/master/handbook/docs/generateproxydescription.mdx",tags:[],version:"current",frontMatter:{id:"generateproxydescription",title:"\u751f\u6210\u3001\u83b7\u53d6\u4ee3\u7406"},sidebar:"docs",previous:{title:"\u57fa\u4e8eWS\u7684JsonRpc",permalink:"/touchsocket/docs/wsjsonrpc"},next:{title:"\u4ece\u670d\u52a1\u7aef\u751f\u6210\u4ee3\u7406",permalink:"/touchsocket/docs/generateproxyfromserver"}},i={},c=[{value:"\u4e00\u3001\u8bf4\u660e",id:"\u4e00\u8bf4\u660e",level:2},{value:"\u4e8c\u3001\u670d\u52a1\u7aef\u6e90\u6587\u4ef6\u4ee3\u7406\u548c\u6e90\u4ee3\u7801\u751f\u6210\u63a5\u53e3\u4ee3\u7406",id:"\u4e8c\u670d\u52a1\u7aef\u6e90\u6587\u4ef6\u4ee3\u7406\u548c\u6e90\u4ee3\u7801\u751f\u6210\u63a5\u53e3\u4ee3\u7406",level:2},{value:"2.1 \u533a\u522b",id:"21-\u533a\u522b",level:3},{value:"2.2 \u573a\u666f\u5bf9\u6bd4",id:"22-\u573a\u666f\u5bf9\u6bd4",level:3}],s={toc:c};function u(t){let{components:e,...r}=t;return(0,a.kt)("wrapper",(0,n.Z)({},s,r,{components:e,mdxType:"MDXLayout"}),(0,a.kt)("h2",{id:"\u4e00\u8bf4\u660e"},"\u4e00\u3001\u8bf4\u660e"),(0,a.kt)("p",null,"\u4f7f\u7528rpc\u7684\u539f\u5219\u5c31\u662f\u50cf\u4f7f\u7528\u672c\u5730\u65b9\u6cd5\u4e00\u6837\uff0c\u8ba9\u5f00\u53d1\u8005\u611f\u89c9\u4e0d\u5230\u4efb\u4f55\u7684\u4e0d\u540c\u3002\u6240\u4ee5\u5c31\u5fc5\u987b\u628a\u670d\u52a1\u4ee3\u7406\u5230\u672c\u5730\uff0c\u5e38\u89c1\u7684\u65b9\u5f0f\u6709\u4e09\u79cd\uff0c",(0,a.kt)("strong",{parentName:"p"},"\u52a8\u6001\u4ee3\u7406\u63a5\u53e3"),"\uff0c",(0,a.kt)("strong",{parentName:"p"},"\u9759\u6001\u7ec7\u5165"),"\uff0c",(0,a.kt)("strong",{parentName:"p"},"\u9759\u6001\u7f16\u8bd1"),"\u3002\u4e09\u79cd\u65b9\u5f0f\u6b8a\u9014\u540c\u5f52\uff0c\u6700\u7ec8\u90fd\u662f\u6784\u5efa\u672c\u5730\u6570\u636e\u7ed3\u6784\uff0c\u7136\u540e\u548c\u8fdc\u7a0b\u901a\u4fe1\u3002\u4e09\u79cd\u65b9\u5f0f\u5404\u6709\u4f18\u7f3a\uff0c\u5177\u4f53\u5982\u4e0b\uff1a"),(0,a.kt)("table",null,(0,a.kt)("thead",{parentName:"table"},(0,a.kt)("tr",{parentName:"thead"},(0,a.kt)("th",{parentName:"tr",align:null},(0,a.kt)("strong",{parentName:"th"},"\u4f18\u7f3a\u70b9")),(0,a.kt)("th",{parentName:"tr",align:null},(0,a.kt)("strong",{parentName:"th"},"\u52a8\u6001\u4ee3\u7406\u63a5\u53e3")),(0,a.kt)("th",{parentName:"tr",align:null},(0,a.kt)("strong",{parentName:"th"},"\u9759\u6001\u7ec7\u5165\uff08\u6e90\u4ee3\u7801\u751f\u6210\uff09")),(0,a.kt)("th",{parentName:"tr",align:null},(0,a.kt)("strong",{parentName:"th"},"\u9759\u6001\u7f16\u8bd1")))),(0,a.kt)("tbody",{parentName:"table"},(0,a.kt)("tr",{parentName:"tbody"},(0,a.kt)("td",{parentName:"tr",align:null},(0,a.kt)("strong",{parentName:"td"},"\u4f18\u70b9")),(0,a.kt)("td",{parentName:"tr",align:null},"\u52a8\u6001\u6784\u5efa\u7c7b\uff0c\u7075\u6d3b\u3001\u9002\u5e94\u6027\u5f3a\u3002"),(0,a.kt)("td",{parentName:"tr",align:null},"\u9759\u6001\u4ee3\u7801\u751f\u6210\uff0c\u81ea\u5b9a\u4e49\u7c7b\u53c2\u6570\u81ea\u52a8\u751f\u6210\uff0c\u4fee\u6539\u8f83\u7075\u6d3b\uff0c\u8c03\u7528\u6548\u7387\u9ad8"),(0,a.kt)("td",{parentName:"tr",align:null},"\u81ea\u5b9a\u4e49\u7c7b\u53c2\u6570\u81ea\u52a8\u751f\u6210\uff0c\u5bc6\u5c01\u6027\u5f3a\uff0c\u5b89\u5168\u6027\u9ad8\uff0c\u8c03\u7528\u6548\u7387\u9ad8\u3002")),(0,a.kt)("tr",{parentName:"tbody"},(0,a.kt)("td",{parentName:"tr",align:null},(0,a.kt)("strong",{parentName:"td"},"\u7f3a\u70b9")),(0,a.kt)("td",{parentName:"tr",align:null},"\u8c03\u7528\u6548\u7387\u8f83\u4f4e\uff0c\u81ea\u5b9a\u4e49\u7c7b\u53c2\u6570\u987b\u81ea\u884c\u6784\u5efa\uff0c\u5b9e\u73b0\u987bIL\u652f\u6301\uff0c\u5bf9\u8c03\u7528\u5e73\u53f0\u6709\u8981\u6c42\uff0c\u4f8b\u5982\uff1aIOS\u4e0d\u5141\u8bb8\u52a8\u6001\u7c7b\u751f\u6210\uff0c\u5219\u4e0d\u53ef\u4f7f\u7528\u3002"),(0,a.kt)("td",{parentName:"tr",align:null},"\u9879\u76ee\u4ee3\u7801\u7ba1\u7406\u96be\u7edf\u4e00\uff0c\u5f3a\u8feb\u75c7\u731d\u6b7b"),(0,a.kt)("td",{parentName:"tr",align:null},"\u670d\u52a1\u4e00\u65e6\u6709\u7834\u574f\u6027\u5347\u7ea7\uff0c\u5219\u5fc5\u987b\u91cd\u65b0\u66ff\u6362dll\uff0c\u7075\u6d3b\u6027\u51e0\u4e4e\u4e3a0\u3002")))),(0,a.kt)("admonition",{title:"\u63d0\u793a",type:"tip"},(0,a.kt)("p",{parentName:"admonition"},"\u8be5\u5185\u5bb9\uff0c\u5bf9 ",(0,a.kt)("a",{parentName:"p",href:"/touchsocket/docs/touchrpcdescription"},"TouchRpc"),"\u3001",(0,a.kt)("a",{parentName:"p",href:"/touchsocket/docs/jsonrpcdescription"},"JsonRpc"),"\u3001",(0,a.kt)("a",{parentName:"p",href:"/touchsocket/docs/xmlrpcdescription"},"XmlRpc"),"\u3001",(0,a.kt)("a",{parentName:"p",href:"/touchsocket/docs/webapidescription"},"WebApi"),"\u5747\u9002\u7528\u3002")),(0,a.kt)("h2",{id:"\u4e8c\u670d\u52a1\u7aef\u6e90\u6587\u4ef6\u4ee3\u7406\u548c\u6e90\u4ee3\u7801\u751f\u6210\u63a5\u53e3\u4ee3\u7406"},"\u4e8c\u3001\u670d\u52a1\u7aef\u6e90\u6587\u4ef6\u4ee3\u7406\u548c\u6e90\u4ee3\u7801\u751f\u6210\u63a5\u53e3\u4ee3\u7406"),(0,a.kt)("h3",{id:"21-\u533a\u522b"},"2.1 \u533a\u522b"),(0,a.kt)("p",null,"\u5f00\u6e90\u7248\u4e0d\u652f\u6301",(0,a.kt)("strong",{parentName:"p"},"\u6e90\u4ee3\u7801\u751f\u6210\u63a5\u53e3\u4ee3\u7406"),"\uff0c\u4f01\u4e1a\u7248\u5168\u90e8\u652f\u6301\u3002"),(0,a.kt)("h3",{id:"22-\u573a\u666f\u5bf9\u6bd4"},"2.2 \u573a\u666f\u5bf9\u6bd4"),(0,a.kt)("p",null,"\u5047\u8bbe\u4e00\u4e2a\u573a\u666f\uff0c\u4f60\u9700\u8981\u5f00\u53d1\u670d\u52a1\u5668\u548c\u5ba2\u6237\u7aef\u3002"),(0,a.kt)("p",null,"\u8fd9\u65f6\uff0c\u5982\u679c\u4f60\u4f7f\u7528",(0,a.kt)("strong",{parentName:"p"},"\u670d\u52a1\u7aef\u6e90\u6587\u4ef6\u4ee3\u7406"),"\uff0c\u5219\u9700\u8981\u505a\uff1a"),(0,a.kt)("ol",null,(0,a.kt)("li",{parentName:"ol"},"\u5b9a\u4e49\u4e00\u4e2a\u670d\u52a1\u9879\u76ee\uff08\u53ef\u4ee5\u5199\u63a5\u53e3\uff0c\u4e5f\u53ef\u4ee5\u76f4\u63a5\u5199\u903b\u8f91\uff0c\u5f53\u7136\u4e5f\u53ef\u4ee5\u5206\u6210\u4e24\u4e2a\u9879\u76ee\uff09"),(0,a.kt)("li",{parentName:"ol"},"\u7f16\u8bd1\u9879\u76ee\uff0c\u7136\u540e\u5bfc\u51fa\u4ee3\u7406\u6e90\u4ee3\u7801\u3002"),(0,a.kt)("li",{parentName:"ol"},"\u5c06\u5bfc\u51fa\u7684\u6e90\u4ee3\u7801\u5f15\u7528\u5230\u5ba2\u6237\u7aef")),(0,a.kt)("p",null,"\u5982\u679c\u4f60\u4f7f\u7528",(0,a.kt)("strong",{parentName:"p"},"\u6e90\u4ee3\u7801\u751f\u6210\u63a5\u53e3\u4ee3\u7406"),"\uff0c\u5219\u9700\u8981\u505a\uff1a"),(0,a.kt)("ol",null,(0,a.kt)("li",{parentName:"ol"},"\u5355\u72ec\u5b9a\u4e49\u4e00\u4e2a\u63a5\u53e3\u9879\u76ee\uff0c\u7528\u4e8e\u5b58\u653e\u670d\u52a1\u63a5\u53e3\uff0c\u548c\u63a5\u53e3\u6240\u9700\u7684\u53c2\u6570\u7c7b\u578b\u5b9e\u4f53\u3002"),(0,a.kt)("li",{parentName:"ol"},"\u518d\u5b9a\u4e49\u4e00\u4e2a\u63a5\u53e3\u5b9e\u73b0\u9879\u76ee\uff0c\u7528\u4e8e\u5b9e\u73b0\u670d\u52a1\u63a5\u53e3\u3002"),(0,a.kt)("li",{parentName:"ol"},"\u7f16\u8bd1\u63a5\u53e3\u9879\u76ee\uff0c\u5c06\u7f16\u8bd1\u597d\u7684dll\uff0c\u5f15\u7528\u5230\u9700\u8981\u7684\u5ba2\u6237\u7aef")),(0,a.kt)("admonition",{title:"\u6548\u679c",type:"tip"},(0,a.kt)("p",{parentName:"admonition"},"\u4e0a\u8ff0\u6b65\u9aa4\u5982\u679c\u5168\u90e8\u5b8c\u6210\uff0c\u4e24\u79cd\u65b9\u5f0f\u5728\u5ba2\u6237\u7aef\u7684\u4f7f\u7528\u6548\u679c\u57fa\u672c\u5b8c\u5168\u4e00\u6837\u3002")))}u.isMDXComponent=!0}}]);
\ No newline at end of file
"use strict";(self.webpackChunktouchsocket=self.webpackChunktouchsocket||[]).push([[2264],{3905:(t,e,r)=>{r.d(e,{Zo:()=>s,kt:()=>m});var n=r(7294);function a(t,e,r){return e in t?Object.defineProperty(t,e,{value:r,enumerable:!0,configurable:!0,writable:!0}):t[e]=r,t}function o(t,e){var r=Object.keys(t);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(t);e&&(n=n.filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable}))),r.push.apply(r,n)}return r}function p(t){for(var e=1;e<arguments.length;e++){var r=null!=arguments[e]?arguments[e]:{};e%2?o(Object(r),!0).forEach((function(e){a(t,e,r[e])})):Object.getOwnPropertyDescriptors?Object.defineProperties(t,Object.getOwnPropertyDescriptors(r)):o(Object(r)).forEach((function(e){Object.defineProperty(t,e,Object.getOwnPropertyDescriptor(r,e))}))}return t}function l(t,e){if(null==t)return{};var r,n,a=function(t,e){if(null==t)return{};var r,n,a={},o=Object.keys(t);for(n=0;n<o.length;n++)r=o[n],e.indexOf(r)>=0||(a[r]=t[r]);return a}(t,e);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(t);for(n=0;n<o.length;n++)r=o[n],e.indexOf(r)>=0||Object.prototype.propertyIsEnumerable.call(t,r)&&(a[r]=t[r])}return a}var i=n.createContext({}),c=function(t){var e=n.useContext(i),r=e;return t&&(r="function"==typeof t?t(e):p(p({},e),t)),r},s=function(t){var e=c(t.components);return n.createElement(i.Provider,{value:e},t.children)},d={inlineCode:"code",wrapper:function(t){var e=t.children;return n.createElement(n.Fragment,{},e)}},u=n.forwardRef((function(t,e){var r=t.components,a=t.mdxType,o=t.originalType,i=t.parentName,s=l(t,["components","mdxType","originalType","parentName"]),u=c(r),m=a,k=u["".concat(i,".").concat(m)]||u[m]||d[m]||o;return r?n.createElement(k,p(p({ref:e},s),{},{components:r})):n.createElement(k,p({ref:e},s))}));function m(t,e){var r=arguments,a=e&&e.mdxType;if("string"==typeof t||a){var o=r.length,p=new Array(o);p[0]=u;var l={};for(var i in e)hasOwnProperty.call(e,i)&&(l[i]=e[i]);l.originalType=t,l.mdxType="string"==typeof t?t:a,p[1]=l;for(var c=2;c<o;c++)p[c]=r[c];return n.createElement.apply(null,p)}return n.createElement.apply(null,r)}u.displayName="MDXCreateElement"},2715:(t,e,r)=>{r.r(e),r.d(e,{assets:()=>i,contentTitle:()=>p,default:()=>d,frontMatter:()=>o,metadata:()=>l,toc:()=>c});var n=r(7462),a=(r(7294),r(3905));const o={id:"generateproxydescription",title:"\u751f\u6210\u3001\u83b7\u53d6\u4ee3\u7406"},p=void 0,l={unversionedId:"generateproxydescription",id:"generateproxydescription",title:"\u751f\u6210\u3001\u83b7\u53d6\u4ee3\u7406",description:"\u4e00\u3001\u8bf4\u660e",source:"@site/docs/generateproxydescription.mdx",sourceDirName:".",slug:"/generateproxydescription",permalink:"/touchsocket/docs/generateproxydescription",draft:!1,editUrl:"https://gitee.com/rrqm_home/touchsocket/tree/master/handbook/docs/generateproxydescription.mdx",tags:[],version:"current",lastUpdatedBy:"\u82e5\u6c5d\u68cb\u8317",lastUpdatedAt:1676382772,formattedLastUpdatedAt:"Feb 14, 2023",frontMatter:{id:"generateproxydescription",title:"\u751f\u6210\u3001\u83b7\u53d6\u4ee3\u7406"},sidebar:"docs",previous:{title:"\u57fa\u4e8eWS\u7684JsonRpc",permalink:"/touchsocket/docs/wsjsonrpc"},next:{title:"\u4ece\u670d\u52a1\u7aef\u751f\u6210\u4ee3\u7406",permalink:"/touchsocket/docs/generateproxyfromserver"}},i={},c=[{value:"\u4e00\u3001\u8bf4\u660e",id:"\u4e00\u8bf4\u660e",level:2},{value:"\u4e8c\u3001\u670d\u52a1\u7aef\u6e90\u6587\u4ef6\u4ee3\u7406\u548c\u6e90\u4ee3\u7801\u751f\u6210\u63a5\u53e3\u4ee3\u7406",id:"\u4e8c\u670d\u52a1\u7aef\u6e90\u6587\u4ef6\u4ee3\u7406\u548c\u6e90\u4ee3\u7801\u751f\u6210\u63a5\u53e3\u4ee3\u7406",level:2},{value:"2.1 \u533a\u522b",id:"21-\u533a\u522b",level:3},{value:"2.2 \u573a\u666f\u5bf9\u6bd4",id:"22-\u573a\u666f\u5bf9\u6bd4",level:3}],s={toc:c};function d(t){let{components:e,...r}=t;return(0,a.kt)("wrapper",(0,n.Z)({},s,r,{components:e,mdxType:"MDXLayout"}),(0,a.kt)("h2",{id:"\u4e00\u8bf4\u660e"},"\u4e00\u3001\u8bf4\u660e"),(0,a.kt)("p",null,"\u4f7f\u7528rpc\u7684\u539f\u5219\u5c31\u662f\u50cf\u4f7f\u7528\u672c\u5730\u65b9\u6cd5\u4e00\u6837\uff0c\u8ba9\u5f00\u53d1\u8005\u611f\u89c9\u4e0d\u5230\u4efb\u4f55\u7684\u4e0d\u540c\u3002\u6240\u4ee5\u5c31\u5fc5\u987b\u628a\u670d\u52a1\u4ee3\u7406\u5230\u672c\u5730\uff0c\u5e38\u89c1\u7684\u65b9\u5f0f\u6709\u4e09\u79cd\uff0c",(0,a.kt)("strong",{parentName:"p"},"\u52a8\u6001\u4ee3\u7406\u63a5\u53e3"),"\uff0c",(0,a.kt)("strong",{parentName:"p"},"\u9759\u6001\u7ec7\u5165"),"\uff0c",(0,a.kt)("strong",{parentName:"p"},"\u9759\u6001\u7f16\u8bd1"),"\u3002\u4e09\u79cd\u65b9\u5f0f\u6b8a\u9014\u540c\u5f52\uff0c\u6700\u7ec8\u90fd\u662f\u6784\u5efa\u672c\u5730\u6570\u636e\u7ed3\u6784\uff0c\u7136\u540e\u548c\u8fdc\u7a0b\u901a\u4fe1\u3002\u4e09\u79cd\u65b9\u5f0f\u5404\u6709\u4f18\u7f3a\uff0c\u5177\u4f53\u5982\u4e0b\uff1a"),(0,a.kt)("table",null,(0,a.kt)("thead",{parentName:"table"},(0,a.kt)("tr",{parentName:"thead"},(0,a.kt)("th",{parentName:"tr",align:null},(0,a.kt)("strong",{parentName:"th"},"\u4f18\u7f3a\u70b9")),(0,a.kt)("th",{parentName:"tr",align:null},(0,a.kt)("strong",{parentName:"th"},"\u52a8\u6001\u4ee3\u7406\u63a5\u53e3")),(0,a.kt)("th",{parentName:"tr",align:null},(0,a.kt)("strong",{parentName:"th"},"\u9759\u6001\u7ec7\u5165\uff08\u6e90\u4ee3\u7801\u751f\u6210\uff09")),(0,a.kt)("th",{parentName:"tr",align:null},(0,a.kt)("strong",{parentName:"th"},"\u9759\u6001\u7f16\u8bd1")))),(0,a.kt)("tbody",{parentName:"table"},(0,a.kt)("tr",{parentName:"tbody"},(0,a.kt)("td",{parentName:"tr",align:null},(0,a.kt)("strong",{parentName:"td"},"\u4f18\u70b9")),(0,a.kt)("td",{parentName:"tr",align:null},"\u52a8\u6001\u6784\u5efa\u7c7b\uff0c\u7075\u6d3b\u3001\u9002\u5e94\u6027\u5f3a\u3002"),(0,a.kt)("td",{parentName:"tr",align:null},"\u9759\u6001\u4ee3\u7801\u751f\u6210\uff0c\u81ea\u5b9a\u4e49\u7c7b\u53c2\u6570\u81ea\u52a8\u751f\u6210\uff0c\u4fee\u6539\u8f83\u7075\u6d3b\uff0c\u8c03\u7528\u6548\u7387\u9ad8"),(0,a.kt)("td",{parentName:"tr",align:null},"\u81ea\u5b9a\u4e49\u7c7b\u53c2\u6570\u81ea\u52a8\u751f\u6210\uff0c\u5bc6\u5c01\u6027\u5f3a\uff0c\u5b89\u5168\u6027\u9ad8\uff0c\u8c03\u7528\u6548\u7387\u9ad8\u3002")),(0,a.kt)("tr",{parentName:"tbody"},(0,a.kt)("td",{parentName:"tr",align:null},(0,a.kt)("strong",{parentName:"td"},"\u7f3a\u70b9")),(0,a.kt)("td",{parentName:"tr",align:null},"\u8c03\u7528\u6548\u7387\u8f83\u4f4e\uff0c\u81ea\u5b9a\u4e49\u7c7b\u53c2\u6570\u987b\u81ea\u884c\u6784\u5efa\uff0c\u5b9e\u73b0\u987bIL\u652f\u6301\uff0c\u5bf9\u8c03\u7528\u5e73\u53f0\u6709\u8981\u6c42\uff0c\u4f8b\u5982\uff1aIOS\u4e0d\u5141\u8bb8\u52a8\u6001\u7c7b\u751f\u6210\uff0c\u5219\u4e0d\u53ef\u4f7f\u7528\u3002"),(0,a.kt)("td",{parentName:"tr",align:null},"\u9879\u76ee\u4ee3\u7801\u7ba1\u7406\u96be\u7edf\u4e00\uff0c\u5f3a\u8feb\u75c7\u731d\u6b7b"),(0,a.kt)("td",{parentName:"tr",align:null},"\u670d\u52a1\u4e00\u65e6\u6709\u7834\u574f\u6027\u5347\u7ea7\uff0c\u5219\u5fc5\u987b\u91cd\u65b0\u66ff\u6362dll\uff0c\u7075\u6d3b\u6027\u51e0\u4e4e\u4e3a0\u3002")))),(0,a.kt)("admonition",{title:"\u63d0\u793a",type:"tip"},(0,a.kt)("p",{parentName:"admonition"},"\u8be5\u5185\u5bb9\uff0c\u5bf9 ",(0,a.kt)("a",{parentName:"p",href:"/touchsocket/docs/touchrpcdescription"},"TouchRpc"),"\u3001",(0,a.kt)("a",{parentName:"p",href:"/touchsocket/docs/jsonrpcdescription"},"JsonRpc"),"\u3001",(0,a.kt)("a",{parentName:"p",href:"/touchsocket/docs/xmlrpcdescription"},"XmlRpc"),"\u3001",(0,a.kt)("a",{parentName:"p",href:"/touchsocket/docs/webapidescription"},"WebApi"),"\u5747\u9002\u7528\u3002")),(0,a.kt)("h2",{id:"\u4e8c\u670d\u52a1\u7aef\u6e90\u6587\u4ef6\u4ee3\u7406\u548c\u6e90\u4ee3\u7801\u751f\u6210\u63a5\u53e3\u4ee3\u7406"},"\u4e8c\u3001\u670d\u52a1\u7aef\u6e90\u6587\u4ef6\u4ee3\u7406\u548c\u6e90\u4ee3\u7801\u751f\u6210\u63a5\u53e3\u4ee3\u7406"),(0,a.kt)("h3",{id:"21-\u533a\u522b"},"2.1 \u533a\u522b"),(0,a.kt)("p",null,"\u5f00\u6e90\u7248\u4e0d\u652f\u6301",(0,a.kt)("strong",{parentName:"p"},"\u6e90\u4ee3\u7801\u751f\u6210\u63a5\u53e3\u4ee3\u7406"),"\uff0c\u4f01\u4e1a\u7248\u5168\u90e8\u652f\u6301\u3002"),(0,a.kt)("h3",{id:"22-\u573a\u666f\u5bf9\u6bd4"},"2.2 \u573a\u666f\u5bf9\u6bd4"),(0,a.kt)("p",null,"\u5047\u8bbe\u4e00\u4e2a\u573a\u666f\uff0c\u4f60\u9700\u8981\u5f00\u53d1\u670d\u52a1\u5668\u548c\u5ba2\u6237\u7aef\u3002"),(0,a.kt)("p",null,"\u8fd9\u65f6\uff0c\u5982\u679c\u4f60\u4f7f\u7528",(0,a.kt)("strong",{parentName:"p"},"\u670d\u52a1\u7aef\u6e90\u6587\u4ef6\u4ee3\u7406"),"\uff0c\u5219\u9700\u8981\u505a\uff1a"),(0,a.kt)("ol",null,(0,a.kt)("li",{parentName:"ol"},"\u5b9a\u4e49\u4e00\u4e2a\u670d\u52a1\u9879\u76ee\uff08\u53ef\u4ee5\u5199\u63a5\u53e3\uff0c\u4e5f\u53ef\u4ee5\u76f4\u63a5\u5199\u903b\u8f91\uff0c\u5f53\u7136\u4e5f\u53ef\u4ee5\u5206\u6210\u4e24\u4e2a\u9879\u76ee\uff09"),(0,a.kt)("li",{parentName:"ol"},"\u7f16\u8bd1\u9879\u76ee\uff0c\u7136\u540e\u5bfc\u51fa\u4ee3\u7406\u6e90\u4ee3\u7801\u3002"),(0,a.kt)("li",{parentName:"ol"},"\u5c06\u5bfc\u51fa\u7684\u6e90\u4ee3\u7801\u5f15\u7528\u5230\u5ba2\u6237\u7aef")),(0,a.kt)("p",null,"\u5982\u679c\u4f60\u4f7f\u7528",(0,a.kt)("strong",{parentName:"p"},"\u6e90\u4ee3\u7801\u751f\u6210\u63a5\u53e3\u4ee3\u7406"),"\uff0c\u5219\u9700\u8981\u505a\uff1a"),(0,a.kt)("ol",null,(0,a.kt)("li",{parentName:"ol"},"\u5355\u72ec\u5b9a\u4e49\u4e00\u4e2a\u63a5\u53e3\u9879\u76ee\uff0c\u7528\u4e8e\u5b58\u653e\u670d\u52a1\u63a5\u53e3\uff0c\u548c\u63a5\u53e3\u6240\u9700\u7684\u53c2\u6570\u7c7b\u578b\u5b9e\u4f53\u3002"),(0,a.kt)("li",{parentName:"ol"},"\u518d\u5b9a\u4e49\u4e00\u4e2a\u63a5\u53e3\u5b9e\u73b0\u9879\u76ee\uff0c\u7528\u4e8e\u5b9e\u73b0\u670d\u52a1\u63a5\u53e3\u3002"),(0,a.kt)("li",{parentName:"ol"},"\u7f16\u8bd1\u63a5\u53e3\u9879\u76ee\uff0c\u5c06\u7f16\u8bd1\u597d\u7684dll\uff0c\u5f15\u7528\u5230\u9700\u8981\u7684\u5ba2\u6237\u7aef")),(0,a.kt)("admonition",{title:"\u6548\u679c",type:"tip"},(0,a.kt)("p",{parentName:"admonition"},"\u4e0a\u8ff0\u6b65\u9aa4\u5982\u679c\u5168\u90e8\u5b8c\u6210\uff0c\u4e24\u79cd\u65b9\u5f0f\u5728\u5ba2\u6237\u7aef\u7684\u4f7f\u7528\u6548\u679c\u57fa\u672c\u5b8c\u5168\u4e00\u6837\u3002")))}d.isMDXComponent=!0}}]);
\ No newline at end of file
"use strict";(self.webpackChunktouchsocket=self.webpackChunktouchsocket||[]).push([[2903],{3905:(e,t,n)=>{n.d(t,{Zo:()=>p,kt:()=>f});var o=n(7294);function r(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function c(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);t&&(o=o.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,o)}return n}function a(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?c(Object(n),!0).forEach((function(t){r(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):c(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function l(e,t){if(null==e)return{};var n,o,r=function(e,t){if(null==e)return{};var n,o,r={},c=Object.keys(e);for(o=0;o<c.length;o++)n=c[o],t.indexOf(n)>=0||(r[n]=e[n]);return r}(e,t);if(Object.getOwnPropertySymbols){var c=Object.getOwnPropertySymbols(e);for(o=0;o<c.length;o++)n=c[o],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(r[n]=e[n])}return r}var i=o.createContext({}),s=function(e){var t=o.useContext(i),n=t;return e&&(n="function"==typeof e?e(t):a(a({},t),e)),n},p=function(e){var t=s(e.components);return o.createElement(i.Provider,{value:t},e.children)},u={inlineCode:"code",wrapper:function(e){var t=e.children;return o.createElement(o.Fragment,{},t)}},d=o.forwardRef((function(e,t){var n=e.components,r=e.mdxType,c=e.originalType,i=e.parentName,p=l(e,["components","mdxType","originalType","parentName"]),d=s(n),f=r,m=d["".concat(i,".").concat(f)]||d[f]||u[f]||c;return n?o.createElement(m,a(a({ref:t},p),{},{components:n})):o.createElement(m,a({ref:t},p))}));function f(e,t){var n=arguments,r=t&&t.mdxType;if("string"==typeof e||r){var c=n.length,a=new Array(c);a[0]=d;var l={};for(var i in t)hasOwnProperty.call(t,i)&&(l[i]=t[i]);l.originalType=e,l.mdxType="string"==typeof e?e:r,a[1]=l;for(var s=2;s<c;s++)a[s]=n[s];return o.createElement.apply(null,a)}return o.createElement.apply(null,n)}d.displayName="MDXCreateElement"},8690:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>i,contentTitle:()=>a,default:()=>u,frontMatter:()=>c,metadata:()=>l,toc:()=>s});var o=n(7462),r=(n(7294),n(3905));const c={id:"consoleaction",title:"\u63a7\u5236\u53f0\u884c\u4e3a"},a=void 0,l={unversionedId:"consoleaction",id:"consoleaction",title:"\u63a7\u5236\u53f0\u884c\u4e3a",description:"\u4e00\u3001\u8bf4\u660e",source:"@site/docs/consoleaction.mdx",sourceDirName:".",slug:"/consoleaction",permalink:"/touchsocket/docs/consoleaction",draft:!1,editUrl:"https://gitee.com/rrqm_home/touchsocket/tree/master/handbook/docs/consoleaction.mdx",tags:[],version:"current",lastUpdatedBy:"\u82e5\u6c5d\u68cb\u8317",lastUpdatedAt:1675770803,formattedLastUpdatedAt:"Feb 7, 2023",frontMatter:{id:"consoleaction",title:"\u63a7\u5236\u53f0\u884c\u4e3a"},sidebar:"docs",previous:{title:"\u5185\u5b58\u6c60",permalink:"/touchsocket/docs/bytepool"},next:{title:"\u5927\u5c0f\u7aef\u8f6c\u6362\u5668",permalink:"/touchsocket/docs/touchsocketbitconverter"}},i={},s=[{value:"\u4e00\u3001\u8bf4\u660e",id:"\u4e00\u8bf4\u660e",level:2},{value:"\u4e8c\u3001\u4f7f\u7528",id:"\u4e8c\u4f7f\u7528",level:2},{value:"\u4e09\u3001\u6548\u679c\u56fe",id:"\u4e09\u6548\u679c\u56fe",level:2}],p={toc:s};function u(e){let{components:t,...c}=e;return(0,r.kt)("wrapper",(0,o.Z)({},p,c,{components:t,mdxType:"MDXLayout"}),(0,r.kt)("h2",{id:"\u4e00\u8bf4\u660e"},"\u4e00\u3001\u8bf4\u660e"),(0,r.kt)("p",null,"\u8fd9\u662f\u4e00\u4e2a\u5f88\u7b80\u5355\u7684\u63a7\u5236\u53f0\u547d\u4ee4\u5668\uff0c\u91cd\u8981\u4f5c\u7528\u5c31\u662f\u5f88\u65b9\u4fbf\u7684\u5b9e\u73b0\u63a7\u5236\u53f0\u63a7\u5236\u3002"),(0,r.kt)("p",null,(0,r.kt)("strong",{parentName:"p"},"Nuget Package\uff1a"),(0,r.kt)("a",{parentName:"p",href:"https://www.nuget.org/packages/TouchSocket/"},"TouchSocket")),(0,r.kt)("h2",{id:"\u4e8c\u4f7f\u7528"},"\u4e8c\u3001\u4f7f\u7528"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-csharp"},'ConsoleAction consoleAction = new ConsoleAction("h|help|?");//\u8bbe\u7f6e\u5e2e\u52a9\u547d\u4ee4\nconsoleAction.OnException += ConsoleAction_OnException;//\u8ba2\u9605\u6267\u884c\u5f02\u5e38\u8f93\u51fa\n\n//\u4e0b\u5217\u7684ShareProxy\uff0cStopShareProxy\uff0cGetAll\u5747\u4e3a\u65e0\u53c2\u6570\u7684\u65b9\u6cd5\nconsoleAction.Add("sp|shareProxy", "\u5206\u4eab\u4ee3\u7406", ShareProxy);//\u793a\u4f8b\u547d\u4ee4\nconsoleAction.Add("ssp|stopShareProxy", "\u505c\u6b62\u5206\u4eab\u4ee3\u7406", StopShareProxy);//\u793a\u4f8b\u547d\u4ee4\nconsoleAction.Add("ga|getAll", "\u83b7\u53d6\u6240\u6709\u5ba2\u6237\u7aef\u4fe1\u606f", GetAll);//\u793a\u4f8b\u547d\u4ee4\nconsoleAction.ShowAll();\nwhile (true)\n{\n if (!consoleAction.Run(Console.ReadLine()))\n {\n Console.WriteLine("\u547d\u4ee4\u4e0d\u6b63\u786e\uff0c\u8bf7\u8f93\u5165\u201ch|help|?\u201d\u83b7\u5f97\u5e2e\u52a9\u3002");\n }\n}\n')),(0,r.kt)("h2",{id:"\u4e09\u6548\u679c\u56fe"},"\u4e09\u3001\u6548\u679c\u56fe"),(0,r.kt)("p",null,(0,r.kt)("img",{src:n(4173).Z,width:"974",height:"515"})))}u.isMDXComponent=!0},4173:(e,t,n)=>{n.d(t,{Z:()=>o});const o=n.p+"assets/images/consoleaction-1-d9e1a3f9f1a42d751e1d5e0605714a2c.gif"}}]); "use strict";(self.webpackChunktouchsocket=self.webpackChunktouchsocket||[]).push([[2903],{3905:(e,t,n)=>{n.d(t,{Zo:()=>p,kt:()=>f});var o=n(7294);function r(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function c(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);t&&(o=o.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,o)}return n}function a(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?c(Object(n),!0).forEach((function(t){r(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):c(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function l(e,t){if(null==e)return{};var n,o,r=function(e,t){if(null==e)return{};var n,o,r={},c=Object.keys(e);for(o=0;o<c.length;o++)n=c[o],t.indexOf(n)>=0||(r[n]=e[n]);return r}(e,t);if(Object.getOwnPropertySymbols){var c=Object.getOwnPropertySymbols(e);for(o=0;o<c.length;o++)n=c[o],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(r[n]=e[n])}return r}var i=o.createContext({}),s=function(e){var t=o.useContext(i),n=t;return e&&(n="function"==typeof e?e(t):a(a({},t),e)),n},p=function(e){var t=s(e.components);return o.createElement(i.Provider,{value:t},e.children)},u={inlineCode:"code",wrapper:function(e){var t=e.children;return o.createElement(o.Fragment,{},t)}},d=o.forwardRef((function(e,t){var n=e.components,r=e.mdxType,c=e.originalType,i=e.parentName,p=l(e,["components","mdxType","originalType","parentName"]),d=s(n),f=r,m=d["".concat(i,".").concat(f)]||d[f]||u[f]||c;return n?o.createElement(m,a(a({ref:t},p),{},{components:n})):o.createElement(m,a({ref:t},p))}));function f(e,t){var n=arguments,r=t&&t.mdxType;if("string"==typeof e||r){var c=n.length,a=new Array(c);a[0]=d;var l={};for(var i in t)hasOwnProperty.call(t,i)&&(l[i]=t[i]);l.originalType=e,l.mdxType="string"==typeof e?e:r,a[1]=l;for(var s=2;s<c;s++)a[s]=n[s];return o.createElement.apply(null,a)}return o.createElement.apply(null,n)}d.displayName="MDXCreateElement"},8690:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>i,contentTitle:()=>a,default:()=>u,frontMatter:()=>c,metadata:()=>l,toc:()=>s});var o=n(7462),r=(n(7294),n(3905));const c={id:"consoleaction",title:"\u63a7\u5236\u53f0\u884c\u4e3a"},a=void 0,l={unversionedId:"consoleaction",id:"consoleaction",title:"\u63a7\u5236\u53f0\u884c\u4e3a",description:"\u4e00\u3001\u8bf4\u660e",source:"@site/docs/consoleaction.mdx",sourceDirName:".",slug:"/consoleaction",permalink:"/touchsocket/docs/consoleaction",draft:!1,editUrl:"https://gitee.com/rrqm_home/touchsocket/tree/master/handbook/docs/consoleaction.mdx",tags:[],version:"current",lastUpdatedBy:"\u82e5\u6c5d\u68cb\u8317",lastUpdatedAt:1675770803,formattedLastUpdatedAt:"Feb 7, 2023",frontMatter:{id:"consoleaction",title:"\u63a7\u5236\u53f0\u884c\u4e3a"},sidebar:"docs",previous:{title:"\u5185\u5b58\u6c60",permalink:"/touchsocket/docs/bytepool"},next:{title:"\u5927\u5c0f\u7aef\u8f6c\u6362\u5668",permalink:"/touchsocket/docs/touchsocketbitconverter"}},i={},s=[{value:"\u4e00\u3001\u8bf4\u660e",id:"\u4e00\u8bf4\u660e",level:2},{value:"\u4e8c\u3001\u4f7f\u7528",id:"\u4e8c\u4f7f\u7528",level:2},{value:"\u4e09\u3001\u6548\u679c\u56fe",id:"\u4e09\u6548\u679c\u56fe",level:2}],p={toc:s};function u(e){let{components:t,...c}=e;return(0,r.kt)("wrapper",(0,o.Z)({},p,c,{components:t,mdxType:"MDXLayout"}),(0,r.kt)("h2",{id:"\u4e00\u8bf4\u660e"},"\u4e00\u3001\u8bf4\u660e"),(0,r.kt)("p",null,"\u8fd9\u662f\u4e00\u4e2a\u5f88\u7b80\u5355\u7684\u63a7\u5236\u53f0\u547d\u4ee4\u5668\uff0c\u91cd\u8981\u4f5c\u7528\u5c31\u662f\u5f88\u65b9\u4fbf\u7684\u5b9e\u73b0\u63a7\u5236\u53f0\u63a7\u5236\u3002"),(0,r.kt)("p",null,(0,r.kt)("strong",{parentName:"p"},"Nuget Package\uff1a"),(0,r.kt)("a",{parentName:"p",href:"https://www.nuget.org/packages/TouchSocket/"},"TouchSocket")),(0,r.kt)("h2",{id:"\u4e8c\u4f7f\u7528"},"\u4e8c\u3001\u4f7f\u7528"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-csharp"},'ConsoleAction consoleAction = new ConsoleAction("h|help|?");//\u8bbe\u7f6e\u5e2e\u52a9\u547d\u4ee4\nconsoleAction.OnException += ConsoleAction_OnException;//\u8ba2\u9605\u6267\u884c\u5f02\u5e38\u8f93\u51fa\n\n//\u4e0b\u5217\u7684ShareProxy\uff0cStopShareProxy\uff0cGetAll\u5747\u4e3a\u65e0\u53c2\u6570\u7684\u65b9\u6cd5\nconsoleAction.Add("sp|shareProxy", "\u5206\u4eab\u4ee3\u7406", ShareProxy);//\u793a\u4f8b\u547d\u4ee4\nconsoleAction.Add("ssp|stopShareProxy", "\u505c\u6b62\u5206\u4eab\u4ee3\u7406", StopShareProxy);//\u793a\u4f8b\u547d\u4ee4\nconsoleAction.Add("ga|getAll", "\u83b7\u53d6\u6240\u6709\u5ba2\u6237\u7aef\u4fe1\u606f", GetAll);//\u793a\u4f8b\u547d\u4ee4\nconsoleAction.ShowAll();\nwhile (true)\n{\n if (!consoleAction.Run(Console.ReadLine()))\n {\n Console.WriteLine("\u547d\u4ee4\u4e0d\u6b63\u786e\uff0c\u8bf7\u8f93\u5165\u201ch|help|?\u201d\u83b7\u5f97\u5e2e\u52a9\u3002");\n }\n}\n')),(0,r.kt)("h2",{id:"\u4e09\u6548\u679c\u56fe"},"\u4e09\u3001\u6548\u679c\u56fe"),(0,r.kt)("p",null,(0,r.kt)("img",{src:n(1382).Z,width:"974",height:"515"})))}u.isMDXComponent=!0},1382:(e,t,n)=>{n.d(t,{Z:()=>o});const o=n.p+"assets/images/consoleaction-1-d9e1a3f9f1a42d751e1d5e0605714a2c.gif"}}]);
\ No newline at end of file \ No newline at end of file
"use strict";(self.webpackChunktouchsocket=self.webpackChunktouchsocket||[]).push([[2671],{3905:(e,n,t)=>{t.d(n,{Zo:()=>u,kt:()=>d});var r=t(7294);function o(e,n,t){return n in e?Object.defineProperty(e,n,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[n]=t,e}function a(e,n){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);n&&(r=r.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),t.push.apply(t,r)}return t}function i(e){for(var n=1;n<arguments.length;n++){var t=null!=arguments[n]?arguments[n]:{};n%2?a(Object(t),!0).forEach((function(n){o(e,n,t[n])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):a(Object(t)).forEach((function(n){Object.defineProperty(e,n,Object.getOwnPropertyDescriptor(t,n))}))}return e}function s(e,n){if(null==e)return{};var t,r,o=function(e,n){if(null==e)return{};var t,r,o={},a=Object.keys(e);for(r=0;r<a.length;r++)t=a[r],n.indexOf(t)>=0||(o[t]=e[t]);return o}(e,n);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r<a.length;r++)t=a[r],n.indexOf(t)>=0||Object.prototype.propertyIsEnumerable.call(e,t)&&(o[t]=e[t])}return o}var c=r.createContext({}),l=function(e){var n=r.useContext(c),t=n;return e&&(t="function"==typeof e?e(n):i(i({},n),e)),t},u=function(e){var n=l(e.components);return r.createElement(c.Provider,{value:n},e.children)},p={inlineCode:"code",wrapper:function(e){var n=e.children;return r.createElement(r.Fragment,{},n)}},m=r.forwardRef((function(e,n){var t=e.components,o=e.mdxType,a=e.originalType,c=e.parentName,u=s(e,["components","mdxType","originalType","parentName"]),m=l(t),d=o,g=m["".concat(c,".").concat(d)]||m[d]||p[d]||a;return t?r.createElement(g,i(i({ref:n},u),{},{components:t})):r.createElement(g,i({ref:n},u))}));function d(e,n){var t=arguments,o=n&&n.mdxType;if("string"==typeof e||o){var a=t.length,i=new Array(a);i[0]=m;var s={};for(var c in n)hasOwnProperty.call(n,c)&&(s[c]=n[c]);s.originalType=e,s.mdxType="string"==typeof e?e:o,i[1]=s;for(var l=2;l<a;l++)i[l]=t[l];return r.createElement.apply(null,i)}return r.createElement.apply(null,t)}m.displayName="MDXCreateElement"},7116:(e,n,t)=>{t.r(n),t.d(n,{assets:()=>c,contentTitle:()=>i,default:()=>p,frontMatter:()=>a,metadata:()=>s,toc:()=>l});var r=t(7462),o=(t(7294),t(3905));const a={id:"wscommandlineplugin",title:"WSCommandLinePlugin"},i=void 0,s={unversionedId:"wscommandlineplugin",id:"wscommandlineplugin",title:"WSCommandLinePlugin",description:"\u547d\u4ee4\u884c\u6267\u884c\u63d2\u4ef6\u5ba2\u6237\u7aef\u3001\u670d\u52a1\u5668\u5747\u652f\u6301",source:"@site/docs/wscommandlineplugin.mdx",sourceDirName:".",slug:"/wscommandlineplugin",permalink:"/touchsocket/docs/wscommandlineplugin",draft:!1,editUrl:"https://gitee.com/rrqm_home/touchsocket/tree/master/handbook/docs/wscommandlineplugin.mdx",tags:[],version:"current",lastUpdatedBy:"\u82e5\u6c5d\u68cb\u8317",lastUpdatedAt:1675770803,formattedLastUpdatedAt:"Feb 7, 2023",frontMatter:{id:"wscommandlineplugin",title:"WSCommandLinePlugin"},sidebar:"docs",previous:{title:"\u521b\u5efaWebSocket\u5ba2\u6237\u7aef",permalink:"/touchsocket/docs/createwebsocketclient"},next:{title:"\u57fa\u4e8eWS\u7684JsonRpc",permalink:"/touchsocket/docs/wsjsonrpc"}},c={},l=[{value:"\u547d\u4ee4\u884c\u6267\u884c\u63d2\u4ef6\u5ba2\u6237\u7aef\u3001\u670d\u52a1\u5668\u5747\u652f\u6301",id:"\u547d\u4ee4\u884c\u6267\u884c\u63d2\u4ef6\u5ba2\u6237\u7aef\u670d\u52a1\u5668\u5747\u652f\u6301",level:2}],u={toc:l};function p(e){let{components:n,...t}=e;return(0,o.kt)("wrapper",(0,r.Z)({},u,t,{components:n,mdxType:"MDXLayout"}),(0,o.kt)("h2",{id:"\u547d\u4ee4\u884c\u6267\u884c\u63d2\u4ef6\u5ba2\u6237\u7aef\u670d\u52a1\u5668\u5747\u652f\u6301"},"\u547d\u4ee4\u884c\u6267\u884c\u63d2\u4ef6\u5ba2\u6237\u7aef\u3001\u670d\u52a1\u5668\u5747\u652f\u6301"),(0,o.kt)("p",null,(0,o.kt)("strong",{parentName:"p"},"WSCommandLinePlugin"),"\u547d\u4ee4\u884c\u6267\u884c\u63d2\u4ef6\uff0c\u662f\u7528\u4e8e",(0,o.kt)("strong",{parentName:"p"},"WebSocket"),"\u7684\u5feb\u6377\u4e8b\u52a1\u5b9e\u73b0\uff0c\u8ba9WS\u5728",(0,o.kt)("strong",{parentName:"p"},"Text"),"\u6587\u672c\u4e2d\uff0c\u7528\u6700\u7b80\u5355\u7684\u6587\u5b57\u6d88\u606f\u5373\u53ef\u5b8c\u6210\u76f8\u5173\u4e8b\u52a1\u7684\u6267\u884c\u3002\u8be5\u7c7b\u662f\u62bd\u8c61\u7c7b\uff0c\u5fc5\u987b\u901a\u8fc7\u7ee7\u627f\uff0c\u5728\u7ee7\u627f\u7c7b\u4e2d\uff0c\u58f0\u660e\u7684\u5177\u7684",(0,o.kt)("strong",{parentName:"p"},"\u516c\u5171\u7684"),"\u4e14\u540d\u79f0\u4ee5",(0,o.kt)("strong",{parentName:"p"},"Command"),"\u7ed3\u5c3e\u7684\u65b9\u6cd5\uff0c\u5747\u53ef\u88ab\u5feb\u6377\u6267\u884c\u3002"),(0,o.kt)("p",null,"\u4f8b\u5982\uff1a\u4e0b\u5217\u63d2\u4ef6\uff0c\u5373\u53ef\u88ab\u666e\u901aWS\u5ba2\u6237\u7aef\uff0c\u6216\u670d\u52a1\u5668\u4fbf\u6377\u8c03\u7528\u3002"),(0,o.kt)("p",null,"\u8c03\u7528\u6570\u636e\u683c\u5f0f\uff1a\n",(0,o.kt)("inlineCode",{parentName:"p"},"Add 10 20"),"\u652f\u6301Json\u6570\u636e\u683c\u5f0f"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-csharp"},'var service = new HttpService();\n\nvar config = new TouchSocketConfig();\nconfig.UsePlugin()\n .SetReceiveType(ReceiveType.Auto)\n .SetListenIPHosts(new IPHost[] { new IPHost(7789) })\n .ConfigureContainer(a=> \n {\n a.SetSingletonLogger<ConsoleLogger>();\n })\n .ConfigurePlugins(a=> \n {\n a.Add<WebSocketServerPlugin>();//\u6dfb\u52a0WebSocket\u529f\u80fd\n a.Add<MyWSCommandLinePlugin>();//\u6dfb\u52a0WS\u547d\u4ee4\u884c\u4e8b\u52a1\u3002\n });\n\nservice.Setup(config)\n .Start();\nservice.Logger.Message("Http\u670d\u52a1\u5668\u5df2\u542f\u52a8");\nservice.Logger.Message("WS\u8bbf\u95ee\uff1aws://127.0.0.1:7789/ws");\n')),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-csharp"},'/// <summary>\n/// \u547d\u4ee4\u884c\u63d2\u4ef6\u3002\n/// \u58f0\u660e\u7684\u65b9\u6cd5\u5fc5\u987b\u4ee5"Command"\u7ed3\u5c3e\uff0c\u652f\u6301json\u5b57\u7b26\u4e32\uff0c\u53c2\u6570\u4e4b\u95f4\u7a7a\u683c\u9694\u5f00\u3002\n/// </summary>\nclass MyWSCommandLinePlugin : WSCommandLinePlugin\n{\n public int AddCommand(int a, int b)\n {\n return a + b;\n }\n\n public SumClass SumCommand(SumClass sumClass)\n {\n sumClass.Sum = sumClass.A + sumClass.B;\n return sumClass;\n }\n}\nclass SumClass\n{\n public int A { get; set; }\n public int B { get; set; }\n public int Sum { get; set; }\n\n}\n')))}p.isMDXComponent=!0}}]); "use strict";(self.webpackChunktouchsocket=self.webpackChunktouchsocket||[]).push([[2671],{3905:(e,n,t)=>{t.d(n,{Zo:()=>u,kt:()=>d});var r=t(7294);function o(e,n,t){return n in e?Object.defineProperty(e,n,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[n]=t,e}function a(e,n){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);n&&(r=r.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),t.push.apply(t,r)}return t}function i(e){for(var n=1;n<arguments.length;n++){var t=null!=arguments[n]?arguments[n]:{};n%2?a(Object(t),!0).forEach((function(n){o(e,n,t[n])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):a(Object(t)).forEach((function(n){Object.defineProperty(e,n,Object.getOwnPropertyDescriptor(t,n))}))}return e}function s(e,n){if(null==e)return{};var t,r,o=function(e,n){if(null==e)return{};var t,r,o={},a=Object.keys(e);for(r=0;r<a.length;r++)t=a[r],n.indexOf(t)>=0||(o[t]=e[t]);return o}(e,n);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r<a.length;r++)t=a[r],n.indexOf(t)>=0||Object.prototype.propertyIsEnumerable.call(e,t)&&(o[t]=e[t])}return o}var c=r.createContext({}),l=function(e){var n=r.useContext(c),t=n;return e&&(t="function"==typeof e?e(n):i(i({},n),e)),t},u=function(e){var n=l(e.components);return r.createElement(c.Provider,{value:n},e.children)},p={inlineCode:"code",wrapper:function(e){var n=e.children;return r.createElement(r.Fragment,{},n)}},m=r.forwardRef((function(e,n){var t=e.components,o=e.mdxType,a=e.originalType,c=e.parentName,u=s(e,["components","mdxType","originalType","parentName"]),m=l(t),d=o,g=m["".concat(c,".").concat(d)]||m[d]||p[d]||a;return t?r.createElement(g,i(i({ref:n},u),{},{components:t})):r.createElement(g,i({ref:n},u))}));function d(e,n){var t=arguments,o=n&&n.mdxType;if("string"==typeof e||o){var a=t.length,i=new Array(a);i[0]=m;var s={};for(var c in n)hasOwnProperty.call(n,c)&&(s[c]=n[c]);s.originalType=e,s.mdxType="string"==typeof e?e:o,i[1]=s;for(var l=2;l<a;l++)i[l]=t[l];return r.createElement.apply(null,i)}return r.createElement.apply(null,t)}m.displayName="MDXCreateElement"},7116:(e,n,t)=>{t.r(n),t.d(n,{assets:()=>c,contentTitle:()=>i,default:()=>p,frontMatter:()=>a,metadata:()=>s,toc:()=>l});var r=t(7462),o=(t(7294),t(3905));const a={id:"wscommandlineplugin",title:"WSCommandLinePlugin"},i=void 0,s={unversionedId:"wscommandlineplugin",id:"wscommandlineplugin",title:"WSCommandLinePlugin",description:"\u547d\u4ee4\u884c\u6267\u884c\u63d2\u4ef6\u5ba2\u6237\u7aef\u3001\u670d\u52a1\u5668\u5747\u652f\u6301",source:"@site/docs/wscommandlineplugin.mdx",sourceDirName:".",slug:"/wscommandlineplugin",permalink:"/touchsocket/docs/wscommandlineplugin",draft:!1,editUrl:"https://gitee.com/rrqm_home/touchsocket/tree/master/handbook/docs/wscommandlineplugin.mdx",tags:[],version:"current",lastUpdatedBy:"\u82e5\u6c5d\u68cb\u8317",lastUpdatedAt:1675770803,formattedLastUpdatedAt:"Feb 7, 2023",frontMatter:{id:"wscommandlineplugin",title:"WSCommandLinePlugin"},sidebar:"docs",previous:{title:"\u8fde\u63a5\u9a8c\u8bc1",permalink:"/touchsocket/docs/websocketverify"},next:{title:"\u57fa\u4e8eWS\u7684JsonRpc",permalink:"/touchsocket/docs/wsjsonrpc"}},c={},l=[{value:"\u547d\u4ee4\u884c\u6267\u884c\u63d2\u4ef6\u5ba2\u6237\u7aef\u3001\u670d\u52a1\u5668\u5747\u652f\u6301",id:"\u547d\u4ee4\u884c\u6267\u884c\u63d2\u4ef6\u5ba2\u6237\u7aef\u670d\u52a1\u5668\u5747\u652f\u6301",level:2}],u={toc:l};function p(e){let{components:n,...t}=e;return(0,o.kt)("wrapper",(0,r.Z)({},u,t,{components:n,mdxType:"MDXLayout"}),(0,o.kt)("h2",{id:"\u547d\u4ee4\u884c\u6267\u884c\u63d2\u4ef6\u5ba2\u6237\u7aef\u670d\u52a1\u5668\u5747\u652f\u6301"},"\u547d\u4ee4\u884c\u6267\u884c\u63d2\u4ef6\u5ba2\u6237\u7aef\u3001\u670d\u52a1\u5668\u5747\u652f\u6301"),(0,o.kt)("p",null,(0,o.kt)("strong",{parentName:"p"},"WSCommandLinePlugin"),"\u547d\u4ee4\u884c\u6267\u884c\u63d2\u4ef6\uff0c\u662f\u7528\u4e8e",(0,o.kt)("strong",{parentName:"p"},"WebSocket"),"\u7684\u5feb\u6377\u4e8b\u52a1\u5b9e\u73b0\uff0c\u8ba9WS\u5728",(0,o.kt)("strong",{parentName:"p"},"Text"),"\u6587\u672c\u4e2d\uff0c\u7528\u6700\u7b80\u5355\u7684\u6587\u5b57\u6d88\u606f\u5373\u53ef\u5b8c\u6210\u76f8\u5173\u4e8b\u52a1\u7684\u6267\u884c\u3002\u8be5\u7c7b\u662f\u62bd\u8c61\u7c7b\uff0c\u5fc5\u987b\u901a\u8fc7\u7ee7\u627f\uff0c\u5728\u7ee7\u627f\u7c7b\u4e2d\uff0c\u58f0\u660e\u7684\u5177\u7684",(0,o.kt)("strong",{parentName:"p"},"\u516c\u5171\u7684"),"\u4e14\u540d\u79f0\u4ee5",(0,o.kt)("strong",{parentName:"p"},"Command"),"\u7ed3\u5c3e\u7684\u65b9\u6cd5\uff0c\u5747\u53ef\u88ab\u5feb\u6377\u6267\u884c\u3002"),(0,o.kt)("p",null,"\u4f8b\u5982\uff1a\u4e0b\u5217\u63d2\u4ef6\uff0c\u5373\u53ef\u88ab\u666e\u901aWS\u5ba2\u6237\u7aef\uff0c\u6216\u670d\u52a1\u5668\u4fbf\u6377\u8c03\u7528\u3002"),(0,o.kt)("p",null,"\u8c03\u7528\u6570\u636e\u683c\u5f0f\uff1a\n",(0,o.kt)("inlineCode",{parentName:"p"},"Add 10 20"),"\u652f\u6301Json\u6570\u636e\u683c\u5f0f"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-csharp"},'var service = new HttpService();\n\nvar config = new TouchSocketConfig();\nconfig.UsePlugin()\n .SetReceiveType(ReceiveType.Auto)\n .SetListenIPHosts(new IPHost[] { new IPHost(7789) })\n .ConfigureContainer(a=> \n {\n a.SetSingletonLogger<ConsoleLogger>();\n })\n .ConfigurePlugins(a=> \n {\n a.Add<WebSocketServerPlugin>();//\u6dfb\u52a0WebSocket\u529f\u80fd\n a.Add<MyWSCommandLinePlugin>();//\u6dfb\u52a0WS\u547d\u4ee4\u884c\u4e8b\u52a1\u3002\n });\n\nservice.Setup(config)\n .Start();\nservice.Logger.Message("Http\u670d\u52a1\u5668\u5df2\u542f\u52a8");\nservice.Logger.Message("WS\u8bbf\u95ee\uff1aws://127.0.0.1:7789/ws");\n')),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-csharp"},'/// <summary>\n/// \u547d\u4ee4\u884c\u63d2\u4ef6\u3002\n/// \u58f0\u660e\u7684\u65b9\u6cd5\u5fc5\u987b\u4ee5"Command"\u7ed3\u5c3e\uff0c\u652f\u6301json\u5b57\u7b26\u4e32\uff0c\u53c2\u6570\u4e4b\u95f4\u7a7a\u683c\u9694\u5f00\u3002\n/// </summary>\nclass MyWSCommandLinePlugin : WSCommandLinePlugin\n{\n public int AddCommand(int a, int b)\n {\n return a + b;\n }\n\n public SumClass SumCommand(SumClass sumClass)\n {\n sumClass.Sum = sumClass.A + sumClass.B;\n return sumClass;\n }\n}\nclass SumClass\n{\n public int A { get; set; }\n public int B { get; set; }\n public int Sum { get; set; }\n\n}\n')))}p.isMDXComponent=!0}}]);
\ No newline at end of file \ No newline at end of file
此差异已折叠。
"use strict";(self.webpackChunktouchsocket=self.webpackChunktouchsocket||[]).push([[1965],{3905:(e,t,n)=>{n.d(t,{Zo:()=>s,kt:()=>g});var r=n(7294);function a(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function l(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function o(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?l(Object(n),!0).forEach((function(t){a(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):l(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function i(e,t){if(null==e)return{};var n,r,a=function(e,t){if(null==e)return{};var n,r,a={},l=Object.keys(e);for(r=0;r<l.length;r++)n=l[r],t.indexOf(n)>=0||(a[n]=e[n]);return a}(e,t);if(Object.getOwnPropertySymbols){var l=Object.getOwnPropertySymbols(e);for(r=0;r<l.length;r++)n=l[r],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(a[n]=e[n])}return a}var p=r.createContext({}),c=function(e){var t=r.useContext(p),n=t;return e&&(n="function"==typeof e?e(t):o(o({},t),e)),n},s=function(e){var t=c(e.components);return r.createElement(p.Provider,{value:t},e.children)},u={inlineCode:"code",wrapper:function(e){var t=e.children;return r.createElement(r.Fragment,{},t)}},d=r.forwardRef((function(e,t){var n=e.components,a=e.mdxType,l=e.originalType,p=e.parentName,s=i(e,["components","mdxType","originalType","parentName"]),d=c(n),g=a,k=d["".concat(p,".").concat(g)]||d[g]||u[g]||l;return n?r.createElement(k,o(o({ref:t},s),{},{components:n})):r.createElement(k,o({ref:t},s))}));function g(e,t){var n=arguments,a=t&&t.mdxType;if("string"==typeof e||a){var l=n.length,o=new Array(l);o[0]=d;var i={};for(var p in t)hasOwnProperty.call(t,p)&&(i[p]=t[p]);i.originalType=e,i.mdxType="string"==typeof e?e:a,o[1]=i;for(var c=2;c<l;c++)o[c]=n[c];return r.createElement.apply(null,o)}return r.createElement.apply(null,n)}d.displayName="MDXCreateElement"},2702:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>p,contentTitle:()=>o,default:()=>u,frontMatter:()=>l,metadata:()=>i,toc:()=>c});var r=n(7462),a=(n(7294),n(3905));const l={id:"transferfile",title:"\u4f20\u8f93\u6587\u4ef6"},o=void 0,i={unversionedId:"transferfile",id:"transferfile",title:"\u4f20\u8f93\u6587\u4ef6",description:"\u6f14\u793a\uff1a \u53ef\u4ee5\u770b\u5230\uff0c\u4e0b\u56fe\u6b63\u5728\u4e0a\u4f20\u4e00\u4e2aWindow\u7684\u7cfb\u7edf\u955c\u50cf\u6587\u4ef6\uff0c\u5927\u7ea64.2Gb\uff0c\u4f20\u8f93\u901f\u5ea6\u5df2\u8fbe\u5230800Mb/s\uff0cGC\u57fa\u672c\u4e0a\u6ca1\u6709\u91ca\u653e\uff0c\u6027\u80fd\u975e\u5e38\u5f3a\u608d\uff08\u4e2d\u95f4\u6709\u7a0d\u5fae\u505c\u987f\uff0c\u56e0\u4e3a\u7a0b\u5e8f\u5728\u83b7\u53d6\u6587\u4ef6MD5\u503c\uff09\u3002",source:"@site/docs/transferfile.mdx",sourceDirName:".",slug:"/transferfile",permalink:"/touchsocket/docs/transferfile",draft:!1,editUrl:"https://gitee.com/rrqm_home/touchsocket/tree/master/handbook/docs/transferfile.mdx",tags:[],version:"current",lastUpdatedBy:"\u82e5\u6c5d\u68cb\u8317",lastUpdatedAt:1675770803,formattedLastUpdatedAt:"Feb 7, 2023",frontMatter:{id:"transferfile",title:"\u4f20\u8f93\u6587\u4ef6"},sidebar:"docs",previous:{title:"Rpc\u670d\u52a1AOP",permalink:"/touchsocket/docs/rpcactionfilter"},next:{title:"\u5c0f\u6587\u4ef6\u4f20\u8f93",permalink:"/touchsocket/docs/smallfiletransfer"}},p={},c=[{value:"\u4ea7\u54c1\u5e94\u7528\u573a\u666f",id:"\u4ea7\u54c1\u5e94\u7528\u573a\u666f",level:2},{value:"\u670d\u52a1\u67b6\u6784",id:"\u670d\u52a1\u67b6\u6784",level:2},{value:"\u4e00\u3001\u8bf4\u660e",id:"\u4e00\u8bf4\u660e",level:2},{value:"\u4e8c\u3001Pull\u6587\u4ef6",id:"\u4e8cpull\u6587\u4ef6",level:2},{value:"\u793a\u4f8b\u4ee3\u7801\uff1a",id:"\u793a\u4f8b\u4ee3\u7801",level:3},{value:"\u4e09\u3001Push\u6587\u4ef6",id:"\u4e09push\u6587\u4ef6",level:2},{value:"\u56db\u3001\u5ba2\u6237\u7aef\u4e4b\u95f4\u4f20\u8f93\u6587\u4ef6",id:"\u56db\u5ba2\u6237\u7aef\u4e4b\u95f4\u4f20\u8f93\u6587\u4ef6",level:2}],s={toc:c};function u(e){let{components:t,...n}=e;return(0,a.kt)("wrapper",(0,r.Z)({},s,n,{components:t,mdxType:"MDXLayout"}),(0,a.kt)("p",null,(0,a.kt)("strong",{parentName:"p"},"\u6f14\u793a\uff1a")," \u53ef\u4ee5\u770b\u5230\uff0c\u4e0b\u56fe\u6b63\u5728\u4e0a\u4f20\u4e00\u4e2aWindow\u7684\u7cfb\u7edf\u955c\u50cf\u6587\u4ef6\uff0c\u5927\u7ea64.2Gb\uff0c\u4f20\u8f93\u901f\u5ea6\u5df2\u8fbe\u5230800Mb/s\uff0cGC\u57fa\u672c\u4e0a\u6ca1\u6709\u91ca\u653e\uff0c\u6027\u80fd\u975e\u5e38\u5f3a\u608d\uff08\u4e2d\u95f4\u6709\u7a0d\u5fae\u505c\u987f\uff0c\u56e0\u4e3a\u7a0b\u5e8f\u5728\u83b7\u53d6\u6587\u4ef6MD5\u503c\uff09\u3002"),(0,a.kt)("a",{name:"h6l2a"}),(0,a.kt)("h2",{id:"\u4ea7\u54c1\u5e94\u7528\u573a\u666f"},"\u4ea7\u54c1\u5e94\u7528\u573a\u666f"),(0,a.kt)("ul",null,(0,a.kt)("li",{parentName:"ul"},"\u5e38\u89c4C/S\u5e94\u7528\u4f7f\u7528\u573a\u666f\uff1a\u5f00\u53d1\u4f7f\u7528\u975e\u5e38\u65b9\u4fbf\uff0c\u8fde\u63a5\u9a8c\u8bc1\uff0c\u6570\u636e\u4e1a\u52a1\uff0c\u6587\u4ef6\u4f20\u8f93\u7b49\u4e00\u7cfb\u5217\u529f\u80fd\u5b8c\u5168\u96c6\u6210\u3002"),(0,a.kt)("li",{parentName:"ul"},"Unity\u6e38\u620f\u573a\u666f\uff1a\u6027\u80fd\u5353\u8d8a\uff0c\u529f\u80fd\u4e30\u5bcc\uff0c\u4f7f\u7528\u65b9\u4fbf\u3002 ",(0,a.kt)("a",{name:"h50Dz"}))),(0,a.kt)("h2",{id:"\u670d\u52a1\u67b6\u6784"},"\u670d\u52a1\u67b6\u6784"),(0,a.kt)("ul",null,(0,a.kt)("li",{parentName:"ul"},"\u5176\u4f20\u8f93\u67b6\u6784\u662f\u57fa\u4e8eChannel\u5de5\u4f5c\u7684\u3002\u6240\u4ee5\u5f53\u5728\u540c\u4e00\u65f6\u95f4\uff0c\u53ef\u8fdb\u884c\u591a\u4e2a\u4f20\u8f93\u5e76\u884c\uff0c\u4e14\u6570\u636e\u4e92\u4e0d\u5f71\u54cd\u3002"),(0,a.kt)("li",{parentName:"ul"},"\u5728\u6587\u4ef6\u4f20\u8f93\u65f6\uff0c\u6bcf\u4e2a\u8fde\u63a5\u7aef\u548c\u670d\u52a1\u5668\u5747\u662f\u5e73\u7b49\u6743\u5229\u7684\uff0c\u6240\u4ee5RRQM\u5c06\u5176\u547d\u540d\u4e3a\u5bf9\u70b9\u3002\u4efb\u610f\u4e24\u4e2a\u5bf9\u70b9\u4e4b\u95f4\u5747\u53efPull\uff08\u62c9\u53d6\u6216\u4e0b\u8f7d\uff09\u6216Push\uff08\u63a8\u9001\u6216\u4e0a\u4f20\uff09\u6587\u4ef6\uff0c\u4f8b\u5982\u4e0b\u56fe\u4e2d\uff0cClient1\u3001SocketClient1\u3001Client2\u3001SocketClient2\u56db\u4e2a\u4e92\u76f8\u4e3a\u5bf9\u70b9\uff0c\u5747\u53ef\u81ea\u7531\u4f20\u8f93\u6587\u4ef6\u3002")),(0,a.kt)("h2",{id:"\u4e00\u8bf4\u660e"},"\u4e00\u3001\u8bf4\u660e"),(0,a.kt)("p",null,"\u6587\u4ef6\u4f20\u8f93\u662f\u6bcf\u4e2a\u6846\u67b6\u90fd\u9700\u8981\u7684\u529f\u80fd\uff0c\u4e5f\u662f\u68c0\u9a8c\u4e00\u4e2a\u6846\u67b6\u6027\u80fd\u7684\u975e\u5e38\u91cd\u8981\u7684\u6307\u6807\u3002"),(0,a.kt)("p",null,"TouchRpc\u5f00\u8f9f\u4e86\u5bf9\u70b9\u6587\u4ef6\u4f20\u8f93\u3002\u5373\uff0c\u5f53\u5ba2\u6237\u7aef\u8fde\u63a5\u670d\u52a1\u5668\u4ee5\u540e\uff0c\u4e24\u8005\u53ef\u4ee5\u4efb\u610f\uff0c\u968f\u65f6\u7684\u4e92\u76f8\u53d1\u9001\u6587\u4ef6\u3002\u4e0d\u4ec5\u5982\u6b64\uff0c\u5373\u4f7f\u662f\u5ba2\u6237\u7aef\u4e4b\u95f4\uff0c\u53ef\u4ee5\u53d1\u9001\u6587\u4ef6\u3002"),(0,a.kt)("p",null,"\u4e0b\u5217\u793a\u4f8b\u4ec5\u6f14\u793a\u7531",(0,a.kt)("strong",{parentName:"p"},"TcpTouchRpcClient"),"\u5230",(0,a.kt)("strong",{parentName:"p"},"TcpTouchRpcService"),"\uff08\u5b9e\u9645\u4e0a\u662f",(0,a.kt)("strong",{parentName:"p"},"TcpTouchRpcSocketClient"),"\uff09\u7684\u64cd\u4f5c\u3002"),(0,a.kt)("p",null,"\u5bf9\u70b9\u4e4b\u95f4\u53ef\u4ee5\u4efb\u610fpull\uff08\u62c9\u53d6\uff09\u3001push\uff08\u63a8\u9001\uff09\u6587\u4ef6\u3002",(0,a.kt)("strong",{parentName:"p"},"\u63a5\u6536\u5bf9\u70b9"),"\u53ef\u4ee5\u8ba2\u9605",(0,a.kt)("strong",{parentName:"p"},"FileTransfering"),"\u548c",(0,a.kt)("strong",{parentName:"p"},"FileTransfered"),"\u4e8b\u4ef6\uff0c\u6765\u83b7\u53d6\u76f8\u5173\u4fe1\u606f\uff0c\u53d1\u8d77\u5bf9\u70b9\u76f4\u63a5\u901a\u8fc7\u4f20\u8f93\u63a7\u5236\u5668\u6216\u8fd4\u56de\u503c\u83b7\u53d6\u4f20\u8f93\u4fe1\u606f\u3002"),(0,a.kt)("p",null,"\u503c\u5f97\u6ce8\u610f\u7684\u662f\uff0c",(0,a.kt)("strong",{parentName:"p"},"FileTransfered"),"\u4e8b\u4ef6\u7684\u89e6\u53d1\u5e76",(0,a.kt)("strong",{parentName:"p"},"\u4e0d\u610f\u5473\u7740\u5b8c\u6210\u4f20\u8f93"),"\uff0c\u5177\u4f53\u7ed3\u679c\u8fd8\u8981\u901a\u8fc7",(0,a.kt)("strong",{parentName:"p"},"Result"),"\u5c5e\u6027\u503c\u8fdb\u884c\u5224\u65ad\u3002 ",(0,a.kt)("a",{name:"sKmQe"})),(0,a.kt)("h2",{id:"\u4e8cpull\u6587\u4ef6"},"\u4e8c\u3001Pull\u6587\u4ef6"),(0,a.kt)("p",null,"\u7531",(0,a.kt)("strong",{parentName:"p"},"TcpTouchRpcClient"),"\u5411",(0,a.kt)("strong",{parentName:"p"},"TcpTouchRpcService"),"\u53d1\u8d77Pull\u8bf7\u6c42\u65f6\uff0c\u76f8\u5f53\u4e8e\u7531\u5ba2\u6237\u7aef\u4ece\u670d\u52a1\u5668\u4e0b\u8f7d\u6587\u4ef6\u3002"),(0,a.kt)("p",null,(0,a.kt)("strong",{parentName:"p"},"\u54cd\u5e94\u6d41\u7a0b\uff1a")),(0,a.kt)("ol",null,(0,a.kt)("li",{parentName:"ol"},"\u53d1\u8d77Pull\u8bf7\u6c42\u3002"),(0,a.kt)("li",{parentName:"ol"},"\u63a5\u6536\u5bf9\u70b9\uff08\u5373\u6b64\u5904\u7684\u670d\u52a1\u5668\uff09\u89e6\u53d1",(0,a.kt)("strong",{parentName:"li"},"FileTransfering"),"\u4e8b\u4ef6\u3002"),(0,a.kt)("li",{parentName:"ol"},"\u8fd4\u56de\u6587\u4ef6\u4fe1\u606f\uff0c\u7136\u540e\u68c0\u9a8c\u662f\u5426\u7eed\u4f20\u7b49\uff0c\u7136\u540e\u5f00\u59cb\u63a5\u6536\u3002"),(0,a.kt)("li",{parentName:"ol"},"\u63a5\u6536\u5b8c\u6210\u6216\u5f02\u5e38\u3002"),(0,a.kt)("li",{parentName:"ol"},(0,a.kt)("strong",{parentName:"li"},"\u63a5\u6536\u5bf9\u70b9"),"\u89e6\u53d1",(0,a.kt)("strong",{parentName:"li"},"FileTransfered"),"\u4e8b\u4ef6\u3002"),(0,a.kt)("li",{parentName:"ol"},(0,a.kt)("strong",{parentName:"li"},"\u53d1\u8d77\u5bf9\u70b9"),"\u51fd\u6570\u8fd4\u56de\uff0c\u63a7\u5236\u5668\u72b6\u6001\u6539\u53d8\u3002")),(0,a.kt)("p",null,(0,a.kt)("strong",{parentName:"p"},"\u5177\u4f53\u8bf7\u6c42\uff1a")),(0,a.kt)("table",null,(0,a.kt)("thead",{parentName:"table"},(0,a.kt)("tr",{parentName:"thead"},(0,a.kt)("th",{parentName:"tr",align:null},"\u8bf7\u6c42\u53c2\u6570"),(0,a.kt)("th",{parentName:"tr",align:null},"\u53c2\u6570\u5c5e\u6027"),(0,a.kt)("th",{parentName:"tr",align:null},"\u8bf7\u6c42\u53c2\u6570\u5c5e\u6027\u63cf\u8ff0")))),(0,a.kt)("p",null,"| ",(0,a.kt)("strong",{parentName:"p"},"FileOperator\uff1a"),"FileOperator\u662f\u672c\u6b21\u4f20\u8f93\u7684\u8bf7\u6c42\u64cd\u4f5c\u5668\uff0c\u4e3b\u8981\u7528\u4e8e\u83b7\u53d6\u4f20\u8f93\u8fdb\u5ea6\u3001\u901f\u5ea6\u3001\u72b6\u6001\u4ee5\u53ca\u53d6\u6d88\u4f20\u8f93\u7b49\u64cd\u4f5c\u3002",(0,a.kt)("strong",{parentName:"p"},"\u63a5\u6536\u65b9\u7684\u63a7\u5236\u5668\u4eceFileTransfering\u4e8b\u4ef6\u7684\u53c2\u6570e\u4e2d\u83b7\u5f97\u3002")),(0,a.kt)("p",null,"| ResourcePath | ResourcePath\u5c5e\u6027\u4e3a\u8bf7\u6c42\u6587\u4ef6\u5728\u63a5\u6536\u5bf9\u70b9\u7684\u8def\u5f84\uff0c\u5f53\u8be5\u503c\u4e3a\u76f8\u5bf9\u8def\u5f84\u65f6\uff0c\u4f1a\u4e0e\u63a5\u6536\u5bf9\u70b9\u7684RootPath\u7ec4\u5408\u8def\u5f84\u3002\u5f53\u4e3a\u7edd\u5bf9\u8def\u5f84\u65f6\uff0c\u5219\u4f1a\u76f4\u63a5\u8bbf\u95ee\u8def\u5f84\u6587\u4ef6",(0,a.kt)("strong",{parentName:"p"},"\uff08\u6b64\u65f6\u5982\u679c\u4e0d\u5728\u5bf9\u70b9\u8bbe\u7f6e\u6761\u4ef6\uff0c\u5219\u6709\u53ef\u80fd\u4f1a\u6709\u6587\u4ef6\u5b89\u5168\u9690\u60a3\uff0c\u8bbe\u7f6e\u8be6\u60c5"),(0,a.kt)("a",{parentName:"p",href:"https://www.yuque.com/eo2w71/rrqm/motlw5#zZBRq"},"\u94fe\u63a5"),(0,a.kt)("strong",{parentName:"p"},"\uff09"),"\u3002 |\n| | SavePath | SavePath\u5c5e\u6027\u662f\u53d1\u8d77\u5bf9\u70b9\u672c\u5730\u7684\u4fdd\u5b58\u8def\u5f84\u3002 |\n| | Flags | \u53ef\u901a\u8fc7\u53e0\u52a0\u4f4d\u57df\u7684\u5f62\u5f0f\uff0c\u5c1d\u8bd5\u65ad\u70b9\u7eed\u4f20\u3002 |\n| | CompletedLength | \u5df2\u5b8c\u6210\u6d41\u957f\u5ea6\u3002 |\n| | Speed \u51fd\u6570 | \u4ece\u4e0a\u6b21\u83b7\u53d6\u5230\u6b64\u6b21\u83b7\u5f97\u7684\u901f\u5ea6\u3002\u4e00\u822c\u8bf7\u6bcf\u79d2\u949f\u8c03\u7528\u4e00\u6b21\u83b7\u53d6\u901f\u5ea6\u503c\u3002 |\n| | Progress | \u4f20\u8f93\u8fdb\u5ea6\uff0c\u8303\u56f40-1\u3002 |\n| | Result | \u83b7\u53d6\u4f20\u8f93\u72b6\u6001\u4ee5\u53ca\u72b6\u6001\u4fe1\u606f\u3002\u5f53ResultCode\u4e3aDefault\u65f6\uff0c\u610f\u5473\u7740\u4f20\u8f93\u6b63\u5728\u8fdb\u884c\u3002 |\n| | Token | CancellationToken\u7c7b\u578b\u7684\u53ef\u53d6\u6d88\u4ee4\u7bad\u3002 |\n| | Metadata | string\u7c7b\u578b\u7684\u952e\u503c\u5bf9\uff0c\u7528\u4e8e\u548c\u63a5\u6536\u65b9\u4ea4\u4e92\u6570\u636e\u3002 |"),(0,a.kt)("a",{name:"JeQp8"}),(0,a.kt)("h3",{id:"\u793a\u4f8b\u4ee3\u7801"},"\u793a\u4f8b\u4ee3\u7801\uff1a"),(0,a.kt)("p",null,(0,a.kt)("strong",{parentName:"p"},"\u3010\u670d\u52a1\u5668\u3011")),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-csharp"},'var service = new TouchSocketConfig()//\u914d\u7f6e\n .SetListenIPHosts(new IPHost[] { new IPHost(7789) })\n .UsePlugin()\n .ConfigureContainer(a =>\n {\n a.AddConsoleLogger();\n a.AddFileLogger();\n })\n .ConfigurePlugins(a =>\n {\n a.Add<MyPlugin>();\n })\n .SetVerifyToken("File")//\u8fde\u63a5\u9a8c\u8bc1\u53e3\u4ee4\u3002\n .BuildWithTcpTouchRpcService();//\u6b64\u5904build\u76f8\u5f53\u4e8enew TcpTouchRpcService\uff0c\u7136\u540eSetup\uff0c\u7136\u540eStart\u3002\nservice.Logger.Info("\u670d\u52a1\u5668\u6210\u529f\u542f\u52a8");\n')),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-csharp"},'class MyPlugin : TouchRpcPluginBase<TcpTouchRpcSocketClient>\n{\n protected override void OnFileTransfering(TcpTouchRpcSocketClient client, FileOperationEventArgs e)\n {\n e.IsPermitOperation = true;//\u8fd0\u884c\u64cd\u4f5c\n\n //\u6709\u53ef\u80fd\u662f\u4e0a\u4f20\uff0c\u4e5f\u6709\u53ef\u80fd\u662f\u4e0b\u8f7d\n client.Logger.Info($"\u6709\u5ba2\u6237\u7aef\u8bf7\u6c42\u4f20\u8f93\u6587\u4ef6\uff0cID={client.ID}\uff0c\u8bf7\u6c42\u7c7b\u578b={e.TransferType}\uff0c\u8bf7\u6c42\u6587\u4ef6\u540d={e.ResourcePath}");\n }\n\n protected override void OnFileTransfered(TcpTouchRpcSocketClient client, FileTransferStatusEventArgs e)\n {\n //\u4f20\u8f93\u7ed3\u675f\uff0c\u4f46\u662f\u4e0d\u4e00\u5b9a\u6210\u529f\uff0c\u9700\u8981\u4ecee.Result\u5224\u65ad\u72b6\u6001\u3002\n client.Logger.Info($"\u5ba2\u6237\u7aef\u4f20\u8f93\u6587\u4ef6\u7ed3\u675f\uff0cID={client.ID}\uff0c\u8bf7\u6c42\u7c7b\u578b={e.TransferType}\uff0c\u6587\u4ef6\u540d={e.ResourcePath}\uff0c\u8bf7\u6c42\u72b6\u6001={e.Result}");\n }\n\n protected override void OnHandshaked(TcpTouchRpcSocketClient client, VerifyOptionEventArgs e)\n {\n client.Logger.Info($"\u6709\u5ba2\u6237\u7aef\u6210\u529f\u9a8c\u8bc1\uff0cID={client.ID}");\n }\n\n protected override void OnDisconnected(TcpTouchRpcSocketClient client, ClientDisconnectedEventArgs e)\n {\n client.Logger.Info($"\u6709\u5ba2\u6237\u7aef\u65ad\u5f00\uff0cID={client.ID}");\n base.OnDisconnected(client, e);\n }\n}\n')),(0,a.kt)("p",null,"\u3010\u5ba2\u6237\u7aef\u3011"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-csharp"},'TcpTouchRpcClient client = new TouchSocketConfig()\n .SetRemoteIPHost("127.0.0.1:7789")\n .SetVerifyToken("File")\n .UsePlugin()\n .ConfigureContainer(a => \n {\n a.AddConsoleLogger();\n a.AddFileLogger();\n })\n .ConfigurePlugins(a =>\n {\n a.UseTouchRpcHeartbeat<TcpTouchRpcClient>();\n })\n .BuildWithTcpTouchRpcClient();\n\nclient.Logger.Info("\u8fde\u63a5\u6210\u529f");\n\nMetadata metadata = new Metadata();//\u4f20\u9012\u5230\u670d\u52a1\u5668\u7684\u5143\u6570\u636e\nmetadata.Add("1", "1");\nmetadata.Add("2", "2");\n\nFileOperator fileOperator = new FileOperator()//\u5b9e\u4f8b\u5316\u672c\u6b21\u4f20\u8f93\u7684\u63a7\u5236\u5668\uff0c\u7528\u4e8e\u83b7\u53d6\u4f20\u8f93\u8fdb\u5ea6\u3001\u901f\u5ea6\u3001\u72b6\u6001\u7b49\u3002\n{\n Flags = TransferFlags.BreakpointResume,//\u5c1d\u8bd5\u65ad\u70b9\u7eed\u4f20\uff0c\u4f7f\u7528\u65ad\u70b9\u7eed\u4f20\u65f6\uff0c\u4f1a\u9a8c\u8bc1MD5\u503c\n SavePath = $@"Windows.iso",//\u4fdd\u5b58\u8def\u5f84\n ResourcePath = @"D:\\System\\Windows.iso",//\u8bf7\u6c42\u8def\u5f84\n Metadata= metadata//\u4f20\u9012\u5230\u670d\u52a1\u5668\u7684\u5143\u6570\u636e\n};\n\nfileOperator.Timeout = TimeSpan.FromSeconds(60);//\u5f53\u4f20\u8f93\u5927\u6587\u4ef6\uff0c\u4e14\u542f\u7528\u65ad\u70b9\u7eed\u4f20\u65f6\uff0c\u670d\u52a1\u5668\u53ef\u80fd\u4f1a\u5148\u8ba1\u7b97MD5\uff0c\u800c\u5ef6\u65f6\u54cd\u5e94\uff0c\u6240\u4ee5\u9700\u8981\u8bbe\u7f6e\u8d85\u65f6\u65f6\u95f4\u3002\n\n//\u6b64\u5904\u7684\u4f5c\u7528\u76f8\u5f53\u4e8eTimer\uff0c\u5b9a\u65f6\u6bcf\u79d2\u8f93\u51fa\u5f53\u524d\u7684\u4f20\u8f93\u8fdb\u5ea6\u548c\u901f\u5ea6\u3002\nLoopAction loopAction = LoopAction.CreateLoopAction(-1, 1000, (loop) =>\n{\n if (fileOperator.Result.ResultCode != ResultCode.Default)\n {\n loop.Dispose();\n }\n\n client.Logger.Info($"\u8fdb\u5ea6\uff1a{fileOperator.Progress}\uff0c\u901f\u5ea6\uff1a{fileOperator.Speed()}");\n});\n\nloopAction.RunAsync();\n\n\n\n//\u6b64\u65b9\u6cd5\u4f1a\u963b\u585e\uff0c\u76f4\u5230\u4f20\u8f93\u7ed3\u675f\uff0c\u4e5f\u53ef\u4ee5\u4f7f\u7528PullFileAsync\nIResult result = client.PullFile(fileOperator);\n\nclient.Logger.Info(result.ToString());\n')),(0,a.kt)("a",{name:"qZvBF"}),(0,a.kt)("h2",{id:"\u4e09push\u6587\u4ef6"},"\u4e09\u3001Push\u6587\u4ef6"),(0,a.kt)("p",null,"Push\u548cPull\u64cd\u4f5c\u4e00\u81f4\uff0c\u4ec5\u9700\u8981\u5728\u6700\u540e\u8c03\u7528PushFile\u5373\u53ef\u3002"),(0,a.kt)("a",{name:"VRKlH"}),(0,a.kt)("h2",{id:"\u56db\u5ba2\u6237\u7aef\u4e4b\u95f4\u4f20\u8f93\u6587\u4ef6"},"\u56db\u3001\u5ba2\u6237\u7aef\u4e4b\u95f4\u4f20\u8f93\u6587\u4ef6"),(0,a.kt)("p",null,"\u8be5\u529f\u80fd\u652f\u6301\u5ba2\u6237\u7aef\u4e4b\u95f4\u4f20\u8f93\u6587\u4ef6\uff0c\u4f7f\u7528\u65b9\u6cd5\u57fa\u672c\u4e00\u81f4\uff0c\u53ea\u9700\u8981\u989d\u5916\u589e\u52a0\u76ee\u6807Id\u5373\u53ef\u3002"),(0,a.kt)("p",null,"\u6b64\u5916\uff0c",(0,a.kt)("strong",{parentName:"p"},"\u670d\u52a1\u5668"),"\u4e5f\u9700\u8981\u540c\u610f\u8def\u7531\u3002\u9700\u8981\u6ce8\u610f\u7684\u662f\uff0c\u4f7f\u7528\u8be5\u65b9\u5f0f\u6587\u4ef6\u4f20\u8f93\u65f6\uff0c\u8fd8\u4f1a\u53d1\u8d77\u901a\u9053\u8def\u7531\uff0c\u6240\u4ee5\uff0c\u9700\u8981\u5141\u8bb8\u7684\u8def\u7531\u5e94\u8be5\u8fd8\u989d\u5916\u589e\u52a0",(0,a.kt)("strong",{parentName:"p"},"\u901a\u9053\u7c7b\u578b"),"\u3002"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-csharp"},"internal class MyTouchRpcPlugin : TouchRpcPluginBase\n{\n protected override void OnRouting(ITouchRpc client, PackageRouterEventArgs e)\n {\n if (e.RouterType== RouteType.PushFile||e.RouterType== RouteType.PullFile||e.RouterType== RouteType.CreateChannel)\n {\n e.IsPermitOperation = true;\n }\n base.OnRouting(client, e);\n }\n}\n")))}u.isMDXComponent=!0}}]);
\ No newline at end of file
"use strict";(self.webpackChunktouchsocket=self.webpackChunktouchsocket||[]).push([[2645],{3905:(e,n,t)=>{t.d(n,{Zo:()=>l,kt:()=>g});var r=t(7294);function o(e,n,t){return n in e?Object.defineProperty(e,n,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[n]=t,e}function a(e,n){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);n&&(r=r.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),t.push.apply(t,r)}return t}function c(e){for(var n=1;n<arguments.length;n++){var t=null!=arguments[n]?arguments[n]:{};n%2?a(Object(t),!0).forEach((function(n){o(e,n,t[n])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):a(Object(t)).forEach((function(n){Object.defineProperty(e,n,Object.getOwnPropertyDescriptor(t,n))}))}return e}function s(e,n){if(null==e)return{};var t,r,o=function(e,n){if(null==e)return{};var t,r,o={},a=Object.keys(e);for(r=0;r<a.length;r++)t=a[r],n.indexOf(t)>=0||(o[t]=e[t]);return o}(e,n);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r<a.length;r++)t=a[r],n.indexOf(t)>=0||Object.prototype.propertyIsEnumerable.call(e,t)&&(o[t]=e[t])}return o}var p=r.createContext({}),i=function(e){var n=r.useContext(p),t=n;return e&&(t="function"==typeof e?e(n):c(c({},n),e)),t},l=function(e){var n=i(e.components);return r.createElement(p.Provider,{value:n},e.children)},u={inlineCode:"code",wrapper:function(e){var n=e.children;return r.createElement(r.Fragment,{},n)}},d=r.forwardRef((function(e,n){var t=e.components,o=e.mdxType,a=e.originalType,p=e.parentName,l=s(e,["components","mdxType","originalType","parentName"]),d=i(t),g=o,m=d["".concat(p,".").concat(g)]||d[g]||u[g]||a;return t?r.createElement(m,c(c({ref:n},l),{},{components:t})):r.createElement(m,c({ref:n},l))}));function g(e,n){var t=arguments,o=n&&n.mdxType;if("string"==typeof e||o){var a=t.length,c=new Array(a);c[0]=d;var s={};for(var p in n)hasOwnProperty.call(n,p)&&(s[p]=n[p]);s.originalType=e,s.mdxType="string"==typeof e?e:o,c[1]=s;for(var i=2;i<a;i++)c[i]=t[i];return r.createElement.apply(null,c)}return r.createElement.apply(null,t)}d.displayName="MDXCreateElement"},6559:(e,n,t)=>{t.r(n),t.d(n,{assets:()=>p,contentTitle:()=>c,default:()=>u,frontMatter:()=>a,metadata:()=>s,toc:()=>i});var r=t(7462),o=(t(7294),t(3905));const a={id:"generateproxysourcegeneratordemo",title:"SG\u4ee3\u7406\u63a8\u8350\u5199\u6cd5"},c=void 0,s={unversionedId:"generateproxysourcegeneratordemo",id:"generateproxysourcegeneratordemo",title:"SG\u4ee3\u7406\u63a8\u8350\u5199\u6cd5",description:"\u4e00\u3001\u58f0\u660e\u63a5\u53e3",source:"@site/docs/generateproxysourcegeneratordemo.mdx",sourceDirName:".",slug:"/generateproxysourcegeneratordemo",permalink:"/touchsocket/docs/generateproxysourcegeneratordemo",draft:!1,editUrl:"https://gitee.com/rrqm_home/touchsocket/tree/master/handbook/docs/generateproxysourcegeneratordemo.mdx",tags:[],version:"current",lastUpdatedBy:"\u82e5\u6c5d\u68cb\u8317",lastUpdatedAt:1676382772,formattedLastUpdatedAt:"Feb 14, 2023",frontMatter:{id:"generateproxysourcegeneratordemo",title:"SG\u4ee3\u7406\u63a8\u8350\u5199\u6cd5"},sidebar:"docs",previous:{title:"\u4eceSourceGenerator\u83b7\u53d6\u4ee3\u7406",permalink:"/touchsocket/docs/generateproxyfromsourcegenerator"},next:{title:"\u4ea7\u54c1\u53ca\u67b6\u6784\u4ecb\u7ecd",permalink:"/touchsocket/docs/touchrpcdescription"}},p={},i=[{value:"\u4e00\u3001\u58f0\u660e\u63a5\u53e3",id:"\u4e00\u58f0\u660e\u63a5\u53e3",level:2},{value:"\u4e8c\u3001\u5b9e\u73b0\u63a5\u53e3",id:"\u4e8c\u5b9e\u73b0\u63a5\u53e3",level:2},{value:"\u4e09\u3001\u670d\u52a1\u6ce8\u518c\u3001\u542f\u52a8",id:"\u4e09\u670d\u52a1\u6ce8\u518c\u542f\u52a8",level:2},{value:"\u56db\u3001\u521b\u5efa\u5ba2\u6237\u7aef",id:"\u56db\u521b\u5efa\u5ba2\u6237\u7aef",level:2}],l={toc:i};function u(e){let{components:n,...t}=e;return(0,o.kt)("wrapper",(0,r.Z)({},l,t,{components:n,mdxType:"MDXLayout"}),(0,o.kt)("h2",{id:"\u4e00\u58f0\u660e\u63a5\u53e3"},"\u4e00\u3001\u58f0\u660e\u63a5\u53e3"),(0,o.kt)("p",null,"\u5728TouchSocketPro\u4e2d\uff0c\u5173\u4e8eRpc\uff0c\u6211\u4eec\u6709\u66f4\u4e3a\u63a8\u8350\u7684\u5199\u6cd5\u3002\u8be6\u7ec6\u6b65\u9aa4\u5982\u4e0b\uff1a"),(0,o.kt)("p",null,"\uff081\uff09\u65b0\u5efa\u7c7b\u5e93\u9879\u76ee\uff0c\u547d\u540d\u4e3a",(0,o.kt)("inlineCode",{parentName:"p"},"RpcClassLibrary"),"\u3002\u7136\u540e\u5728\u8be5\u7a0b\u5e8f\u96c6\u4e2d\uff0c\u5b9a\u4e49\u670d\u52a1\u63a5\u53e3\uff0c\u548c\u63a5\u53e3\u53c2\u6570\u5b9e\u4f53\u7c7b\u3002"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-csharp"},"/// <summary>\n/// \u5b9a\u4e49\u670d\u52a1\u63a5\u53e3\u3002\n/// </summary>\n[GeneratorRpcProxy]\npublic interface IUserServer:IRpcServer\n{\n [GeneratorRpcMethod]\n [TouchRpc]\n LoginResponse Login(LoginRequest request);\n}\n")),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-csharp"},"public class LoginRequest:RequestBase\n{\n public string Account { get; set; }\n public string Password { get; set; }\n}\n\npublic class LoginResponse : ResponseBase\n{\n}\n\n//\u4e0b\u9762\u4e24\u4e2a\u662f\u8bf7\u6c42\u548c\u54cd\u5e94\u7684\u57fa\u7c7b\uff0c\u53ef\u4ee5\u6839\u636e\u4e1a\u52a1\u589e\u52a0\u5176\u4ed6\u5b57\u6bb5\npublic class RequestBase\n{\n}\n\npublic class ResponseBase\n{\n public Result Result { get; set; }\n}\n")),(0,o.kt)("h2",{id:"\u4e8c\u5b9e\u73b0\u63a5\u53e3"},"\u4e8c\u3001\u5b9e\u73b0\u63a5\u53e3"),(0,o.kt)("p",null,"\u65b0\u5efa\u7c7b\u5e93\u9879\u76ee\uff0c\u547d\u540d",(0,o.kt)("inlineCode",{parentName:"p"},"RpcImplementationClassLibrary"),"\uff0c\u5f15\u7528",(0,o.kt)("inlineCode",{parentName:"p"},"RpcClassLibrary"),"\u9879\u76ee\uff0c\u7136\u540e\u7528\u4e8e\u5b9e\u73b0\u63a5\u53e3\u3002"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-csharp"},"public class UserServer : IUserServer\n{\n public LoginResponse Login(LoginRequest request)\n {\n //\u8fd4\u56de\u5047\u903b\u8f91\n return new LoginResponse() { Result=Result.Success};\n }\n}\n")),(0,o.kt)("h2",{id:"\u4e09\u670d\u52a1\u6ce8\u518c\u542f\u52a8"},"\u4e09\u3001\u670d\u52a1\u6ce8\u518c\u3001\u542f\u52a8"),(0,o.kt)("p",null,"\u65b0\u5efa\u63a7\u5236\u53f0\u9879\u76ee\uff0c\u4f5c\u4e3a\u670d\u52a1\u5668\uff0c\u9700\u8981\u540c\u65f6\u5f15\u7528",(0,o.kt)("inlineCode",{parentName:"p"},"RpcImplementationClassLibrary"),"\u548c",(0,o.kt)("inlineCode",{parentName:"p"},"RpcClassLibrary"),"\u3002"),(0,o.kt)("p",null,"\u5982\u679c\u4f5c\u4e3a\u670d\u52a1\u5668\uff0c\u9700\u8981\u6309\u63a5\u53e3\u6ce8\u518c\u670d\u52a1"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-csharp"},'var service = new TcpTouchRpcService();\nvar config = new TouchSocketConfig()//\u914d\u7f6e\n .SetListenIPHosts(new IPHost[] { new IPHost(7789) })\n .ConfigureContainer(a =>\n {\n a.AddConsoleLogger();\n a.AddFileLogger();\n })\n .ConfigureRpcStore(a => \n {\n a.RegisterServer<IUserServer, UserServer>();\n })\n .SetVerifyToken("TouchRpc");//\u8bbe\u5b9a\u8fde\u63a5\u53e3\u4ee4\uff0c\u4f5c\u7528\u7c7b\u4f3c\u8d26\u53f7\u5bc6\u7801\n\nservice.Setup(config)\n .Start();\n\nservice.Logger.Info($"{service.GetType().Name}\u5df2\u542f\u52a8");\n')),(0,o.kt)("h2",{id:"\u56db\u521b\u5efa\u5ba2\u6237\u7aef"},"\u56db\u3001\u521b\u5efa\u5ba2\u6237\u7aef"),(0,o.kt)("p",null,"\u4f5c\u4e3a\u5ba2\u6237\u7aef\u4ec5\u5f15\u7528",(0,o.kt)("inlineCode",{parentName:"p"},"RpcClassLibrary"),"\u5373\u53ef\u3002\u76f4\u63a5\u8c03\u7528\u5373\u53ef\u3002"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-csharp",metastring:"{8}","{8}":!0},'TcpTouchRpcClient client = new TcpTouchRpcClient();\nclient.Setup(new TouchSocketConfig()\n .SetRemoteIPHost("127.0.0.1:7789")\n .SetVerifyToken("TouchRpc"));\nclient.Connect();\n\n//Loging\u5373\u4e3a\u5728RpcClassLibrary\u4e2d\u81ea\u52a8\u751f\u6210\u7684\u9879\u76ee\nvar response = client.Login(new RpcClassLibrary.Models.LoginRequest() { Account= "Account",Password= "Account" });\nConsole.WriteLine(response.Result);\n')),(0,o.kt)("p",null,(0,o.kt)("a",{parentName:"p",href:"https://gitee.com/RRQM_Home/TouchSocket/tree/master/examples/TouchRpc%E7%AE%80%E5%8D%95%E7%A4%BA%E4%BE%8B/%E6%8E%A8%E8%8D%90%E7%94%A8%E6%B3%95"},"\u63a8\u8350\u5199\u6cd5\u793a\u4f8b")))}u.isMDXComponent=!0}}]);
\ No newline at end of file
"use strict";(self.webpackChunktouchsocket=self.webpackChunktouchsocket||[]).push([[2645],{3905:(e,n,r)=>{r.d(n,{Zo:()=>l,kt:()=>m});var t=r(7294);function o(e,n,r){return n in e?Object.defineProperty(e,n,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[n]=r,e}function a(e,n){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var t=Object.getOwnPropertySymbols(e);n&&(t=t.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),r.push.apply(r,t)}return r}function c(e){for(var n=1;n<arguments.length;n++){var r=null!=arguments[n]?arguments[n]:{};n%2?a(Object(r),!0).forEach((function(n){o(e,n,r[n])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(r)):a(Object(r)).forEach((function(n){Object.defineProperty(e,n,Object.getOwnPropertyDescriptor(r,n))}))}return e}function s(e,n){if(null==e)return{};var r,t,o=function(e,n){if(null==e)return{};var r,t,o={},a=Object.keys(e);for(t=0;t<a.length;t++)r=a[t],n.indexOf(r)>=0||(o[r]=e[r]);return o}(e,n);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(t=0;t<a.length;t++)r=a[t],n.indexOf(r)>=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}var p=t.createContext({}),i=function(e){var n=t.useContext(p),r=n;return e&&(r="function"==typeof e?e(n):c(c({},n),e)),r},l=function(e){var n=i(e.components);return t.createElement(p.Provider,{value:n},e.children)},u={inlineCode:"code",wrapper:function(e){var n=e.children;return t.createElement(t.Fragment,{},n)}},g=t.forwardRef((function(e,n){var r=e.components,o=e.mdxType,a=e.originalType,p=e.parentName,l=s(e,["components","mdxType","originalType","parentName"]),g=i(r),m=o,d=g["".concat(p,".").concat(m)]||g[m]||u[m]||a;return r?t.createElement(d,c(c({ref:n},l),{},{components:r})):t.createElement(d,c({ref:n},l))}));function m(e,n){var r=arguments,o=n&&n.mdxType;if("string"==typeof e||o){var a=r.length,c=new Array(a);c[0]=g;var s={};for(var p in n)hasOwnProperty.call(n,p)&&(s[p]=n[p]);s.originalType=e,s.mdxType="string"==typeof e?e:o,c[1]=s;for(var i=2;i<a;i++)c[i]=r[i];return t.createElement.apply(null,c)}return t.createElement.apply(null,r)}g.displayName="MDXCreateElement"},6559:(e,n,r)=>{r.r(n),r.d(n,{assets:()=>p,contentTitle:()=>c,default:()=>u,frontMatter:()=>a,metadata:()=>s,toc:()=>i});var t=r(7462),o=(r(7294),r(3905));const a={id:"generateproxysourcegeneratordemo",title:"SG\u4ee3\u7406\u63a8\u8350\u5199\u6cd5"},c=void 0,s={unversionedId:"generateproxysourcegeneratordemo",id:"generateproxysourcegeneratordemo",title:"SG\u4ee3\u7406\u63a8\u8350\u5199\u6cd5",description:"\u4e00\u3001\u58f0\u660e\u63a5\u53e3",source:"@site/docs/generateproxysourcegeneratordemo.mdx",sourceDirName:".",slug:"/generateproxysourcegeneratordemo",permalink:"/touchsocket/docs/generateproxysourcegeneratordemo",draft:!1,editUrl:"https://gitee.com/rrqm_home/touchsocket/tree/master/handbook/docs/generateproxysourcegeneratordemo.mdx",tags:[],version:"current",frontMatter:{id:"generateproxysourcegeneratordemo",title:"SG\u4ee3\u7406\u63a8\u8350\u5199\u6cd5"},sidebar:"docs",previous:{title:"\u4eceSourceGenerator\u83b7\u53d6\u4ee3\u7406",permalink:"/touchsocket/docs/generateproxyfromsourcegenerator"},next:{title:"\u4ea7\u54c1\u53ca\u67b6\u6784\u4ecb\u7ecd",permalink:"/touchsocket/docs/touchrpcdescription"}},p={},i=[{value:"\u4e00\u3001\u58f0\u660e\u63a5\u53e3",id:"\u4e00\u58f0\u660e\u63a5\u53e3",level:2},{value:"\u4e8c\u3001\u5b9e\u73b0\u63a5\u53e3",id:"\u4e8c\u5b9e\u73b0\u63a5\u53e3",level:2},{value:"\u4e09\u3001\u670d\u52a1\u6ce8\u518c\u3001\u542f\u52a8",id:"\u4e09\u670d\u52a1\u6ce8\u518c\u542f\u52a8",level:2},{value:"\u56db\u3001\u521b\u5efa\u5ba2\u6237\u7aef",id:"\u56db\u521b\u5efa\u5ba2\u6237\u7aef",level:2}],l={toc:i};function u(e){let{components:n,...r}=e;return(0,o.kt)("wrapper",(0,t.Z)({},l,r,{components:n,mdxType:"MDXLayout"}),(0,o.kt)("h2",{id:"\u4e00\u58f0\u660e\u63a5\u53e3"},"\u4e00\u3001\u58f0\u660e\u63a5\u53e3"),(0,o.kt)("p",null,"\u5728TouchSocketPro\u4e2d\uff0c\u5173\u4e8eRpc\uff0c\u6211\u4eec\u6709\u66f4\u4e3a\u63a8\u8350\u7684\u5199\u6cd5\u3002\u8be6\u7ec6\u6b65\u9aa4\u5982\u4e0b\uff1a"),(0,o.kt)("p",null,"\uff081\uff09\u65b0\u5efa\u7c7b\u5e93\u9879\u76ee\uff0c\u547d\u540d\u4e3a",(0,o.kt)("inlineCode",{parentName:"p"},"RpcClassLibrary"),"\u3002\u7136\u540e\u5728\u8be5\u7a0b\u5e8f\u96c6\u4e2d\uff0c\u5b9a\u4e49\u670d\u52a1\u63a5\u53e3\uff0c\u548c\u63a5\u53e3\u53c2\u6570\u5b9e\u4f53\u7c7b\u3002"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-csharp"},"/// <summary>\n/// \u5b9a\u4e49\u670d\u52a1\u63a5\u53e3\u3002\n/// </summary>\n[GeneratorRpcProxy]\npublic interface IUserServer:IRpcServer\n{\n [GeneratorRpcMethod]\n [TouchRpc]\n LoginResponse Login(LoginRequest request);\n}\n")),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-csharp"},"public class LoginRequest:RequestBase\n{\n public string Account { get; set; }\n public string Password { get; set; }\n}\n\npublic class LoginResponse : ResponseBase\n{\n}\n\n//\u4e0b\u9762\u4e24\u4e2a\u662f\u8bf7\u6c42\u548c\u54cd\u5e94\u7684\u57fa\u7c7b\uff0c\u53ef\u4ee5\u6839\u636e\u4e1a\u52a1\u589e\u52a0\u5176\u4ed6\u5b57\u6bb5\npublic class RequestBase\n{\n}\n\npublic class ResponseBase\n{\n public Result Result { get; set; }\n}\n")),(0,o.kt)("h2",{id:"\u4e8c\u5b9e\u73b0\u63a5\u53e3"},"\u4e8c\u3001\u5b9e\u73b0\u63a5\u53e3"),(0,o.kt)("p",null,"\u65b0\u5efa\u7c7b\u5e93\u9879\u76ee\uff0c\u547d\u540d",(0,o.kt)("inlineCode",{parentName:"p"},"RpcImplementationClassLibrary"),"\uff0c\u5f15\u7528",(0,o.kt)("inlineCode",{parentName:"p"},"RpcClassLibrary"),"\u9879\u76ee\uff0c\u7136\u540e\u7528\u4e8e\u5b9e\u73b0\u63a5\u53e3\u3002"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-csharp"},"public class UserServer : IUserServer\n{\n public LoginResponse Login(LoginRequest request)\n {\n //\u8fd4\u56de\u5047\u903b\u8f91\n return new LoginResponse() { Result=Result.Success};\n }\n}\n")),(0,o.kt)("h2",{id:"\u4e09\u670d\u52a1\u6ce8\u518c\u542f\u52a8"},"\u4e09\u3001\u670d\u52a1\u6ce8\u518c\u3001\u542f\u52a8"),(0,o.kt)("p",null,"\u65b0\u5efa\u63a7\u5236\u53f0\u9879\u76ee\uff0c\u4f5c\u4e3a\u670d\u52a1\u5668\uff0c\u9700\u8981\u540c\u65f6\u5f15\u7528",(0,o.kt)("inlineCode",{parentName:"p"},"RpcImplementationClassLibrary"),"\u548c",(0,o.kt)("inlineCode",{parentName:"p"},"RpcClassLibrary"),"\u3002"),(0,o.kt)("p",null,"\u5982\u679c\u4f5c\u4e3a\u670d\u52a1\u5668\uff0c\u9700\u8981\u6309\u63a5\u53e3\u6ce8\u518c\u670d\u52a1"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-csharp"},'var service = new TcpTouchRpcService();\nvar config = new TouchSocketConfig()//\u914d\u7f6e\n .SetListenIPHosts(new IPHost[] { new IPHost(7789) })\n .ConfigureContainer(a =>\n {\n a.AddConsoleLogger();\n a.AddFileLogger();\n })\n .ConfigureRpcStore(a => \n {\n a.RegisterServer<IUserServer, UserServer>();\n })\n .SetVerifyToken("TouchRpc");//\u8bbe\u5b9a\u8fde\u63a5\u53e3\u4ee4\uff0c\u4f5c\u7528\u7c7b\u4f3c\u8d26\u53f7\u5bc6\u7801\n\nservice.Setup(config)\n .Start();\n\nservice.Logger.Info($"{service.GetType().Name}\u5df2\u542f\u52a8");\n')),(0,o.kt)("h2",{id:"\u56db\u521b\u5efa\u5ba2\u6237\u7aef"},"\u56db\u3001\u521b\u5efa\u5ba2\u6237\u7aef"),(0,o.kt)("p",null,"\u4f5c\u4e3a\u5ba2\u6237\u7aef\u4ec5\u5f15\u7528",(0,o.kt)("inlineCode",{parentName:"p"},"RpcClassLibrary"),"\u5373\u53ef\u3002\u76f4\u63a5\u8c03\u7528\u5373\u53ef\u3002"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-csharp",metastring:"{8}","{8}":!0},'TcpTouchRpcClient client = new TcpTouchRpcClient();\nclient.Setup(new TouchSocketConfig()\n .SetRemoteIPHost("127.0.0.1:7789")\n .SetVerifyToken("TouchRpc"));\nclient.Connect();\n\n//Loging\u5373\u4e3a\u5728RpcClassLibrary\u4e2d\u81ea\u52a8\u751f\u6210\u7684\u9879\u76ee\nvar response = client.Login(new RpcClassLibrary.Models.LoginRequest() { Account= "Account",Password= "Account" });\nConsole.WriteLine(response.Result);\n')),(0,o.kt)("p",null,(0,o.kt)("a",{parentName:"p",href:"https://gitee.com/RRQM_Home/TouchSocket/tree/master/examples/TouchRpc%E7%AE%80%E5%8D%95%E7%A4%BA%E4%BE%8B/%E6%8E%A8%E8%8D%90%E7%94%A8%E6%B3%95"},"\u63a8\u8350\u5199\u6cd5\u793a\u4f8b")))}u.isMDXComponent=!0}}]);
\ No newline at end of file
"use strict";(self.webpackChunktouchsocket=self.webpackChunktouchsocket||[]).push([[969],{2776:s=>{s.exports=JSON.parse('{"name":"@easyops-cn/docusaurus-search-local","id":"default"}')}}]); "use strict";(self.webpackChunktouchsocket=self.webpackChunktouchsocket||[]).push([[230],{2776:s=>{s.exports=JSON.parse('{"name":"@easyops-cn/docusaurus-search-local","id":"default"}')}}]);
\ No newline at end of file \ No newline at end of file
"use strict";(self.webpackChunktouchsocket=self.webpackChunktouchsocket||[]).push([[5873],{3905:(e,t,n)=>{n.d(t,{Zo:()=>p,kt:()=>g});var a=n(7294);function r(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function l(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);t&&(a=a.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,a)}return n}function o(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?l(Object(n),!0).forEach((function(t){r(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):l(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function c(e,t){if(null==e)return{};var n,a,r=function(e,t){if(null==e)return{};var n,a,r={},l=Object.keys(e);for(a=0;a<l.length;a++)n=l[a],t.indexOf(n)>=0||(r[n]=e[n]);return r}(e,t);if(Object.getOwnPropertySymbols){var l=Object.getOwnPropertySymbols(e);for(a=0;a<l.length;a++)n=l[a],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(r[n]=e[n])}return r}var i=a.createContext({}),s=function(e){var t=a.useContext(i),n=t;return e&&(n="function"==typeof e?e(t):o(o({},t),e)),n},p=function(e){var t=s(e.components);return a.createElement(i.Provider,{value:t},e.children)},k={inlineCode:"code",wrapper:function(e){var t=e.children;return a.createElement(a.Fragment,{},t)}},u=a.forwardRef((function(e,t){var n=e.components,r=e.mdxType,l=e.originalType,i=e.parentName,p=c(e,["components","mdxType","originalType","parentName"]),u=s(n),g=r,d=u["".concat(i,".").concat(g)]||u[g]||k[g]||l;return n?a.createElement(d,o(o({ref:t},p),{},{components:n})):a.createElement(d,o({ref:t},p))}));function g(e,t){var n=arguments,r=t&&t.mdxType;if("string"==typeof e||r){var l=n.length,o=new Array(l);o[0]=u;var c={};for(var i in t)hasOwnProperty.call(t,i)&&(c[i]=t[i]);c.originalType=e,c.mdxType="string"==typeof e?e:r,o[1]=c;for(var s=2;s<l;s++)o[s]=n[s];return a.createElement.apply(null,o)}return a.createElement.apply(null,n)}u.displayName="MDXCreateElement"},2855:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>i,contentTitle:()=>o,default:()=>k,frontMatter:()=>l,metadata:()=>c,toc:()=>s});var a=n(7462),r=(n(7294),n(3905));const l={id:"createwebsocketservice",title:"\u521b\u5efaWebSocket\u670d\u52a1\u5668"},o=void 0,c={unversionedId:"createwebsocketservice",id:"createwebsocketservice",title:"\u521b\u5efaWebSocket\u670d\u52a1\u5668",description:"\u4e00\u3001\u8bf4\u660e",source:"@site/docs/createwebsocketservice.mdx",sourceDirName:".",slug:"/createwebsocketservice",permalink:"/touchsocket/docs/createwebsocketservice",draft:!1,editUrl:"https://gitee.com/rrqm_home/touchsocket/tree/master/handbook/docs/createwebsocketservice.mdx",tags:[],version:"current",lastUpdatedBy:"\u82e5\u6c5d\u68cb\u8317",lastUpdatedAt:1676451744,formattedLastUpdatedAt:"Feb 15, 2023",frontMatter:{id:"createwebsocketservice",title:"\u521b\u5efaWebSocket\u670d\u52a1\u5668"},sidebar:"docs",previous:{title:"\u4ea7\u54c1\u53ca\u67b6\u6784\u4ecb\u7ecd",permalink:"/touchsocket/docs/websocketdescription"},next:{title:"\u521b\u5efaWebSocket\u5ba2\u6237\u7aef",permalink:"/touchsocket/docs/createwebsocketclient"}},i={},s=[{value:"\u4e00\u3001\u8bf4\u660e",id:"\u4e00\u8bf4\u660e",level:2},{value:"\u4e8c\u3001\u53ef\u914d\u7f6e\u9879",id:"\u4e8c\u53ef\u914d\u7f6e\u9879",level:2},{value:"\u4e09\u3001\u652f\u6301\u63d2\u4ef6\u63a5\u53e3",id:"\u4e09\u652f\u6301\u63d2\u4ef6\u63a5\u53e3",level:2},{value:"IWebSocketPlugin",id:"iwebsocketplugin",level:3},{value:"\u56db\u3001\u521b\u5efaWebSocket\u670d\u52a1",id:"\u56db\u521b\u5efawebsocket\u670d\u52a1",level:2},{value:"4.1 \u7b80\u5355\u901a\u8fc7\u63d2\u4ef6\u521b\u5efa",id:"41-\u7b80\u5355\u901a\u8fc7\u63d2\u4ef6\u521b\u5efa",level:3},{value:"4.2 \u901a\u8fc7WebApi\u521b\u5efa",id:"42-\u901a\u8fc7webapi\u521b\u5efa",level:3},{value:"\u521b\u5efa\u57fa\u4e8eSsl\u7684WebSocket\u670d\u52a1",id:"\u521b\u5efa\u57fa\u4e8essl\u7684websocket\u670d\u52a1",level:2},{value:"\u63a5\u6536\u6d88\u606f",id:"\u63a5\u6536\u6d88\u606f",level:2},{value:"\u56de\u590d\u3001\u54cd\u5e94\u6570\u636e",id:"\u56de\u590d\u54cd\u5e94\u6570\u636e",level:2}],p={toc:s};function k(e){let{components:t,...n}=e;return(0,r.kt)("wrapper",(0,a.Z)({},p,n,{components:t,mdxType:"MDXLayout"}),(0,r.kt)("h2",{id:"\u4e00\u8bf4\u660e"},"\u4e00\u3001\u8bf4\u660e"),(0,r.kt)("p",null,"WebSocket\u662f\u57fa\u4e8eHttp\u534f\u8bae\u7684\u5347\u7ea7\u534f\u8bae\uff0c\u6240\u4ee5\u5e94\u5f53\u6302\u8f7d\u5728http\u670d\u52a1\u5668\u6267\u884c\u3002"),(0,r.kt)("h2",{id:"\u4e8c\u53ef\u914d\u7f6e\u9879"},"\u4e8c\u3001\u53ef\u914d\u7f6e\u9879"),(0,r.kt)("p",null,"\u7ee7\u627fHttpService"),(0,r.kt)("h2",{id:"\u4e09\u652f\u6301\u63d2\u4ef6\u63a5\u53e3"},"\u4e09\u3001\u652f\u6301\u63d2\u4ef6\u63a5\u53e3"),(0,r.kt)("p",null,"\u652f\u6301",(0,r.kt)("strong",{parentName:"p"},"ITcpPlugin\u3001IHttpPlugin\u3001IWebSocketPlugin")),(0,r.kt)("h3",{id:"iwebsocketplugin"},"IWebSocketPlugin"),(0,r.kt)("table",null,(0,r.kt)("thead",{parentName:"table"},(0,r.kt)("tr",{parentName:"thead"},(0,r.kt)("th",{parentName:"tr",align:null}),(0,r.kt)("th",{parentName:"tr",align:null}))),(0,r.kt)("tbody",{parentName:"table"},(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"OnHandshaking"),(0,r.kt)("td",{parentName:"tr",align:null},"\u8868\u793a\u5728\u5373\u5c06\u63e1\u624b\u8fde\u63a5\u65f6\u3002")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"OnHandshaked"),(0,r.kt)("td",{parentName:"tr",align:null},"\u8868\u793a\u5b8c\u6210\u63e1\u624b\u540e\u3002")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"OnHandleWSDataFrame"),(0,r.kt)("td",{parentName:"tr",align:null},"\u5f53\u6536\u5230WS\u6570\u636e\u65f6\u3002")))),(0,r.kt)("h2",{id:"\u56db\u521b\u5efawebsocket\u670d\u52a1"},"\u56db\u3001\u521b\u5efaWebSocket\u670d\u52a1"),(0,r.kt)("h3",{id:"41-\u7b80\u5355\u901a\u8fc7\u63d2\u4ef6\u521b\u5efa"},"4.1 \u7b80\u5355\u901a\u8fc7\u63d2\u4ef6\u521b\u5efa"),(0,r.kt)("p",null,"\u901a\u8fc7\u63d2\u4ef6\u521b\u5efa\u7684\u8bdd\uff0c\u53ea\u80fd\u6307\u5b9a\u4e00\u4e2a\u7279\u6b8aurl\u8def\u7531\u3002\u5982\u679c\u60f3\u83b7\u5f97\u8fde\u63a5\u524d\u7684Http\u8bf7\u6c42\uff0c\u4e5f\u5fc5\u987b\u518d\u6dfb\u52a0\u4e00\u4e2a\u5b9e\u73b0IWebSocketPlugin\u63a5\u53e3\u7684\u63d2\u4ef6\uff0c\u7136\u540e\u4eceOnHandshaking\u65b9\u6cd5\u4e2d\u6355\u83b7\u3002"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-csharp"},'var service = new HttpService();\nservice.Setup(new TouchSocketConfig()//\u52a0\u8f7d\u914d\u7f6e\n .UsePlugin()\n .SetListenIPHosts(new IPHost[] { new IPHost(7789) })\n .ConfigureContainer(a =>\n {\n a.AddConsoleLogger();\n })\n .ConfigurePlugins(a =>\n {\n a.UseWebSocket()//\u6dfb\u52a0WebSocket\u529f\u80fd\n .SetWSUrl("/ws");\n //.SetCallback(WSCallback);//WSCallback\u56de\u8c03\u51fd\u6570\u662f\u5728WS\u6536\u5230\u6570\u636e\u65f6\u89e6\u53d1\u56de\u8c03\u7684\u3002\u4e0b\u9762\u4f1a\u7528\u63d2\u4ef6\uff0c\u6240\u4ee5\u6211\u4eec\u4e0d\u4f7f\u7528\u8fd9\u79cd\u65b9\u5f0f\n a.Add<MyWebSocketPlugin>();//MyWebSocketPlugin\u662f\u7ee7\u627f\u81eaWebSocketPluginBase\u7684\u63d2\u4ef6\u3002\n }))\n .Start();\n\nservice.Logger.Info("Http\u670d\u52a1\u5668\u5df2\u542f\u52a8");\nservice.Logger.Info("ws://127.0.0.1:7789/ws");\n\n')),(0,r.kt)("p",null,"[\u63d2\u4ef6]"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-csharp"},'class MyWebSocketPlugin : WebSocketPluginBase<HttpSocketClient>\n{\n protected override void OnHandleWSDataFrame(HttpSocketClient client, WSDataFrameEventArgs e)\n {\n if (e.DataFrame.Opcode == WSDataType.Text)//\u6587\u672c\u6570\u636e\n {\n client.Logger.Info($"\u6536\u5230\u4fe1\u606f\uff1a{e.DataFrame.ToText()}");\n }\n else if (e.DataFrame.Opcode == WSDataType.Binary)//\u4e8c\u8fdb\u5236\n {\n byte[] data = e.DataFrame.PayloadData.ToArray();\n }\n }\n}\n')),(0,r.kt)("h3",{id:"42-\u901a\u8fc7webapi\u521b\u5efa"},"4.2 \u901a\u8fc7WebApi\u521b\u5efa"),(0,r.kt)("p",null,"\u901a\u8fc7WebApi\u7684\u65b9\u5f0f\u4f1a\u66f4\u52a0\u7075\u6d3b\uff0c\u4e5f\u80fd\u5f88\u65b9\u4fbf\u7684\u83b7\u5f97Http\u76f8\u5173\u53c2\u6570\u3002\u8fd8\u80fd\u5b9e\u73b0\u591a\u4e2aUrl\u7684\u8fde\u63a5\u8def\u7531\u3002\n\u5b9e\u73b0\u6b65\u9aa4\uff1a"),(0,r.kt)("ol",null,(0,r.kt)("li",{parentName:"ol"},"\u5fc5\u987b\u542f\u7528\u63d2\u4ef6"),(0,r.kt)("li",{parentName:"ol"},"\u5fc5\u987b\u914d\u7f6eConfigureRpcStore\uff0c\u548c\u6ce8\u518cMyServer"),(0,r.kt)("li",{parentName:"ol"},"\u5fc5\u987b\u6dfb\u52a0WebApiParserPlugin")),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-csharp"},'var service = new HttpService();\nservice.Setup(new TouchSocketConfig()//\u52a0\u8f7d\u914d\u7f6e\n .UsePlugin()\n .SetListenIPHosts(new IPHost[] { new IPHost(7789) })\n .ConfigureContainer(a =>\n {\n a.AddConsoleLogger();\n })\n .ConfigureRpcStore(a=> \n {\n a.RegisterServer<MyServer>();\n })\n .ConfigurePlugins(a =>\n {\n a.UseWebApi();\n a.UseWebSocket();//\u4e0d\u7528\u8bbe\u7f6e\u8fde\u63a5url\n }))\n .Start();\n\nConsole.WriteLine("\u670d\u52a1\u5668\u5df2\u542f\u52a8\uff0c\u53ef\u4f7f\u7528\u4e0b\u5217\u5730\u5740\u8fde\u63a5");\nConsole.WriteLine("ws://127.0.0.1:7789/MyServer/ConnectWS");\n')),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-csharp"},'public class MyServer : RpcServer\n{\n private readonly ILog m_logger;\n\n public MyServer(ILog logger)\n {\n this.m_logger = logger;\n }\n\n [Router("/[api]/[action]")]\n [WebApi(HttpMethodType.GET, MethodFlags = MethodFlags.IncludeCallContext)]\n public void ConnectWS(IWebApiCallContext callContext)\n {\n if (callContext.Caller is HttpSocketClient socketClient)\n {\n if (socketClient.SwitchProtocolToWebSocket(callContext.HttpContext))\n {\n m_logger.Info("WS\u901a\u8fc7WebApi\u8fde\u63a5");\n }\n }\n }\n}\n')),(0,r.kt)("h2",{id:"\u521b\u5efa\u57fa\u4e8essl\u7684websocket\u670d\u52a1"},"\u521b\u5efa\u57fa\u4e8eSsl\u7684WebSocket\u670d\u52a1"),(0,r.kt)("p",null,"\u521b\u5efaWSs\u670d\u52a1\u5668\u65f6\uff0c\u5176\u4ed6\u914d\u7f6e\u4e0d\u53d8\uff0c\u53ea\u9700\u8981\u5728config\u4e2d\u914d\u7f6eSslOption\u4ee3\u7801\u5373\u53ef\u3002\n\u5728",(0,r.kt)("a",{parentName:"p",href:"https://gitee.com/RRQM_Home/RRQMBox/tree/master/Ssl%E8%AF%81%E4%B9%A6%E7%9B%B8%E5%85%B3"},"RRQMBox"),"\u4e2d\uff0c\u653e\u7f6e\u4e86\u4e00\u4e2a\u81ea\u5236Ssl\u8bc1\u4e66\uff0c\u5bc6\u7801\u4e3a\u201cRRQMSocket\u201d\u4ee5\u4f9b\u6d4b\u8bd5\u3002\u4f7f\u7528\u914d\u7f6e\u975e\u5e38\u65b9\u4fbf\u3002"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-csharp"},'var config = new TouchSocketConfig();\nconfig.UsePlugin()\n .SetReceiveType(ReceiveType.Auto)\n .SetListenIPHosts(new IPHost[] { new IPHost(7789) })\n .SetServiceSslOption(new ServiceSslOption() //Ssl\u914d\u7f6e\uff0c\u5f53\u4e3anull\u7684\u65f6\u5019\uff0c\u76f8\u5f53\u4e8e\u521b\u5efa\u4e86ws\u670d\u52a1\u5668\uff0c\u5f53\u8d4b\u503c\u7684\u65f6\u5019\uff0c\u76f8\u5f53\u4e8ewss\u670d\u52a1\u5668\u3002\n { \n Certificate = new X509Certificate2("RRQMSocket.pfx", "RRQMSocket"), \n SslProtocols = SslProtocols.Tls12 \n });\n')),(0,r.kt)("h2",{id:"\u63a5\u6536\u6d88\u606f"},"\u63a5\u6536\u6d88\u606f"),(0,r.kt)("p",null,(0,r.kt)("strong",{parentName:"p"},"\u3010\u56de\u8c03\u63a5\u6536\u3011"),"\n\u5728\u6dfb\u52a0",(0,r.kt)("strong",{parentName:"p"},"WebSocketServerPlugin"),"\u63d2\u4ef6\u540e\uff0c\u53ef\u4ee5\u8c03\u7528",(0,r.kt)("strong",{parentName:"p"},"SetCallback"),"\u51fd\u6570\uff0c\u7136\u540e\u8bbe\u7f6e\u4e00\u4e2a\u56de\u8c03\u51fd\u6570\uff08\u5982\u4e0b\u6240\u793a\uff09\uff0c\u7136\u540e\u8be5\u51fd\u6570\u5728\u670d\u52a1\u5668\u6536\u5230\u4fe1\u606f\u65f6\uff0c\u4f1a\u89e6\u53d1\uff08\u5e76\u53d1\u89e6\u53d1\uff09\u3002"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-csharp"},'static void WSCallback(ITcpClientBase client, WSDataFrameEventArgs e)\n{\n switch (e.DataFrame.Opcode)\n {\n case WSDataType.Cont:\n Console.WriteLine($"\u6536\u5230\u4e2d\u95f4\u6570\u636e\uff0c\u957f\u5ea6\u4e3a\uff1a{e.DataFrame.PayloadLength}");\n break;\n case WSDataType.Text:\n Console.WriteLine(e.DataFrame.ToText());\n break;\n case WSDataType.Binary:\n if (e.DataFrame.FIN)\n {\n Console.WriteLine($"\u6536\u5230\u4e8c\u8fdb\u5236\u6570\u636e\uff0c\u957f\u5ea6\u4e3a\uff1a{e.DataFrame.PayloadLength}");\n }\n else\n {\n Console.WriteLine($"\u6536\u5230\u672a\u7ed3\u675f\u7684\u4e8c\u8fdb\u5236\u6570\u636e\uff0c\u957f\u5ea6\u4e3a\uff1a{e.DataFrame.PayloadLength}");\n }\n break;\n case WSDataType.Close:\n {\n Console.WriteLine("\u8fdc\u7a0b\u8bf7\u6c42\u65ad\u5f00");\n client.Close("\u65ad\u5f00");\n }\n\n break;\n case WSDataType.Ping:\n break;\n case WSDataType.Pong:\n break;\n default:\n break;\n }\n}\n')),(0,r.kt)("p",null,(0,r.kt)("strong",{parentName:"p"},"\u3010\u7ee7\u627f\u6e90\u63d2\u4ef6\u63a5\u6536\u3011"),"\n\u5b9e\u9645\u4e0a",(0,r.kt)("strong",{parentName:"p"},"WebSocketServerPlugin"),"\u662f\u53ef\u4ee5\u88ab\u7ee7\u627f\u7684\uff0c\u7136\u540e\u91cd\u5199",(0,r.kt)("strong",{parentName:"p"},"OnHandleWSDataFrame"),"\u51fd\u6570\uff0c\u4f46\u5c3d\u91cf",(0,r.kt)("strong",{parentName:"p"},"\u4e0d\u8981\u8986\u76d6"),"\u57fa\u7c7b\u65b9\u6cd5\uff0c\u4e0d\u7136\u63d2\u4ef6\u5176\u4ed6\u5c06\u4e0d\u4f1a\u89e6\u53d1\u3002"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-csharp"},"class MyWebSocketServerPlugin: WebSocketServerPlugin\n{\n protected override void OnHandleWSDataFrame(ITcpClientBase client, WSDataFrameEventArgs e)\n {\n base.OnHandleWSDataFrame(client, e);\n }\n}\n")),(0,r.kt)("p",null,"\u3010\u63d2\u4ef6\u63a5\u53e3\u63a5\u6536\u3011\nWS\u670d\u52a1\u5668\uff0c\u867d\u7136\u662fHttp\u7684\u63d2\u4ef6\uff0c\u4f46\u662f\u4e5f\u80fd\u89e6\u53d1\u63d2\u4ef6\u63a5\u53e3\u3002\u9002\u7528\u4e8eWS\u7684\u63d2\u4ef6\u63a5\u53e3\u662f",(0,r.kt)("strong",{parentName:"p"},"IWebSocketPlugin"),"\uff08\u6216\u8005\u4ece",(0,r.kt)("strong",{parentName:"p"},"WebSocketPluginBase"),"\u7ee7\u627f\uff09\uff0c\u58f0\u660e\u4efb\u610f\u7c7b\uff0c\u5b9e\u73b0\u8be5\u63a5\u53e3\u5373\u53ef\u3002"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-csharp"},"class MyWebSocketServerPlugin: WebSocketPluginBase\n{\n protected override void OnHandleWSDataFrame(ITcpClientBase client, WSDataFrameEventArgs e)\n {\n //\u6b64\u5904\u7684\u7236\u7c7b\u65b9\u6cd5\u53ef\u4ee5\u76f4\u63a5\u8986\u76d6\u3002\n base.OnHandleWSDataFrame(client, e);\n }\n}\n")),(0,r.kt)("h2",{id:"\u56de\u590d\u54cd\u5e94\u6570\u636e"},"\u56de\u590d\u3001\u54cd\u5e94\u6570\u636e"),(0,r.kt)("p",null,"\u5728\u4ee5\u4e0a\u63a5\u6536\u3001\u6216\u76f4\u63a5\u4eceHttpService\u83b7\u53d6Clients\uff0c\u5c06client\u5bf9\u8c61\u8f6c\u4e3a",(0,r.kt)("strong",{parentName:"p"},"HttpSocketClient"),"\uff0c\u5373\u53ef\u4f7f\u7528",(0,r.kt)("strong",{parentName:"p"},"\u6269\u5c55\u65b9\u6cd5"),"\uff0c\u8fdb\u884c\u53d1\u9001\u3002"),(0,r.kt)("p",null,(0,r.kt)("strong",{parentName:"p"},"\u4e0d\u8981\u76f4\u63a5Send\uff0c7.x\u7248\u672c\u76f4\u63a5Send\u53ef\u4ee5\uff0c\u4f468.0\u4ee5\u540e\uff0cSend\u53ea\u4f1a\u4ee5TCP\u6570\u636e\u56de\u5e94\u3002")),(0,r.kt)("p",null,(0,r.kt)("strong",{parentName:"p"},"\u4f5c\u4e3a\u4e00\u6761\u6d88\u606f\u53d1\u9001")),(0,r.kt)("p",null,(0,r.kt)("strong",{parentName:"p"},"\u670d\u52a1\u5668\u5e7f\u64ad\u53d1\u9001")),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-csharp"},"//\u5e7f\u64ad\u7ed9\u6240\u6709\u4eba\nif (client is HttpSocketClient socketClient && socketClient.Service is HttpService service)\n{\n var clients = service.GetClients();\n foreach (var item in clients)\n {\n item.SendWithWS(e.DataFrame.ToText());\n }\n}\n")),(0,r.kt)("p",null,(0,r.kt)("strong",{parentName:"p"},"\u5c06\u4e00\u4e2a\u6570\u636e\u5206\u5305\u53d1\u9001"),"\n\u4f8b\u5982\uff1a\u53d1\u9001\u7684\u6570\u636e\u4e3a{0,1,2,3,4,5,6,7,8,9}\uff0c\u5f53\u8bbe\u7f6epackageSize\u4e3a5\u65f6\uff0c\u4f1a\u5148\u53d1\u9001{0,1,2,3,4}\u4f5c\u4e3a\u5934\u5305\uff0c\u7136\u540e\u53d1\u9001{5,6,7,8,9}\u7684\u540e\u7ee7\u5305\u3002"))}k.isMDXComponent=!0}}]);
\ No newline at end of file
"use strict";(self.webpackChunktouchsocket=self.webpackChunktouchsocket||[]).push([[5873],{3905:(e,t,n)=>{n.d(t,{Zo:()=>p,kt:()=>g});var a=n(7294);function r(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function l(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);t&&(a=a.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,a)}return n}function o(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?l(Object(n),!0).forEach((function(t){r(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):l(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function i(e,t){if(null==e)return{};var n,a,r=function(e,t){if(null==e)return{};var n,a,r={},l=Object.keys(e);for(a=0;a<l.length;a++)n=l[a],t.indexOf(n)>=0||(r[n]=e[n]);return r}(e,t);if(Object.getOwnPropertySymbols){var l=Object.getOwnPropertySymbols(e);for(a=0;a<l.length;a++)n=l[a],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(r[n]=e[n])}return r}var c=a.createContext({}),s=function(e){var t=a.useContext(c),n=t;return e&&(n="function"==typeof e?e(t):o(o({},t),e)),n},p=function(e){var t=s(e.components);return a.createElement(c.Provider,{value:t},e.children)},k={inlineCode:"code",wrapper:function(e){var t=e.children;return a.createElement(a.Fragment,{},t)}},u=a.forwardRef((function(e,t){var n=e.components,r=e.mdxType,l=e.originalType,c=e.parentName,p=i(e,["components","mdxType","originalType","parentName"]),u=s(n),g=r,d=u["".concat(c,".").concat(g)]||u[g]||k[g]||l;return n?a.createElement(d,o(o({ref:t},p),{},{components:n})):a.createElement(d,o({ref:t},p))}));function g(e,t){var n=arguments,r=t&&t.mdxType;if("string"==typeof e||r){var l=n.length,o=new Array(l);o[0]=u;var i={};for(var c in t)hasOwnProperty.call(t,c)&&(i[c]=t[c]);i.originalType=e,i.mdxType="string"==typeof e?e:r,o[1]=i;for(var s=2;s<l;s++)o[s]=n[s];return a.createElement.apply(null,o)}return a.createElement.apply(null,n)}u.displayName="MDXCreateElement"},2855:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>c,contentTitle:()=>o,default:()=>k,frontMatter:()=>l,metadata:()=>i,toc:()=>s});var a=n(7462),r=(n(7294),n(3905));const l={id:"createwebsocketservice",title:"\u521b\u5efaWebSocket\u670d\u52a1\u5668"},o=void 0,i={unversionedId:"createwebsocketservice",id:"createwebsocketservice",title:"\u521b\u5efaWebSocket\u670d\u52a1\u5668",description:"\u4e00\u3001\u8bf4\u660e",source:"@site/docs/createwebsocketservice.mdx",sourceDirName:".",slug:"/createwebsocketservice",permalink:"/touchsocket/docs/createwebsocketservice",draft:!1,editUrl:"https://gitee.com/rrqm_home/touchsocket/tree/master/handbook/docs/createwebsocketservice.mdx",tags:[],version:"current",lastUpdatedBy:"\u82e5\u6c5d\u68cb\u8317",lastUpdatedAt:1675770803,formattedLastUpdatedAt:"Feb 7, 2023",frontMatter:{id:"createwebsocketservice",title:"\u521b\u5efaWebSocket\u670d\u52a1\u5668"},sidebar:"docs",previous:{title:"\u4ea7\u54c1\u53ca\u67b6\u6784\u4ecb\u7ecd",permalink:"/touchsocket/docs/websocketdescription"},next:{title:"\u521b\u5efaWebSocket\u5ba2\u6237\u7aef",permalink:"/touchsocket/docs/createwebsocketclient"}},c={},s=[{value:"\u4e00\u3001\u8bf4\u660e",id:"\u4e00\u8bf4\u660e",level:2},{value:"\u4e8c\u3001\u53ef\u914d\u7f6e\u9879",id:"\u4e8c\u53ef\u914d\u7f6e\u9879",level:2},{value:"\u4e09\u3001\u652f\u6301\u63d2\u4ef6\u63a5\u53e3",id:"\u4e09\u652f\u6301\u63d2\u4ef6\u63a5\u53e3",level:2},{value:"IWebSocketPlugin",id:"iwebsocketplugin",level:3},{value:"\u56db\u3001\u521b\u5efaWebSocket\u670d\u52a1",id:"\u56db\u521b\u5efawebsocket\u670d\u52a1",level:2},{value:"4.1 \u7b80\u5355\u901a\u8fc7\u63d2\u4ef6\u521b\u5efa",id:"41-\u7b80\u5355\u901a\u8fc7\u63d2\u4ef6\u521b\u5efa",level:3},{value:"4.2 \u901a\u8fc7WebApi\u521b\u5efa",id:"42-\u901a\u8fc7webapi\u521b\u5efa",level:3},{value:"\u521b\u5efa\u57fa\u4e8eSsl\u7684WebSocket\u670d\u52a1",id:"\u521b\u5efa\u57fa\u4e8essl\u7684websocket\u670d\u52a1",level:2},{value:"\u63a5\u6536\u6d88\u606f",id:"\u63a5\u6536\u6d88\u606f",level:2},{value:"\u56de\u590d\u3001\u54cd\u5e94\u6570\u636e",id:"\u56de\u590d\u54cd\u5e94\u6570\u636e",level:2}],p={toc:s};function k(e){let{components:t,...n}=e;return(0,r.kt)("wrapper",(0,a.Z)({},p,n,{components:t,mdxType:"MDXLayout"}),(0,r.kt)("h2",{id:"\u4e00\u8bf4\u660e"},"\u4e00\u3001\u8bf4\u660e"),(0,r.kt)("p",null,"WebSocket\u662f\u57fa\u4e8eHttp\u534f\u8bae\u7684\u5347\u7ea7\u534f\u8bae\uff0c\u6240\u4ee5\u5e94\u5f53\u6302\u8f7d\u5728http\u670d\u52a1\u5668\u6267\u884c\u3002"),(0,r.kt)("h2",{id:"\u4e8c\u53ef\u914d\u7f6e\u9879"},"\u4e8c\u3001\u53ef\u914d\u7f6e\u9879"),(0,r.kt)("p",null,"\u7ee7\u627fHttpService"),(0,r.kt)("h2",{id:"\u4e09\u652f\u6301\u63d2\u4ef6\u63a5\u53e3"},"\u4e09\u3001\u652f\u6301\u63d2\u4ef6\u63a5\u53e3"),(0,r.kt)("p",null,"\u652f\u6301",(0,r.kt)("strong",{parentName:"p"},"ITcpPlugin\u3001IHttpPlugin\u3001IWebSocketPlugin")),(0,r.kt)("h3",{id:"iwebsocketplugin"},"IWebSocketPlugin"),(0,r.kt)("table",null,(0,r.kt)("thead",{parentName:"table"},(0,r.kt)("tr",{parentName:"thead"},(0,r.kt)("th",{parentName:"tr",align:null}),(0,r.kt)("th",{parentName:"tr",align:null}))),(0,r.kt)("tbody",{parentName:"table"},(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"OnHandshaking"),(0,r.kt)("td",{parentName:"tr",align:null},"\u8868\u793a\u5728\u5373\u5c06\u63e1\u624b\u8fde\u63a5\u65f6\u3002")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"OnHandshaked"),(0,r.kt)("td",{parentName:"tr",align:null},"\u8868\u793a\u5b8c\u6210\u63e1\u624b\u540e\u3002")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"OnHandleWSDataFrame"),(0,r.kt)("td",{parentName:"tr",align:null},"\u5f53\u6536\u5230WS\u6570\u636e\u65f6\u3002")))),(0,r.kt)("h2",{id:"\u56db\u521b\u5efawebsocket\u670d\u52a1"},"\u56db\u3001\u521b\u5efaWebSocket\u670d\u52a1"),(0,r.kt)("h3",{id:"41-\u7b80\u5355\u901a\u8fc7\u63d2\u4ef6\u521b\u5efa"},"4.1 \u7b80\u5355\u901a\u8fc7\u63d2\u4ef6\u521b\u5efa"),(0,r.kt)("p",null,"\u901a\u8fc7\u63d2\u4ef6\u521b\u5efa\u7684\u8bdd\uff0c\u53ea\u80fd\u6307\u5b9a\u4e00\u4e2a\u7279\u6b8aurl\u8def\u7531\u3002\u5982\u679c\u60f3\u83b7\u5f97\u8fde\u63a5\u524d\u7684Http\u8bf7\u6c42\uff0c\u4e5f\u5fc5\u987b\u518d\u6dfb\u52a0\u4e00\u4e2a\u5b9e\u73b0IWebSocketPlugin\u63a5\u53e3\u7684\u63d2\u4ef6\uff0c\u7136\u540e\u4eceOnHandshaking\u65b9\u6cd5\u4e2d\u6355\u83b7\u3002"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-csharp"},'var service = new HttpService();\nservice.Setup(new TouchSocketConfig()//\u52a0\u8f7d\u914d\u7f6e\n .UsePlugin()\n .SetListenIPHosts(new IPHost[] { new IPHost(7789) })\n .ConfigureContainer(a =>\n {\n a.SetSingletonLogger<ConsoleLogger>();\n })\n .ConfigurePlugins(a =>\n {\n a.Add<WebSocketServerPlugin>()//\u6dfb\u52a0WebSocket\u529f\u80fd\n .SetWSUrl("/ws")\n .SetCallback(WSCallback);//WSCallback\u56de\u8c03\u51fd\u6570\u662f\u5728WS\u6536\u5230\u6570\u636e\u65f6\u89e6\u53d1\u56de\u8c03\u7684\u3002\n a.Add<MyWebSocketPlugin>();//MyWebSocketPlugin\u662f\u7ee7\u627f\u81eaWebSocketPluginBase\u7684\u63d2\u4ef6\u3002\n }))\n .Start();\n\nConsole.WriteLine("Http\u670d\u52a1\u5668\u5df2\u542f\u52a8");\nConsole.WriteLine("ws://127.0.0.1:7789/ws");\n\n')),(0,r.kt)("h3",{id:"42-\u901a\u8fc7webapi\u521b\u5efa"},"4.2 \u901a\u8fc7WebApi\u521b\u5efa"),(0,r.kt)("p",null,"\u901a\u8fc7WebApi\u7684\u65b9\u5f0f\u4f1a\u66f4\u52a0\u7075\u6d3b\uff0c\u4e5f\u80fd\u5f88\u65b9\u4fbf\u7684\u83b7\u5f97Http\u76f8\u5173\u53c2\u6570\u3002\u8fd8\u80fd\u5b9e\u73b0\u591a\u4e2aUrl\u7684\u8fde\u63a5\u8def\u7531\u3002\n\u5b9e\u73b0\u6b65\u9aa4\uff1a"),(0,r.kt)("ol",null,(0,r.kt)("li",{parentName:"ol"},"\u5fc5\u987b\u542f\u7528\u63d2\u4ef6"),(0,r.kt)("li",{parentName:"ol"},"\u5fc5\u987b\u914d\u7f6eConfigureRpcStore\uff0c\u548c\u6ce8\u518cMyServer"),(0,r.kt)("li",{parentName:"ol"},"\u5fc5\u987b\u6dfb\u52a0WebApiParserPlugin")),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-csharp"},'var service = new HttpService();\nservice.Setup(new TouchSocketConfig()//\u52a0\u8f7d\u914d\u7f6e\n .UsePlugin()\n .SetListenIPHosts(new IPHost[] { new IPHost(7789) })\n .ConfigureContainer(a =>\n {\n a.SetSingletonLogger<ConsoleLogger>();\n })\n .ConfigureRpcStore(a=> \n {\n a.RegisterServer<MyServer>();\n })\n .ConfigurePlugins(a =>\n {\n a.Add<WebApiParserPlugin>();\n }))\n .Start();\n\nConsole.WriteLine("\u670d\u52a1\u5668\u5df2\u542f\u52a8\uff0c\u53ef\u4f7f\u7528\u4e0b\u5217\u5730\u5740\u8fde\u63a5");\nConsole.WriteLine("ws://127.0.0.1:7789/MyServer/ConnectWS");\n')),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-csharp"},'public class MyServer : RpcServer\n{\n private readonly ILog m_logger;\n\n public MyServer(ILog logger)\n {\n this.m_logger = logger;\n }\n\n [Router("/[api]/[action]")]\n [WebApi(HttpMethodType.GET, MethodFlags = MethodFlags.IncludeCallContext)]\n public void ConnectWS(IWebApiCallContext callContext)\n {\n if (callContext.Caller is HttpSocketClient socketClient)\n {\n if (socketClient.SwitchProtocolToWebSocket(callContext.Context))\n {\n m_logger.Message("WS\u901a\u8fc7WebApi\u8fde\u63a5");\n }\n }\n }\n}\n')),(0,r.kt)("a",{name:"d6n7d"}),(0,r.kt)("h2",{id:"\u521b\u5efa\u57fa\u4e8essl\u7684websocket\u670d\u52a1"},"\u521b\u5efa\u57fa\u4e8eSsl\u7684WebSocket\u670d\u52a1"),(0,r.kt)("p",null,"\u521b\u5efaWSs\u670d\u52a1\u5668\u65f6\uff0c\u5176\u4ed6\u914d\u7f6e\u4e0d\u53d8\uff0c\u53ea\u9700\u8981\u5728config\u4e2d\u914d\u7f6eSslOption\u4ee3\u7801\u5373\u53ef\u3002\n\u5728",(0,r.kt)("a",{parentName:"p",href:"https://gitee.com/RRQM_Home/RRQMBox/tree/master/Ssl%E8%AF%81%E4%B9%A6%E7%9B%B8%E5%85%B3"},"RRQMBox"),"\u4e2d\uff0c\u653e\u7f6e\u4e86\u4e00\u4e2a\u81ea\u5236Ssl\u8bc1\u4e66\uff0c\u5bc6\u7801\u4e3a\u201cRRQMSocket\u201d\u4ee5\u4f9b\u6d4b\u8bd5\u3002\u4f7f\u7528\u914d\u7f6e\u975e\u5e38\u65b9\u4fbf\u3002"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-csharp"},'var config = new TouchSocketConfig();\nconfig.UsePlugin()\n .SetReceiveType(ReceiveType.Auto)\n .SetListenIPHosts(new IPHost[] { new IPHost(7789) })\n .SetServiceSslOption(new ServiceSslOption() //Ssl\u914d\u7f6e\uff0c\u5f53\u4e3anull\u7684\u65f6\u5019\uff0c\u76f8\u5f53\u4e8e\u521b\u5efa\u4e86ws\u670d\u52a1\u5668\uff0c\u5f53\u8d4b\u503c\u7684\u65f6\u5019\uff0c\u76f8\u5f53\u4e8ewss\u670d\u52a1\u5668\u3002\n { \n Certificate = new X509Certificate2("RRQMSocket.pfx", "RRQMSocket"), \n SslProtocols = SslProtocols.Tls12 \n });\n')),(0,r.kt)("a",{name:"FQrdu"}),(0,r.kt)("h2",{id:"\u63a5\u6536\u6d88\u606f"},"\u63a5\u6536\u6d88\u606f"),(0,r.kt)("p",null,(0,r.kt)("strong",{parentName:"p"},"\u3010\u56de\u8c03\u63a5\u6536\u3011"),"\n\u5728\u6dfb\u52a0",(0,r.kt)("strong",{parentName:"p"},"WebSocketServerPlugin"),"\u63d2\u4ef6\u540e\uff0c\u53ef\u4ee5\u8c03\u7528",(0,r.kt)("strong",{parentName:"p"},"SetCallback"),"\u51fd\u6570\uff0c\u7136\u540e\u8bbe\u7f6e\u4e00\u4e2a\u56de\u8c03\u51fd\u6570\uff08\u5982\u4e0b\u6240\u793a\uff09\uff0c\u7136\u540e\u8be5\u51fd\u6570\u5728\u670d\u52a1\u5668\u6536\u5230\u4fe1\u606f\u65f6\uff0c\u4f1a\u89e6\u53d1\uff08\u5e76\u53d1\u89e6\u53d1\uff09\u3002"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-csharp"},'static void WSCallback(ITcpClientBase client, WSDataFrameEventArgs e)\n{\n switch (e.DataFrame.Opcode)\n {\n case WSDataType.Cont:\n Console.WriteLine($"\u6536\u5230\u4e2d\u95f4\u6570\u636e\uff0c\u957f\u5ea6\u4e3a\uff1a{e.DataFrame.PayloadLength}");\n break;\n case WSDataType.Text:\n Console.WriteLine(e.DataFrame.ToText());\n break;\n case WSDataType.Binary:\n if (e.DataFrame.FIN)\n {\n Console.WriteLine($"\u6536\u5230\u4e8c\u8fdb\u5236\u6570\u636e\uff0c\u957f\u5ea6\u4e3a\uff1a{e.DataFrame.PayloadLength}");\n }\n else\n {\n Console.WriteLine($"\u6536\u5230\u672a\u7ed3\u675f\u7684\u4e8c\u8fdb\u5236\u6570\u636e\uff0c\u957f\u5ea6\u4e3a\uff1a{e.DataFrame.PayloadLength}");\n }\n break;\n case WSDataType.Close:\n {\n Console.WriteLine("\u8fdc\u7a0b\u8bf7\u6c42\u65ad\u5f00");\n client.Close("\u65ad\u5f00");\n }\n\n break;\n case WSDataType.Ping:\n break;\n case WSDataType.Pong:\n break;\n default:\n break;\n }\n}\n')),(0,r.kt)("p",null,(0,r.kt)("strong",{parentName:"p"},"\u3010\u7ee7\u627f\u6e90\u63d2\u4ef6\u63a5\u6536\u3011"),"\n\u5b9e\u9645\u4e0a",(0,r.kt)("strong",{parentName:"p"},"WebSocketServerPlugin"),"\u662f\u53ef\u4ee5\u88ab\u7ee7\u627f\u7684\uff0c\u7136\u540e\u91cd\u5199",(0,r.kt)("strong",{parentName:"p"},"OnHandleWSDataFrame"),"\u51fd\u6570\uff0c\u4f46\u5c3d\u91cf",(0,r.kt)("strong",{parentName:"p"},"\u4e0d\u8981\u8986\u76d6"),"\u57fa\u7c7b\u65b9\u6cd5\uff0c\u4e0d\u7136\u63d2\u4ef6\u5176\u4ed6\u5c06\u4e0d\u4f1a\u89e6\u53d1\u3002"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-csharp"},"class MyWebSocketServerPlugin: WebSocketServerPlugin\n{\n protected override void OnHandleWSDataFrame(ITcpClientBase client, WSDataFrameEventArgs e)\n {\n base.OnHandleWSDataFrame(client, e);\n }\n}\n")),(0,r.kt)("p",null,"\u3010\u63d2\u4ef6\u63a5\u53e3\u63a5\u6536\u3011\nWS\u670d\u52a1\u5668\uff0c\u867d\u7136\u662fHttp\u7684\u63d2\u4ef6\uff0c\u4f46\u662f\u4e5f\u80fd\u89e6\u53d1\u63d2\u4ef6\u63a5\u53e3\u3002\u9002\u7528\u4e8eWS\u7684\u63d2\u4ef6\u63a5\u53e3\u662f",(0,r.kt)("strong",{parentName:"p"},"IWebSocketPlugin"),"\uff08\u6216\u8005\u4ece",(0,r.kt)("strong",{parentName:"p"},"WebSocketPluginBase"),"\u7ee7\u627f\uff09\uff0c\u58f0\u660e\u4efb\u610f\u7c7b\uff0c\u5b9e\u73b0\u8be5\u63a5\u53e3\u5373\u53ef\u3002"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-csharp"},"class MyWebSocketServerPlugin: WebSocketPluginBase\n{\n protected override void OnHandleWSDataFrame(ITcpClientBase client, WSDataFrameEventArgs e)\n {\n //\u6b64\u5904\u7684\u7236\u7c7b\u65b9\u6cd5\u53ef\u4ee5\u76f4\u63a5\u8986\u76d6\u3002\n base.OnHandleWSDataFrame(client, e);\n }\n}\n")),(0,r.kt)("a",{name:"JKBcN"}),(0,r.kt)("h2",{id:"\u56de\u590d\u54cd\u5e94\u6570\u636e"},"\u56de\u590d\u3001\u54cd\u5e94\u6570\u636e"),(0,r.kt)("p",null,"\u5728\u4ee5\u4e0a\u63a5\u6536\u3001\u6216\u76f4\u63a5\u4eceHttpService\u83b7\u53d6Clients\uff0c\u5c06client\u5bf9\u8c61\u8f6c\u4e3a",(0,r.kt)("strong",{parentName:"p"},"HttpSocketClient"),"\uff0c\u5373\u53ef\u4f7f\u7528",(0,r.kt)("strong",{parentName:"p"},"\u6269\u5c55\u65b9\u6cd5"),"\uff0c\u8fdb\u884c\u53d1\u9001\u3002"),(0,r.kt)("p",null,(0,r.kt)("strong",{parentName:"p"},"\u4e0d\u8981\u76f4\u63a5Send\uff0c7.x\u7248\u672c\u76f4\u63a5Send\u53ef\u4ee5\uff0c\u4f468.0\u4ee5\u540e\uff0cSend\u53ea\u4f1a\u4ee5TCP\u6570\u636e\u56de\u5e94\u3002")),(0,r.kt)("p",null,(0,r.kt)("strong",{parentName:"p"},"\u4f5c\u4e3a\u4e00\u6761\u6d88\u606f\u53d1\u9001")),(0,r.kt)("p",null,(0,r.kt)("strong",{parentName:"p"},"\u670d\u52a1\u5668\u5e7f\u64ad\u53d1\u9001")),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-csharp"},"//\u5e7f\u64ad\u7ed9\u6240\u6709\u4eba\nif (client is HttpSocketClient socketClient && socketClient.Service is HttpService service)\n{\n var clients = service.GetClients();\n foreach (var item in clients)\n {\n item.SendWithWS(e.DataFrame.ToText());\n }\n}\n")),(0,r.kt)("p",null,(0,r.kt)("strong",{parentName:"p"},"\u5c06\u4e00\u4e2a\u6570\u636e\u5206\u5305\u53d1\u9001"),"\n\u4f8b\u5982\uff1a\u53d1\u9001\u7684\u6570\u636e\u4e3a{0,1,2,3,4,5,6,7,8,9}\uff0c\u5f53\u8bbe\u7f6epackageSize\u4e3a5\u65f6\uff0c\u4f1a\u5148\u53d1\u9001{0,1,2,3,4}\u4f5c\u4e3a\u5934\u5305\uff0c\u7136\u540e\u53d1\u9001{5,6,7,8,9}\u7684\u540e\u7ee7\u5305\u3002"))}k.isMDXComponent=!0}}]);
\ No newline at end of file
此差异已折叠。
此差异已折叠。
"use strict";(self.webpackChunktouchsocket=self.webpackChunktouchsocket||[]).push([[5215],{3905:(e,t,r)=>{r.d(t,{Zo:()=>u,kt:()=>f});var n=r(7294);function o(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function a(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function i(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{};t%2?a(Object(r),!0).forEach((function(t){o(e,t,r[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(r)):a(Object(r)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(r,t))}))}return e}function c(e,t){if(null==e)return{};var r,n,o=function(e,t){if(null==e)return{};var r,n,o={},a=Object.keys(e);for(n=0;n<a.length;n++)r=a[n],t.indexOf(r)>=0||(o[r]=e[r]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(n=0;n<a.length;n++)r=a[n],t.indexOf(r)>=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}var l=n.createContext({}),d=function(e){var t=n.useContext(l),r=t;return e&&(r="function"==typeof e?e(t):i(i({},t),e)),r},u=function(e){var t=d(e.components);return n.createElement(l.Provider,{value:t},e.children)},p={inlineCode:"code",wrapper:function(e){var t=e.children;return n.createElement(n.Fragment,{},t)}},s=n.forwardRef((function(e,t){var r=e.components,o=e.mdxType,a=e.originalType,l=e.parentName,u=c(e,["components","mdxType","originalType","parentName"]),s=d(r),f=o,m=s["".concat(l,".").concat(f)]||s[f]||p[f]||a;return r?n.createElement(m,i(i({ref:t},u),{},{components:r})):n.createElement(m,i({ref:t},u))}));function f(e,t){var r=arguments,o=t&&t.mdxType;if("string"==typeof e||o){var a=r.length,i=new Array(a);i[0]=s;var c={};for(var l in t)hasOwnProperty.call(t,l)&&(c[l]=t[l]);c.originalType=e,c.mdxType="string"==typeof e?e:o,i[1]=c;for(var d=2;d<a;d++)i[d]=r[d];return n.createElement.apply(null,i)}return n.createElement.apply(null,r)}s.displayName="MDXCreateElement"},7506:(e,t,r)=>{r.r(t),r.d(t,{assets:()=>l,contentTitle:()=>i,default:()=>p,frontMatter:()=>a,metadata:()=>c,toc:()=>d});var n=r(7462),o=(r(7294),r(3905));const a={id:"webdataforwarding",title:"Web\u6570\u636e\u8f6c\u53d1Winform\u9879\u76ee"},i=void 0,c={unversionedId:"webdataforwarding",id:"webdataforwarding",title:"Web\u6570\u636e\u8f6c\u53d1Winform\u9879\u76ee",description:"\u5b9a\u5236\u65b9",source:"@site/docs/webdataforwarding.mdx",sourceDirName:".",slug:"/webdataforwarding",permalink:"/touchsocket/docs/webdataforwarding",draft:!1,editUrl:"https://gitee.com/rrqm_home/touchsocket/tree/master/handbook/docs/webdataforwarding.mdx",tags:[],version:"current",lastUpdatedBy:"\u82e5\u6c5d\u68cb\u8317",lastUpdatedAt:1675770803,formattedLastUpdatedAt:"Feb 7, 2023",frontMatter:{id:"webdataforwarding",title:"Web\u6570\u636e\u8f6c\u53d1Winform\u9879\u76ee"},sidebar:"docs",previous:{title:"\u6570\u636e\u8f6c\u53d1\u9879\u76ee",permalink:"/touchsocket/docs/dataforwarding"},next:{title:"FPS\u5b9e\u65f6\u6e38\u620f",permalink:"/touchsocket/docs/fpsgame"}},l={},d=[{value:"\u5b9a\u5236\u65b9",id:"\u5b9a\u5236\u65b9",level:2},{value:"\u8bf4\u660e",id:"\u8bf4\u660e",level:2},{value:"\u6280\u672f\u70b9",id:"\u6280\u672f\u70b9",level:2},{value:"\u6548\u679c",id:"\u6548\u679c",level:2}],u={toc:d};function p(e){let{components:t,...a}=e;return(0,o.kt)("wrapper",(0,n.Z)({},u,a,{components:t,mdxType:"MDXLayout"}),(0,o.kt)("h2",{id:"\u5b9a\u5236\u65b9"},"\u5b9a\u5236\u65b9"),(0,o.kt)("p",null,"\u7f51\u53cb\u201c\u8f6f\u4ef6\u5f00\u53d1\u201d"),(0,o.kt)("h2",{id:"\u8bf4\u660e"},"\u8bf4\u660e"),(0,o.kt)("p",null,"\u5e94\u8be5\u7f51\u53cb\u8981\u6c42\uff0c\u9700\u8981\u5b9e\u73b0Web\u7aef\u6570\u636e\u5411Winform\u7aef\u8f6c\u53d1\u7684\u529f\u80fd\u3002"),(0,o.kt)("h2",{id:"\u6280\u672f\u70b9"},"\u6280\u672f\u70b9"),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},"\u7f51\u7edc\u7f16\u7a0b")),(0,o.kt)("h2",{id:"\u6548\u679c"},"\u6548\u679c"),(0,o.kt)("p",null,(0,o.kt)("img",{alt:"6.gif",src:r(3059).Z,width:"2776",height:"1658"})))}p.isMDXComponent=!0},3059:(e,t,r)=>{r.d(t,{Z:()=>n});const n=r.p+"assets/images/webdataforwarding-1-669ef575ba0422c1a8881c07203101e9.gif"}}]); "use strict";(self.webpackChunktouchsocket=self.webpackChunktouchsocket||[]).push([[5215],{3905:(e,t,r)=>{r.d(t,{Zo:()=>u,kt:()=>f});var n=r(7294);function o(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function a(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function i(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{};t%2?a(Object(r),!0).forEach((function(t){o(e,t,r[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(r)):a(Object(r)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(r,t))}))}return e}function c(e,t){if(null==e)return{};var r,n,o=function(e,t){if(null==e)return{};var r,n,o={},a=Object.keys(e);for(n=0;n<a.length;n++)r=a[n],t.indexOf(r)>=0||(o[r]=e[r]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(n=0;n<a.length;n++)r=a[n],t.indexOf(r)>=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}var l=n.createContext({}),d=function(e){var t=n.useContext(l),r=t;return e&&(r="function"==typeof e?e(t):i(i({},t),e)),r},u=function(e){var t=d(e.components);return n.createElement(l.Provider,{value:t},e.children)},p={inlineCode:"code",wrapper:function(e){var t=e.children;return n.createElement(n.Fragment,{},t)}},s=n.forwardRef((function(e,t){var r=e.components,o=e.mdxType,a=e.originalType,l=e.parentName,u=c(e,["components","mdxType","originalType","parentName"]),s=d(r),f=o,m=s["".concat(l,".").concat(f)]||s[f]||p[f]||a;return r?n.createElement(m,i(i({ref:t},u),{},{components:r})):n.createElement(m,i({ref:t},u))}));function f(e,t){var r=arguments,o=t&&t.mdxType;if("string"==typeof e||o){var a=r.length,i=new Array(a);i[0]=s;var c={};for(var l in t)hasOwnProperty.call(t,l)&&(c[l]=t[l]);c.originalType=e,c.mdxType="string"==typeof e?e:o,i[1]=c;for(var d=2;d<a;d++)i[d]=r[d];return n.createElement.apply(null,i)}return n.createElement.apply(null,r)}s.displayName="MDXCreateElement"},7506:(e,t,r)=>{r.r(t),r.d(t,{assets:()=>l,contentTitle:()=>i,default:()=>p,frontMatter:()=>a,metadata:()=>c,toc:()=>d});var n=r(7462),o=(r(7294),r(3905));const a={id:"webdataforwarding",title:"Web\u6570\u636e\u8f6c\u53d1Winform\u9879\u76ee"},i=void 0,c={unversionedId:"webdataforwarding",id:"webdataforwarding",title:"Web\u6570\u636e\u8f6c\u53d1Winform\u9879\u76ee",description:"\u5b9a\u5236\u65b9",source:"@site/docs/webdataforwarding.mdx",sourceDirName:".",slug:"/webdataforwarding",permalink:"/touchsocket/docs/webdataforwarding",draft:!1,editUrl:"https://gitee.com/rrqm_home/touchsocket/tree/master/handbook/docs/webdataforwarding.mdx",tags:[],version:"current",lastUpdatedBy:"\u82e5\u6c5d\u68cb\u8317",lastUpdatedAt:1675770803,formattedLastUpdatedAt:"Feb 7, 2023",frontMatter:{id:"webdataforwarding",title:"Web\u6570\u636e\u8f6c\u53d1Winform\u9879\u76ee"},sidebar:"docs",previous:{title:"\u6570\u636e\u8f6c\u53d1\u9879\u76ee",permalink:"/touchsocket/docs/dataforwarding"},next:{title:"FPS\u5b9e\u65f6\u6e38\u620f",permalink:"/touchsocket/docs/fpsgame"}},l={},d=[{value:"\u5b9a\u5236\u65b9",id:"\u5b9a\u5236\u65b9",level:2},{value:"\u8bf4\u660e",id:"\u8bf4\u660e",level:2},{value:"\u6280\u672f\u70b9",id:"\u6280\u672f\u70b9",level:2},{value:"\u6548\u679c",id:"\u6548\u679c",level:2}],u={toc:d};function p(e){let{components:t,...a}=e;return(0,o.kt)("wrapper",(0,n.Z)({},u,a,{components:t,mdxType:"MDXLayout"}),(0,o.kt)("h2",{id:"\u5b9a\u5236\u65b9"},"\u5b9a\u5236\u65b9"),(0,o.kt)("p",null,"\u7f51\u53cb\u201c\u8f6f\u4ef6\u5f00\u53d1\u201d"),(0,o.kt)("h2",{id:"\u8bf4\u660e"},"\u8bf4\u660e"),(0,o.kt)("p",null,"\u5e94\u8be5\u7f51\u53cb\u8981\u6c42\uff0c\u9700\u8981\u5b9e\u73b0Web\u7aef\u6570\u636e\u5411Winform\u7aef\u8f6c\u53d1\u7684\u529f\u80fd\u3002"),(0,o.kt)("h2",{id:"\u6280\u672f\u70b9"},"\u6280\u672f\u70b9"),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},"\u7f51\u7edc\u7f16\u7a0b")),(0,o.kt)("h2",{id:"\u6548\u679c"},"\u6548\u679c"),(0,o.kt)("p",null,(0,o.kt)("img",{alt:"6.gif",src:r(4301).Z,width:"2776",height:"1658"})))}p.isMDXComponent=!0},4301:(e,t,r)=>{r.d(t,{Z:()=>n});const n=r.p+"assets/images/webdataforwarding-1-669ef575ba0422c1a8881c07203101e9.gif"}}]);
\ No newline at end of file \ No newline at end of file
"use strict";(self.webpackChunktouchsocket=self.webpackChunktouchsocket||[]).push([[9311],{3905:(e,t,n)=>{n.d(t,{Zo:()=>p,kt:()=>d});var r=n(7294);function a(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function o(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function c(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?o(Object(n),!0).forEach((function(t){a(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):o(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function l(e,t){if(null==e)return{};var n,r,a=function(e,t){if(null==e)return{};var n,r,a={},o=Object.keys(e);for(r=0;r<o.length;r++)n=o[r],t.indexOf(n)>=0||(a[n]=e[n]);return a}(e,t);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(r=0;r<o.length;r++)n=o[r],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(a[n]=e[n])}return a}var s=r.createContext({}),i=function(e){var t=r.useContext(s),n=t;return e&&(n="function"==typeof e?e(t):c(c({},t),e)),n},p=function(e){var t=i(e.components);return r.createElement(s.Provider,{value:t},e.children)},u={inlineCode:"code",wrapper:function(e){var t=e.children;return r.createElement(r.Fragment,{},t)}},k=r.forwardRef((function(e,t){var n=e.components,a=e.mdxType,o=e.originalType,s=e.parentName,p=l(e,["components","mdxType","originalType","parentName"]),k=i(n),d=a,m=k["".concat(s,".").concat(d)]||k[d]||u[d]||o;return n?r.createElement(m,c(c({ref:t},p),{},{components:n})):r.createElement(m,c({ref:t},p))}));function d(e,t){var n=arguments,a=t&&t.mdxType;if("string"==typeof e||a){var o=n.length,c=new Array(o);c[0]=k;var l={};for(var s in t)hasOwnProperty.call(t,s)&&(l[s]=t[s]);l.originalType=e,l.mdxType="string"==typeof e?e:a,c[1]=l;for(var i=2;i<o;i++)c[i]=n[i];return r.createElement.apply(null,c)}return r.createElement.apply(null,n)}k.displayName="MDXCreateElement"},7148:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>s,contentTitle:()=>c,default:()=>u,frontMatter:()=>o,metadata:()=>l,toc:()=>i});var r=n(7462),a=(n(7294),n(3905));const o={id:"createwebsocketclient",title:"\u521b\u5efaWebSocket\u5ba2\u6237\u7aef"},c=void 0,l={unversionedId:"createwebsocketclient",id:"createwebsocketclient",title:"\u521b\u5efaWebSocket\u5ba2\u6237\u7aef",description:"\u8bf4\u660e",source:"@site/docs/createwebsocketclient.mdx",sourceDirName:".",slug:"/createwebsocketclient",permalink:"/touchsocket/docs/createwebsocketclient",draft:!1,editUrl:"https://gitee.com/rrqm_home/touchsocket/tree/master/handbook/docs/createwebsocketclient.mdx",tags:[],version:"current",lastUpdatedBy:"\u82e5\u6c5d\u68cb\u8317",lastUpdatedAt:1676451744,formattedLastUpdatedAt:"Feb 15, 2023",frontMatter:{id:"createwebsocketclient",title:"\u521b\u5efaWebSocket\u5ba2\u6237\u7aef"},sidebar:"docs",previous:{title:"\u521b\u5efaWebSocket\u670d\u52a1\u5668",permalink:"/touchsocket/docs/createwebsocketservice"},next:{title:"\u8fde\u63a5\u9a8c\u8bc1",permalink:"/touchsocket/docs/websocketverify"}},s={},i=[{value:"\u8bf4\u660e",id:"\u8bf4\u660e",level:2},{value:"\u53ef\u914d\u7f6e\u9879",id:"\u53ef\u914d\u7f6e\u9879",level:2},{value:"\u652f\u6301\u63d2\u4ef6\u63a5\u53e3",id:"\u652f\u6301\u63d2\u4ef6\u63a5\u53e3",level:2},{value:"\u521b\u5efaWS\u5ba2\u6237\u7aef",id:"\u521b\u5efaws\u5ba2\u6237\u7aef",level:2},{value:"\u521b\u5efaWSs\u5ba2\u6237\u7aef",id:"\u521b\u5efawss\u5ba2\u6237\u7aef",level:2},{value:"\u53d1\u9001\u6570\u636e",id:"\u53d1\u9001\u6570\u636e",level:2},{value:"\u63a5\u6536\u6570\u636e",id:"\u63a5\u6536\u6570\u636e",level:2}],p={toc:i};function u(e){let{components:t,...n}=e;return(0,a.kt)("wrapper",(0,r.Z)({},p,n,{components:t,mdxType:"MDXLayout"}),(0,a.kt)("h2",{id:"\u8bf4\u660e"},"\u8bf4\u660e"),(0,a.kt)("p",null,"\u652f\u6301Ssl\u7684WebSocket\u5ba2\u6237\u7aef\u3002"),(0,a.kt)("h2",{id:"\u53ef\u914d\u7f6e\u9879"},"\u53ef\u914d\u7f6e\u9879"),(0,a.kt)("p",null,"\u7ee7\u627fHttpClient\u3002"),(0,a.kt)("h2",{id:"\u652f\u6301\u63d2\u4ef6\u63a5\u53e3"},"\u652f\u6301\u63d2\u4ef6\u63a5\u53e3"),(0,a.kt)("p",null,"\u652f\u6301",(0,a.kt)("strong",{parentName:"p"},"ITcpPlugin\u3001IWebSocketPlugin")),(0,a.kt)("h2",{id:"\u521b\u5efaws\u5ba2\u6237\u7aef"},"\u521b\u5efaWS\u5ba2\u6237\u7aef"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-csharp"},'WebSocketClient myWSClient = new WebSocketClient();\nmyWSClient.Setup(new TouchSocketConfig()\n .SetRemoteIPHost("ws://127.0.0.1:7789/ws")\n .ConfigureContainer(a =>\n {\n a.AddConsoleLogger();\n }));\nmyWSClient.Connect();\nmyWSClient.Logger.Message("\u8fde\u63a5\u6210\u529f");\n')),(0,a.kt)("h2",{id:"\u521b\u5efawss\u5ba2\u6237\u7aef"},"\u521b\u5efaWSs\u5ba2\u6237\u7aef"),(0,a.kt)("p",null,(0,a.kt)("strong",{parentName:"p"},"*\u5f53\u9700\u8981\u8fde\u63a5\u5230\u7531\u8bc1\u4e66\u673a\u6784\u9881\u53d1\u7684\u7f51\u5740\uff08\u4f8b\u5982\uff1a"),"\u5c0f\u7a0b\u5e8f",(0,a.kt)("strong",{parentName:"p"},"\u3001","_","_","\u7269\u8054\u7f51","_","_","\u7b49\uff09\u65f6\uff0c\u4ec5\u9700\u8981\u8bbe\u7f6eurl\u5373\u53ef\u3002*")),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-csharp"},"wss://127.0.0.1:7789/ws\n")),(0,a.kt)("p",null,(0,a.kt)("strong",{parentName:"p"},"\u5f53\u8fde\u63a5\u81ea\u5b9a\u4e49\u8bc1\u4e66\u7684Ssl\uff1awss://127.0.0.1:7789/ws")),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-csharp"},'WebSocketClient myWSClient = new WebSocketClient();\n\nmyWSClient.Setup(new TouchSocketConfig()\n .SetRemoteIPHost(new IPHost("wss://127.0.0.1:7789/ws"))\n .SetClientSslOption(\n new ClientSslOption()\n {\n ClientCertificates = new X509CertificateCollection() { new X509Certificate2("RRQMSocket.pfx", "RRQMSocket") },\n SslProtocols = SslProtocols.Tls12,\n TargetHost = "127.0.0.1",\n CertificateValidationCallback = (sender, certificate, chain, sslPolicyErrors) => { return true; }\n }))\n .Connect();\n\nConsole.WriteLine("\u8fde\u63a5\u6210\u529f");\nwhile (true)\n{\n myWSClient.SendWithWS(Console.ReadLine());\n}\n')),(0,a.kt)("p",null,(0,a.kt)("strong",{parentName:"p"},(0,a.kt)("em",{parentName:"strong"},'\u6ce8\u610f\uff1a\u5f53\u4f7f\u7528\u57df\u540d\u8fde\u63a5\u65f6\uff0cTargetHost\u4e3a\u57df\u540d\uff0c\u4f8b\u5982\u8fde\u63a5\u5230IPHost("ws://baidu.com")\u65f6\uff0cTargetHost\u5e94\u5f53\u586b\u5199\uff1abaidu.com'))," ",(0,a.kt)("a",{name:"JKBcN"})),(0,a.kt)("h2",{id:"\u53d1\u9001\u6570\u636e"},"\u53d1\u9001\u6570\u636e"),(0,a.kt)("p",null,"\u5c06client\u5bf9\u8c61\u8f6c\u4e3a",(0,a.kt)("strong",{parentName:"p"},"HttpClient"),"\uff0c\u5373\u53ef\u4f7f\u7528",(0,a.kt)("strong",{parentName:"p"},"\u6269\u5c55\u65b9\u6cd5"),"\uff0c\u8fdb\u884c\u53d1\u9001\u3002"),(0,a.kt)("p",null,(0,a.kt)("strong",{parentName:"p"},"\u4f5c\u4e3a\u4e00\u6761\u6d88\u606f\u53d1\u9001")),(0,a.kt)("p",null,(0,a.kt)("strong",{parentName:"p"},"\u5c06\u4e00\u4e2a\u6570\u636e\u5206\u5305\u53d1\u9001"),"\n\u4f8b\u5982\uff1a\u53d1\u9001\u7684\u6570\u636e\u4e3a{0,1,2,3,4,5,6,7,8,9}\uff0c\u5f53\u8bbe\u7f6epackageSize\u4e3a5\u65f6\uff0c\u4f1a\u5148\u53d1\u9001{0,1,2,3,4}\u4f5c\u4e3a\u5934\u5305\uff0c\u7136\u540e\u53d1\u9001{5,6,7,8,9}\u7684\u540e\u7ee7\u5305\u3002"),(0,a.kt)("a",{name:"RhCgs"}),(0,a.kt)("h2",{id:"\u63a5\u6536\u6570\u636e"},"\u63a5\u6536\u6570\u636e"),(0,a.kt)("p",null,(0,a.kt)("strong",{parentName:"p"},"\u8ba2\u9605Received\u4e8b\u4ef6\u5b9e\u73b0\uff0c\u6216\u4f7f\u7528\u63d2\u4ef6\u5b9e\u73b0\u3002")),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-csharp"},"client.Received += (c, e) =>\n {\n switch (e.Opcode)\n {\n case WSDataType.Cont:\n break;\n case WSDataType.Text:\n break;\n case WSDataType.Binary:\n break;\n case WSDataType.Close:\n break;\n case WSDataType.Ping:\n break;\n case WSDataType.Pong:\n break;\n default:\n break;\n }\n };\n")),(0,a.kt)("p",null,(0,a.kt)("strong",{parentName:"p"},"\u9644\u52a0\u63d2\u4ef6\u5b9e\u73b0"),"\n\u8be5\u64cd\u4f5c\u548c\u670d\u52a1\u5668\u4e00\u81f4\u3002"))}u.isMDXComponent=!0}}]);
\ No newline at end of file
"use strict";(self.webpackChunktouchsocket=self.webpackChunktouchsocket||[]).push([[9311],{3905:(e,t,n)=>{n.d(t,{Zo:()=>p,kt:()=>d});var r=n(7294);function a(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function o(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function l(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?o(Object(n),!0).forEach((function(t){a(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):o(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function c(e,t){if(null==e)return{};var n,r,a=function(e,t){if(null==e)return{};var n,r,a={},o=Object.keys(e);for(r=0;r<o.length;r++)n=o[r],t.indexOf(n)>=0||(a[n]=e[n]);return a}(e,t);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(r=0;r<o.length;r++)n=o[r],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(a[n]=e[n])}return a}var i=r.createContext({}),s=function(e){var t=r.useContext(i),n=t;return e&&(n="function"==typeof e?e(t):l(l({},t),e)),n},p=function(e){var t=s(e.components);return r.createElement(i.Provider,{value:t},e.children)},u={inlineCode:"code",wrapper:function(e){var t=e.children;return r.createElement(r.Fragment,{},t)}},k=r.forwardRef((function(e,t){var n=e.components,a=e.mdxType,o=e.originalType,i=e.parentName,p=c(e,["components","mdxType","originalType","parentName"]),k=s(n),d=a,m=k["".concat(i,".").concat(d)]||k[d]||u[d]||o;return n?r.createElement(m,l(l({ref:t},p),{},{components:n})):r.createElement(m,l({ref:t},p))}));function d(e,t){var n=arguments,a=t&&t.mdxType;if("string"==typeof e||a){var o=n.length,l=new Array(o);l[0]=k;var c={};for(var i in t)hasOwnProperty.call(t,i)&&(c[i]=t[i]);c.originalType=e,c.mdxType="string"==typeof e?e:a,l[1]=c;for(var s=2;s<o;s++)l[s]=n[s];return r.createElement.apply(null,l)}return r.createElement.apply(null,n)}k.displayName="MDXCreateElement"},7148:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>i,contentTitle:()=>l,default:()=>u,frontMatter:()=>o,metadata:()=>c,toc:()=>s});var r=n(7462),a=(n(7294),n(3905));const o={id:"createwebsocketclient",title:"\u521b\u5efaWebSocket\u5ba2\u6237\u7aef"},l=void 0,c={unversionedId:"createwebsocketclient",id:"createwebsocketclient",title:"\u521b\u5efaWebSocket\u5ba2\u6237\u7aef",description:"\u8bf4\u660e",source:"@site/docs/createwebsocketclient.mdx",sourceDirName:".",slug:"/createwebsocketclient",permalink:"/touchsocket/docs/createwebsocketclient",draft:!1,editUrl:"https://gitee.com/rrqm_home/touchsocket/tree/master/handbook/docs/createwebsocketclient.mdx",tags:[],version:"current",lastUpdatedBy:"\u82e5\u6c5d\u68cb\u8317",lastUpdatedAt:1675770803,formattedLastUpdatedAt:"Feb 7, 2023",frontMatter:{id:"createwebsocketclient",title:"\u521b\u5efaWebSocket\u5ba2\u6237\u7aef"},sidebar:"docs",previous:{title:"\u521b\u5efaWebSocket\u670d\u52a1\u5668",permalink:"/touchsocket/docs/createwebsocketservice"},next:{title:"WSCommandLinePlugin",permalink:"/touchsocket/docs/wscommandlineplugin"}},i={},s=[{value:"\u8bf4\u660e",id:"\u8bf4\u660e",level:2},{value:"\u53ef\u914d\u7f6e\u9879",id:"\u53ef\u914d\u7f6e\u9879",level:2},{value:"\u652f\u6301\u63d2\u4ef6\u63a5\u53e3",id:"\u652f\u6301\u63d2\u4ef6\u63a5\u53e3",level:2},{value:"\u521b\u5efaWS\u5ba2\u6237\u7aef",id:"\u521b\u5efaws\u5ba2\u6237\u7aef",level:2},{value:"\u521b\u5efaWSs\u5ba2\u6237\u7aef",id:"\u521b\u5efawss\u5ba2\u6237\u7aef",level:2},{value:"\u53d1\u9001\u6570\u636e",id:"\u53d1\u9001\u6570\u636e",level:2},{value:"\u63a5\u6536\u6570\u636e",id:"\u63a5\u6536\u6570\u636e",level:2}],p={toc:s};function u(e){let{components:t,...n}=e;return(0,a.kt)("wrapper",(0,r.Z)({},p,n,{components:t,mdxType:"MDXLayout"}),(0,a.kt)("h2",{id:"\u8bf4\u660e"},"\u8bf4\u660e"),(0,a.kt)("p",null,"\u652f\u6301Ssl\u7684WebSocket\u5ba2\u6237\u7aef\u3002"),(0,a.kt)("h2",{id:"\u53ef\u914d\u7f6e\u9879"},"\u53ef\u914d\u7f6e\u9879"),(0,a.kt)("p",null,"\u7ee7\u627fHttpClient\u3002"),(0,a.kt)("h2",{id:"\u652f\u6301\u63d2\u4ef6\u63a5\u53e3"},"\u652f\u6301\u63d2\u4ef6\u63a5\u53e3"),(0,a.kt)("p",null,"\u652f\u6301",(0,a.kt)("strong",{parentName:"p"},"ITcpPlugin\u3001IWebSocketPlugin")),(0,a.kt)("h2",{id:"\u521b\u5efaws\u5ba2\u6237\u7aef"},"\u521b\u5efaWS\u5ba2\u6237\u7aef"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-csharp"},'WebSocketClient myWSClient = new WebSocketClient();\n//myWSClient.Received += this.MyWSClient_Received;\n//myWSClient.Handshaked += this.MyWSClient_Handshaked;\n\nmyWSClient.Setup(new TouchSocketConfig()\n .SetRemoteIPHost(this.textBox3.Text)\n .ConfigureContainer(a =>\n {\n a.SetSingletonLogger(new LoggerGroup(new EasyLogger(this.ShowMsg), new FileLogger()));\n }));\nmyWSClient.Connect();\n\nmyWSClient.Logger.Message("\u8fde\u63a5\u6210\u529f");\n')),(0,a.kt)("a",{name:"xWVU6"}),(0,a.kt)("h2",{id:"\u521b\u5efawss\u5ba2\u6237\u7aef"},"\u521b\u5efaWSs\u5ba2\u6237\u7aef"),(0,a.kt)("p",null,(0,a.kt)("strong",{parentName:"p"},"*\u5f53\u9700\u8981\u8fde\u63a5\u5230\u7531\u8bc1\u4e66\u673a\u6784\u9881\u53d1\u7684\u7f51\u5740\uff08\u4f8b\u5982\uff1a"),"\u5c0f\u7a0b\u5e8f",(0,a.kt)("strong",{parentName:"p"},"\u3001","_","_","\u7269\u8054\u7f51","_","_","\u7b49\uff09\u65f6\uff0c\u4ec5\u9700\u8981\u8bbe\u7f6eurl\u5373\u53ef\u3002*")),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-csharp"},"wss://127.0.0.1:7789/ws\n")),(0,a.kt)("p",null,(0,a.kt)("strong",{parentName:"p"},"\u5f53\u8fde\u63a5\u81ea\u5b9a\u4e49\u8bc1\u4e66\u7684Ssl\uff1awss://127.0.0.1:7789/ws")),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-csharp"},'WebSocketClient myWSClient = new WebSocketClient();\n\nmyWSClient.Setup(new TouchSocketConfig()\n .SetRemoteIPHost(new IPHost("wss://127.0.0.1:7789/ws"))\n .SetClientSslOption(\n new ClientSslOption()\n {\n ClientCertificates = new X509CertificateCollection() { new X509Certificate2("RRQMSocket.pfx", "RRQMSocket") },\n SslProtocols = SslProtocols.Tls12,\n TargetHost = "127.0.0.1",\n CertificateValidationCallback = (sender, certificate, chain, sslPolicyErrors) => { return true; }\n }))\n .Connect();\n\nConsole.WriteLine("\u8fde\u63a5\u6210\u529f");\nwhile (true)\n{\n myWSClient.SendWithWS(Console.ReadLine());\n}\n')),(0,a.kt)("p",null,(0,a.kt)("strong",{parentName:"p"},(0,a.kt)("em",{parentName:"strong"},'\u6ce8\u610f\uff1a\u5f53\u4f7f\u7528\u57df\u540d\u8fde\u63a5\u65f6\uff0cTargetHost\u4e3a\u57df\u540d\uff0c\u4f8b\u5982\u8fde\u63a5\u5230IPHost("ws://baidu.com")\u65f6\uff0cTargetHost\u5e94\u5f53\u586b\u5199\uff1abaidu.com'))," ",(0,a.kt)("a",{name:"JKBcN"})),(0,a.kt)("h2",{id:"\u53d1\u9001\u6570\u636e"},"\u53d1\u9001\u6570\u636e"),(0,a.kt)("p",null,"\u5c06client\u5bf9\u8c61\u8f6c\u4e3a",(0,a.kt)("strong",{parentName:"p"},"HttpClient"),"\uff0c\u5373\u53ef\u4f7f\u7528",(0,a.kt)("strong",{parentName:"p"},"\u6269\u5c55\u65b9\u6cd5"),"\uff0c\u8fdb\u884c\u53d1\u9001\u3002"),(0,a.kt)("p",null,(0,a.kt)("strong",{parentName:"p"},"\u4f5c\u4e3a\u4e00\u6761\u6d88\u606f\u53d1\u9001")),(0,a.kt)("p",null,(0,a.kt)("strong",{parentName:"p"},"\u5c06\u4e00\u4e2a\u6570\u636e\u5206\u5305\u53d1\u9001"),"\n\u4f8b\u5982\uff1a\u53d1\u9001\u7684\u6570\u636e\u4e3a{0,1,2,3,4,5,6,7,8,9}\uff0c\u5f53\u8bbe\u7f6epackageSize\u4e3a5\u65f6\uff0c\u4f1a\u5148\u53d1\u9001{0,1,2,3,4}\u4f5c\u4e3a\u5934\u5305\uff0c\u7136\u540e\u53d1\u9001{5,6,7,8,9}\u7684\u540e\u7ee7\u5305\u3002"),(0,a.kt)("a",{name:"RhCgs"}),(0,a.kt)("h2",{id:"\u63a5\u6536\u6570\u636e"},"\u63a5\u6536\u6570\u636e"),(0,a.kt)("p",null,(0,a.kt)("strong",{parentName:"p"},"\u8ba2\u9605Received\u4e8b\u4ef6\u5b9e\u73b0\uff0c\u6216\u4f7f\u7528\u63d2\u4ef6\u5b9e\u73b0\u3002")),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-csharp"},"client.Received += (c, e) =>\n {\n switch (e.Opcode)\n {\n case WSDataType.Cont:\n break;\n case WSDataType.Text:\n break;\n case WSDataType.Binary:\n break;\n case WSDataType.Close:\n break;\n case WSDataType.Ping:\n break;\n case WSDataType.Pong:\n break;\n default:\n break;\n }\n };\n")),(0,a.kt)("p",null,(0,a.kt)("strong",{parentName:"p"},"\u9644\u52a0\u63d2\u4ef6\u5b9e\u73b0"),"\n\u8be5\u64cd\u4f5c\u548c\u670d\u52a1\u5668\u4e00\u81f4\u3002"))}u.isMDXComponent=!0}}]);
\ No newline at end of file
"use strict";(self.webpackChunktouchsocket=self.webpackChunktouchsocket||[]).push([[4747],{3905:(e,t,n)=>{n.d(t,{Zo:()=>p,kt:()=>k});var r=n(7294);function o(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function a(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function l(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?a(Object(n),!0).forEach((function(t){o(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):a(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function i(e,t){if(null==e)return{};var n,r,o=function(e,t){if(null==e)return{};var n,r,o={},a=Object.keys(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}var c=r.createContext({}),s=function(e){var t=r.useContext(c),n=t;return e&&(n="function"==typeof e?e(t):l(l({},t),e)),n},p=function(e){var t=s(e.components);return r.createElement(c.Provider,{value:t},e.children)},u={inlineCode:"code",wrapper:function(e){var t=e.children;return r.createElement(r.Fragment,{},t)}},d=r.forwardRef((function(e,t){var n=e.components,o=e.mdxType,a=e.originalType,c=e.parentName,p=i(e,["components","mdxType","originalType","parentName"]),d=s(n),k=o,g=d["".concat(c,".").concat(k)]||d[k]||u[k]||a;return n?r.createElement(g,l(l({ref:t},p),{},{components:n})):r.createElement(g,l({ref:t},p))}));function k(e,t){var n=arguments,o=t&&t.mdxType;if("string"==typeof e||o){var a=n.length,l=new Array(a);l[0]=d;var i={};for(var c in t)hasOwnProperty.call(t,c)&&(i[c]=t[c]);i.originalType=e,i.mdxType="string"==typeof e?e:o,l[1]=i;for(var s=2;s<a;s++)l[s]=n[s];return r.createElement.apply(null,l)}return r.createElement.apply(null,n)}d.displayName="MDXCreateElement"},2525:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>c,contentTitle:()=>l,default:()=>u,frontMatter:()=>a,metadata:()=>i,toc:()=>s});var r=n(7462),o=(n(7294),n(3905));const a={id:"websocketverify",title:"\u8fde\u63a5\u9a8c\u8bc1"},l=void 0,i={unversionedId:"websocketverify",id:"websocketverify",title:"\u8fde\u63a5\u9a8c\u8bc1",description:"\u4e00\u3001\u8bf4\u660e",source:"@site/docs/websocketverify.mdx",sourceDirName:".",slug:"/websocketverify",permalink:"/touchsocket/docs/websocketverify",draft:!1,editUrl:"https://gitee.com/rrqm_home/touchsocket/tree/master/handbook/docs/websocketverify.mdx",tags:[],version:"current",lastUpdatedBy:"\u82e5\u6c5d\u68cb\u8317",lastUpdatedAt:1676451899,formattedLastUpdatedAt:"Feb 15, 2023",frontMatter:{id:"websocketverify",title:"\u8fde\u63a5\u9a8c\u8bc1"},sidebar:"docs",previous:{title:"\u521b\u5efaWebSocket\u5ba2\u6237\u7aef",permalink:"/touchsocket/docs/createwebsocketclient"},next:{title:"WSCommandLinePlugin",permalink:"/touchsocket/docs/wscommandlineplugin"}},c={},s=[{value:"\u4e00\u3001\u8bf4\u660e",id:"\u4e00\u8bf4\u660e",level:2},{value:"\u4e8c\u3001\u670d\u52a1\u7aef\u9a8c\u8bc1",id:"\u4e8c\u670d\u52a1\u7aef\u9a8c\u8bc1",level:2},{value:"2.1 \u5e38\u89c4\u63d2\u4ef6\u9a8c\u8bc1",id:"21-\u5e38\u89c4\u63d2\u4ef6\u9a8c\u8bc1",level:3},{value:"2.2 WebApi\u8fde\u63a5\u9a8c\u8bc1",id:"22-webapi\u8fde\u63a5\u9a8c\u8bc1",level:3},{value:"\u4e09\u3001\u5ba2\u6237\u7aef\u8bf7\u6c42\u9a8c\u8bc1",id:"\u4e09\u5ba2\u6237\u7aef\u8bf7\u6c42\u9a8c\u8bc1",level:2},{value:"3.1 Url\u5305\u542b\u8bf7\u6c42\u53c2\u6570",id:"31-url\u5305\u542b\u8bf7\u6c42\u53c2\u6570",level:3}],p={toc:s};function u(e){let{components:t,...n}=e;return(0,o.kt)("wrapper",(0,r.Z)({},p,n,{components:t,mdxType:"MDXLayout"}),(0,o.kt)("h2",{id:"\u4e00\u8bf4\u660e"},"\u4e00\u3001\u8bf4\u660e"),(0,o.kt)("p",null,"\u4e00\u822c\u60c5\u51b5\u4e0b\uff0c\u4e3a\u5b89\u5168\u9a8c\u8bc1\uff0cwebsocket\u90fd\u4f1a\u5728\u8fde\u63a5\u65f6\u8fdb\u884c\u9a8c\u8bc1\uff0c\u53ef\u80fd\u901a\u8fc7\u8d26\u53f7\u3001\u5bc6\u7801\uff0c\u4e5f\u53ef\u80fd\u901a\u8fc7token\u7b49\u3002"),(0,o.kt)("h2",{id:"\u4e8c\u670d\u52a1\u7aef\u9a8c\u8bc1"},"\u4e8c\u3001\u670d\u52a1\u7aef\u9a8c\u8bc1"),(0,o.kt)("h3",{id:"21-\u5e38\u89c4\u63d2\u4ef6\u9a8c\u8bc1"},"2.1 \u5e38\u89c4\u63d2\u4ef6\u9a8c\u8bc1"),(0,o.kt)("p",null,"\u65b0\u5efa\u4e00\u4e2a\u63d2\u4ef6\uff0c\u7528\u4e8e\u5904\u7406\u8fde\u63a5\u9a8c\u8bc1\u3002\u540c\u65f6\u4e5f\u5904\u7406\u6536\u5230\u7684\u4fe1\u606f\u3002"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-csharp"},'class MyWebSocketPlugin : WebSocketPluginBase<HttpSocketClient>\n{\n protected override void OnHandshaking(HttpSocketClient client, HttpContextEventArgs e)\n {\n if (e.Context.Request.Query["token"]!="123")\n {\n e.IsPermitOperation = false; //\u53c2\u6570\u4e0d\u7b26\u5408\uff0c\u76f4\u63a5\u62d2\u7edd\n e.Handled = true;//\u8868\u793a\u8be5\u6761\u6d88\u606f\u5df2\u88ab\u672c\u63d2\u4ef6\u5904\u7406\uff0c\u4e0d\u9700\u8981\u5728\u5411\u5176\u4ed6\u63d2\u4ef6\u6295\u9012\u4e86\u3002\n return;\n\n //\u6216\u8005\u76f4\u63a5\u56de\u590d\uff0c\u6b64\u5904\u90e8\u5206\u548chttp\u64cd\u4f5c\u4e00\u81f4\u3002\n e.Context.Response\n .SetStatus("400", "\u53e3\u4ee4\u4e0d\u6b63\u786e")\n .Answer();\n\n }\n base.OnHandshaking(client, e);\n }\n\n protected override void OnHandleWSDataFrame(HttpSocketClient client, WSDataFrameEventArgs e)\n {\n if (e.DataFrame.Opcode == WSDataType.Text)//\u6587\u672c\u6570\u636e\n {\n client.Logger.Info($"\u6536\u5230\u4fe1\u606f\uff1a{e.DataFrame.ToText()}");\n }\n else if (e.DataFrame.Opcode == WSDataType.Binary)//\u4e8c\u8fdb\u5236\n {\n byte[] data = e.DataFrame.PayloadData.ToArray();\n }\n }\n}\n\n')),(0,o.kt)("p",null,"\u521b\u5efa\u670d\u52a1\u5668"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-csharp"},'var service = new HttpService();\nservice.Setup(new TouchSocketConfig()//\u52a0\u8f7d\u914d\u7f6e\n .UsePlugin()\n .SetListenIPHosts(new IPHost[] { new IPHost(7789) })\n .ConfigureContainer(a =>\n {\n a.AddConsoleLogger();\n })\n .ConfigurePlugins(a =>\n {\n a.UseWebSocket()//\u6dfb\u52a0WebSocket\u529f\u80fd\n .SetWSUrl("/ws");\n //.SetCallback(WSCallback);//WSCallback\u56de\u8c03\u51fd\u6570\u662f\u5728WS\u6536\u5230\u6570\u636e\u65f6\u89e6\u53d1\u56de\u8c03\u7684\u3002\u4e0b\u9762\u4f1a\u7528\u63d2\u4ef6\uff0c\u6240\u4ee5\u6211\u4eec\u4e0d\u4f7f\u7528\u8fd9\u79cd\u65b9\u5f0f\n a.Add<MyWebSocketPlugin>();//MyWebSocketPlugin\u662f\u7ee7\u627f\u81eaWebSocketPluginBase\u7684\u63d2\u4ef6\u3002\n }))\n .Start();\n\nservice.Logger.Info("Http\u670d\u52a1\u5668\u5df2\u542f\u52a8");\nservice.Logger.Info("\u8fde\u63a5url\uff1aws://127.0.0.1:7789/ws?token=123");\n')),(0,o.kt)("h3",{id:"22-webapi\u8fde\u63a5\u9a8c\u8bc1"},"2.2 WebApi\u8fde\u63a5\u9a8c\u8bc1"),(0,o.kt)("p",null,"\u521b\u5efa\u4e00\u4e2aWebApi\u670d\u52a1"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-csharp"},'public class MyServer : RpcServer\n{\n private readonly ILog m_logger;\n\n public MyServer(ILog logger)\n {\n this.m_logger = logger;\n }\n\n [WebApi(HttpMethodType.GET, MethodFlags = MethodFlags.IncludeCallContext)]\n public void ConnectWS(IWebApiCallContext callContext, string token)\n {\n if (token != "123")\n {\n callContext.HttpContext.Response\n .SetStatus("400", "\u53e3\u4ee4\u4e0d\u6b63\u786e")\n .Answer();\n return;\n }\n //\u4e0b\u9762\u8fdb\u884c\u8fde\u63a5\n if (callContext.Caller is HttpSocketClient socketClient)\n {\n if (socketClient.SwitchProtocolToWebSocket(callContext.HttpContext))\n {\n m_logger.Info("WS\u901a\u8fc7WebApi\u8fde\u63a5");\n }\n }\n }\n}\n')),(0,o.kt)("p",null,"\u542f\u52a8\u670d\u52a1"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-csharp"},'var service = new HttpService();\nservice.Setup(new TouchSocketConfig()//\u52a0\u8f7d\u914d\u7f6e\n .UsePlugin()\n .SetListenIPHosts(new IPHost[] { new IPHost(7789) })\n .ConfigureContainer(a =>\n {\n a.AddConsoleLogger();\n })\n .ConfigureRpcStore(a =>\n {\n a.RegisterServer<MyServer>();\n })\n .ConfigurePlugins(a =>\n {\n a.UseWebApi();\n a.UseWebSocket();//\u4e0d\u7528\u8bbe\u7f6e\u8fde\u63a5url\n }))\n .Start();\n\nConsole.WriteLine("\u670d\u52a1\u5668\u5df2\u542f\u52a8\uff0c\u53ef\u4f7f\u7528\u4e0b\u5217\u5730\u5740\u8fde\u63a5");\nConsole.WriteLine("ws://127.0.0.1:7789/MyServer/ConnectWS?token=123");\n')),(0,o.kt)("admonition",{title:"\u63d0\u793a",type:"tip"},(0,o.kt)("p",{parentName:"admonition"},"\u4f7f\u7528WebApi\u8fdb\u884cWebsocket\u8fde\u63a5\u9a8c\u8bc1\u65f6\uff0c\u662f\u6700\u7075\u6d3b\u7684\uff0c\u800c\u4e14\u5982\u679c\u53ef\u80fd\uff0cWebsocket\u4e5f\u53ef\u4ee5\u901a\u8fc7Post\u8fde\u63a5\u9a8c\u8bc1\u3002")),(0,o.kt)("h2",{id:"\u4e09\u5ba2\u6237\u7aef\u8bf7\u6c42\u9a8c\u8bc1"},"\u4e09\u3001\u5ba2\u6237\u7aef\u8bf7\u6c42\u9a8c\u8bc1"),(0,o.kt)("h3",{id:"31-url\u5305\u542b\u8bf7\u6c42\u53c2\u6570"},"3.1 Url\u5305\u542b\u8bf7\u6c42\u53c2\u6570"),(0,o.kt)("p",null,"\u8bf7\u6c42\u9a8c\u8bc1\u65f6\uff0c\u8bf7\u6c42\u7684\u53c2\u6570\u5168\u90e8\u5305\u542b\u5728"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-csharp"},'WebSocketClient myWSClient = new WebSocketClient();\nmyWSClient.Setup(new TouchSocketConfig()\n .SetRemoteIPHost("ws://127.0.0.1:7789/ws?token=1232")\n .ConfigureContainer(a =>\n {\n a.AddConsoleLogger();\n }));\nvar result= myWSClient.TryConnect();\n\nmyWSClient.Logger.Info(result.ToString());\n\n')),(0,o.kt)("p",null,(0,o.kt)("a",{parentName:"p",href:"https://gitee.com/RRQM_Home/TouchSocket/tree/master/examples/WebSocket%E7%AE%80%E5%8D%95%E7%A4%BA%E4%BE%8B/WS%E8%BF%9E%E6%8E%A5%E9%AA%8C%E8%AF%81/WSVerifyConsoleApp"},"Websocket\u8fde\u63a5\u9a8c\u8bc1\u793a\u4f8b")))}u.isMDXComponent=!0}}]);
\ No newline at end of file
"use strict";(self.webpackChunktouchsocket=self.webpackChunktouchsocket||[]).push([[1971],{3905:(e,t,r)=>{r.d(t,{Zo:()=>p,kt:()=>f});var n=r(7294);function o(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function a(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function i(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{};t%2?a(Object(r),!0).forEach((function(t){o(e,t,r[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(r)):a(Object(r)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(r,t))}))}return e}function c(e,t){if(null==e)return{};var r,n,o=function(e,t){if(null==e)return{};var r,n,o={},a=Object.keys(e);for(n=0;n<a.length;n++)r=a[n],t.indexOf(r)>=0||(o[r]=e[r]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(n=0;n<a.length;n++)r=a[n],t.indexOf(r)>=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}var l=n.createContext({}),s=function(e){var t=n.useContext(l),r=t;return e&&(r="function"==typeof e?e(t):i(i({},t),e)),r},p=function(e){var t=s(e.components);return n.createElement(l.Provider,{value:t},e.children)},u={inlineCode:"code",wrapper:function(e){var t=e.children;return n.createElement(n.Fragment,{},t)}},d=n.forwardRef((function(e,t){var r=e.components,o=e.mdxType,a=e.originalType,l=e.parentName,p=c(e,["components","mdxType","originalType","parentName"]),d=s(r),f=o,m=d["".concat(l,".").concat(f)]||d[f]||u[f]||a;return r?n.createElement(m,i(i({ref:t},p),{},{components:r})):n.createElement(m,i({ref:t},p))}));function f(e,t){var r=arguments,o=t&&t.mdxType;if("string"==typeof e||o){var a=r.length,i=new Array(a);i[0]=d;var c={};for(var l in t)hasOwnProperty.call(t,l)&&(c[l]=t[l]);c.originalType=e,c.mdxType="string"==typeof e?e:o,i[1]=c;for(var s=2;s<a;s++)i[s]=r[s];return n.createElement.apply(null,i)}return n.createElement.apply(null,r)}d.displayName="MDXCreateElement"},4734:(e,t,r)=>{r.r(t),r.d(t,{assets:()=>l,contentTitle:()=>i,default:()=>u,frontMatter:()=>a,metadata:()=>c,toc:()=>s});var n=r(7462),o=(r(7294),r(3905));const a={id:"engineertoolbox",title:"\u5de5\u7a0b\u5e08\u8f6f\u4ef6\u5de5\u5177\u7bb1"},i=void 0,c={unversionedId:"engineertoolbox",id:"engineertoolbox",title:"\u5de5\u7a0b\u5e08\u8f6f\u4ef6\u5de5\u5177\u7bb1",description:"\u8bf4\u660e",source:"@site/docs/engineertoolbox.mdx",sourceDirName:".",slug:"/engineertoolbox",permalink:"/touchsocket/docs/engineertoolbox",draft:!1,editUrl:"https://gitee.com/rrqm_home/touchsocket/tree/master/handbook/docs/engineertoolbox.mdx",tags:[],version:"current",lastUpdatedBy:"\u82e5\u6c5d\u68cb\u8317",lastUpdatedAt:1675770803,formattedLastUpdatedAt:"Feb 7, 2023",frontMatter:{id:"engineertoolbox",title:"\u5de5\u7a0b\u5e08\u8f6f\u4ef6\u5de5\u5177\u7bb1"},sidebar:"docs",previous:{title:"FPS\u5b9e\u65f6\u6e38\u620f",permalink:"/touchsocket/docs/fpsgame"},next:{title:"\u5165\u95e8\u6307\u5357",permalink:"/touchsocket/docs/startguide"}},l={},s=[{value:"\u8bf4\u660e",id:"\u8bf4\u660e",level:2},{value:"\u754c\u9762\u5c55\u793a",id:"\u754c\u9762\u5c55\u793a",level:2}],p={toc:s};function u(e){let{components:t,...a}=e;return(0,o.kt)("wrapper",(0,n.Z)({},p,a,{components:t,mdxType:"MDXLayout"}),(0,o.kt)("h2",{id:"\u8bf4\u660e"},"\u8bf4\u660e"),(0,o.kt)("p",null,"\u8fd9\u662f\u7fa4\u53cb\u5f00\u53d1\u8005\uff0c\u4f7f\u7528",(0,o.kt)("strong",{parentName:"p"},"TouchRpc"),"\u5f00\u53d1\u7684\u4e00\u4e2a\u5185\u90e8\u5de5\u7a0b\u5e08\u8f6f\u4ef6\u5de5\u5177\u7bb1 \u3002"),(0,o.kt)("h2",{id:"\u754c\u9762\u5c55\u793a"},"\u754c\u9762\u5c55\u793a"),(0,o.kt)("p",null,(0,o.kt)("img",{alt:"1",src:r(8957).Z,width:"1500",height:"1202"}),"\n",(0,o.kt)("img",{alt:"2",src:r(839).Z,width:"1500",height:"711"}),"\n",(0,o.kt)("img",{alt:"3",src:r(3518).Z,width:"1500",height:"611"})))}u.isMDXComponent=!0},8957:(e,t,r)=>{r.d(t,{Z:()=>n});const n=r.p+"assets/images/engineertoolbox-1-f4ef22b000dfa103a5211d15e8591fae.jpg"},839:(e,t,r)=>{r.d(t,{Z:()=>n});const n=r.p+"assets/images/engineertoolbox-2-4adfa904169e408a00e38870aa82a0c4.jpg"},3518:(e,t,r)=>{r.d(t,{Z:()=>n});const n=r.p+"assets/images/engineertoolbox-3-e6f715f5501aebfc7fd7dec0b21bff0f.jpg"}}]); "use strict";(self.webpackChunktouchsocket=self.webpackChunktouchsocket||[]).push([[1971],{3905:(e,t,r)=>{r.d(t,{Zo:()=>p,kt:()=>f});var n=r(7294);function o(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function a(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function i(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{};t%2?a(Object(r),!0).forEach((function(t){o(e,t,r[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(r)):a(Object(r)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(r,t))}))}return e}function c(e,t){if(null==e)return{};var r,n,o=function(e,t){if(null==e)return{};var r,n,o={},a=Object.keys(e);for(n=0;n<a.length;n++)r=a[n],t.indexOf(r)>=0||(o[r]=e[r]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(n=0;n<a.length;n++)r=a[n],t.indexOf(r)>=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}var l=n.createContext({}),s=function(e){var t=n.useContext(l),r=t;return e&&(r="function"==typeof e?e(t):i(i({},t),e)),r},p=function(e){var t=s(e.components);return n.createElement(l.Provider,{value:t},e.children)},u={inlineCode:"code",wrapper:function(e){var t=e.children;return n.createElement(n.Fragment,{},t)}},d=n.forwardRef((function(e,t){var r=e.components,o=e.mdxType,a=e.originalType,l=e.parentName,p=c(e,["components","mdxType","originalType","parentName"]),d=s(r),f=o,m=d["".concat(l,".").concat(f)]||d[f]||u[f]||a;return r?n.createElement(m,i(i({ref:t},p),{},{components:r})):n.createElement(m,i({ref:t},p))}));function f(e,t){var r=arguments,o=t&&t.mdxType;if("string"==typeof e||o){var a=r.length,i=new Array(a);i[0]=d;var c={};for(var l in t)hasOwnProperty.call(t,l)&&(c[l]=t[l]);c.originalType=e,c.mdxType="string"==typeof e?e:o,i[1]=c;for(var s=2;s<a;s++)i[s]=r[s];return n.createElement.apply(null,i)}return n.createElement.apply(null,r)}d.displayName="MDXCreateElement"},4734:(e,t,r)=>{r.r(t),r.d(t,{assets:()=>l,contentTitle:()=>i,default:()=>u,frontMatter:()=>a,metadata:()=>c,toc:()=>s});var n=r(7462),o=(r(7294),r(3905));const a={id:"engineertoolbox",title:"\u5de5\u7a0b\u5e08\u8f6f\u4ef6\u5de5\u5177\u7bb1"},i=void 0,c={unversionedId:"engineertoolbox",id:"engineertoolbox",title:"\u5de5\u7a0b\u5e08\u8f6f\u4ef6\u5de5\u5177\u7bb1",description:"\u8bf4\u660e",source:"@site/docs/engineertoolbox.mdx",sourceDirName:".",slug:"/engineertoolbox",permalink:"/touchsocket/docs/engineertoolbox",draft:!1,editUrl:"https://gitee.com/rrqm_home/touchsocket/tree/master/handbook/docs/engineertoolbox.mdx",tags:[],version:"current",lastUpdatedBy:"\u82e5\u6c5d\u68cb\u8317",lastUpdatedAt:1675770803,formattedLastUpdatedAt:"Feb 7, 2023",frontMatter:{id:"engineertoolbox",title:"\u5de5\u7a0b\u5e08\u8f6f\u4ef6\u5de5\u5177\u7bb1"},sidebar:"docs",previous:{title:"FPS\u5b9e\u65f6\u6e38\u620f",permalink:"/touchsocket/docs/fpsgame"},next:{title:"\u5165\u95e8\u6307\u5357",permalink:"/touchsocket/docs/startguide"}},l={},s=[{value:"\u8bf4\u660e",id:"\u8bf4\u660e",level:2},{value:"\u754c\u9762\u5c55\u793a",id:"\u754c\u9762\u5c55\u793a",level:2}],p={toc:s};function u(e){let{components:t,...a}=e;return(0,o.kt)("wrapper",(0,n.Z)({},p,a,{components:t,mdxType:"MDXLayout"}),(0,o.kt)("h2",{id:"\u8bf4\u660e"},"\u8bf4\u660e"),(0,o.kt)("p",null,"\u8fd9\u662f\u7fa4\u53cb\u5f00\u53d1\u8005\uff0c\u4f7f\u7528",(0,o.kt)("strong",{parentName:"p"},"TouchRpc"),"\u5f00\u53d1\u7684\u4e00\u4e2a\u5185\u90e8\u5de5\u7a0b\u5e08\u8f6f\u4ef6\u5de5\u5177\u7bb1 \u3002"),(0,o.kt)("h2",{id:"\u754c\u9762\u5c55\u793a"},"\u754c\u9762\u5c55\u793a"),(0,o.kt)("p",null,(0,o.kt)("img",{alt:"1",src:r(9319).Z,width:"1500",height:"1202"}),"\n",(0,o.kt)("img",{alt:"2",src:r(1882).Z,width:"1500",height:"711"}),"\n",(0,o.kt)("img",{alt:"3",src:r(7434).Z,width:"1500",height:"611"})))}u.isMDXComponent=!0},9319:(e,t,r)=>{r.d(t,{Z:()=>n});const n=r.p+"assets/images/engineertoolbox-1-f4ef22b000dfa103a5211d15e8591fae.jpg"},1882:(e,t,r)=>{r.d(t,{Z:()=>n});const n=r.p+"assets/images/engineertoolbox-2-4adfa904169e408a00e38870aa82a0c4.jpg"},7434:(e,t,r)=>{r.d(t,{Z:()=>n});const n=r.p+"assets/images/engineertoolbox-3-e6f715f5501aebfc7fd7dec0b21bff0f.jpg"}}]);
\ No newline at end of file \ No newline at end of file
"use strict";(self.webpackChunktouchsocket=self.webpackChunktouchsocket||[]).push([[7978],{3769:e=>{e.exports=JSON.parse('{"name":"docusaurus-plugin-content-docs","id":"default"}')}}]); "use strict";(self.webpackChunktouchsocket=self.webpackChunktouchsocket||[]).push([[6390],{3769:e=>{e.exports=JSON.parse('{"name":"docusaurus-plugin-content-docs","id":"default"}')}}]);
\ No newline at end of file \ No newline at end of file
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。