...
 
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 bg3" 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 @@
[![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/)
[![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)
[![fork](https://gitee.com/dotnetchina/TouchSocket/badge/fork.svg?theme=gvp)](https://gitee.com/dotnetchina/TouchSocket/members)
[![star](https://gitee.com/RRQM_Home/TouchSocket/badge/star.svg?theme=gvp)](https://gitee.com/dotnetchina/TouchSocket/stargazers)
[![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">
<img src="https://img.shields.io/badge/QQ群-234762506-red" alt="QQ">
</a>
......@@ -37,7 +37,7 @@ English | [中文](README.md)
【Enterprise version】
| 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.|
## 🖥Support environment
......@@ -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:
......@@ -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.
## 🧲Application scenario simulation
[Scene entrance](https://www.yuque.com/rrqm/touchsocket/wrwx9k)
***
## Thank you
......@@ -196,4 +193,4 @@ Thank you for your support for TouchSocket. If you have any other questions, ple
## 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 @@
【企业版】
| 名称|地址 |描述|
|---|---|---|
|[![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的专属版本。|
#### 特别声明
......@@ -190,9 +190,6 @@ TouchSocketBitConverter.DefaultEndianType = EndianType.Little;
用户自定义不固定包头适配器,主要帮助用户解决具有包头不固定的数据帧信息。例如:最典型的HTTP数据包,其数据头和数据体由“\r\n”隔开,而数据头又因为请求者的请求信息的不同,头部数据也不固定,而数据体的长度,也是由数据头的ContentLength的值显式指定的,所以可以考虑使用CustomUnfixedHeaderDataHandlingAdapter解析,也是仅通过简单的开发,就能实现。
## 🧲应用场景模拟
[场景入口](https://www.yuque.com/rrqm/touchsocket/wrwx9k)
***
## 致谢
......@@ -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
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "RecommendRpcConsoleApp", "examples\TouchRpc简单示例\推荐用法\RecommendRpcConsoleApp\RecommendRpcConsoleApp.csproj", "{211DDA93-B293-44AD-9A9D-FC1617EA6ECD}"
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
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Any CPU = Debug|Any CPU
......@@ -440,6 +444,10 @@ Global
{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.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
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
......@@ -519,6 +527,8 @@ Global
{9E48D8F5-6DDC-4590-9EF4-1C5BE9C6FD22} = {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}
{20A1BFEC-2EB8-417D-9F60-F2FA91D4B650} = {84D1227F-3419-4BCD-9331-8B61B2C19784}
{3D1AC964-6E36-495B-83B3-7E544C90074B} = {20A1BFEC-2EB8-417D-9F60-F2FA91D4B650}
EndGlobalSection
GlobalSection(ExtensibilityGlobals) = postSolution
SolutionGuid = {DB787235-A13A-4A3D-B5A8-5DFEB6511EEE}
......
......@@ -6,7 +6,7 @@
</PropertyGroup>
<ItemGroup>
<PackageReference Include="TouchSocket" Version="1.2.10" />
<PackageReference Include="TouchSocket" Version="1.2.12" />
</ItemGroup>
<ItemGroup>
<None Update="SGCC测试数据.txt">
......
......@@ -7,6 +7,6 @@
</PropertyGroup>
<ItemGroup>
<PackageReference Include="TouchSocket" Version="1.2.10" />
<PackageReference Include="TouchSocket" Version="1.2.12" />
</ItemGroup>
</Project>
......@@ -8,7 +8,7 @@
</PropertyGroup>
<ItemGroup>
<PackageReference Include="TouchSocket" Version="1.2.10" />
<PackageReference Include="TouchSocket" Version="1.2.12" />
</ItemGroup>
</Project>
......@@ -9,7 +9,7 @@
</PropertyGroup>
<ItemGroup>
<PackageReference Include="TouchSocketPro" Version="1.2.16" />
<PackageReference Include="TouchSocketPro" Version="1.2.19" />
</ItemGroup>
</Project>
\ No newline at end of file
......@@ -8,7 +8,7 @@
</PropertyGroup>
<ItemGroup>
<PackageReference Include="TouchSocket" Version="1.2.10" />
<PackageReference Include="TouchSocket" Version="1.2.12" />
</ItemGroup>
</Project>
......@@ -8,7 +8,7 @@
</PropertyGroup>
<ItemGroup>
<PackageReference Include="TouchSocket" Version="1.2.10" />
<PackageReference Include="TouchSocket" Version="1.2.12" />
</ItemGroup>
</Project>
......@@ -6,6 +6,6 @@
</PropertyGroup>
<ItemGroup>
<PackageReference Include="TouchSocket" Version="1.2.10" />
<PackageReference Include="TouchSocket" Version="1.2.12" />
</ItemGroup>
</Project>
......@@ -6,7 +6,7 @@
</PropertyGroup>
<ItemGroup>
<PackageReference Include="TouchSocket" Version="1.2.10" />
<PackageReference Include="TouchSocket" Version="1.2.12" />
</ItemGroup>
</Project>
......@@ -6,7 +6,7 @@
</PropertyGroup>
<ItemGroup>
<PackageReference Include="TouchSocket" Version="1.2.10" />
<PackageReference Include="TouchSocket" Version="1.2.12" />
</ItemGroup>
</Project>
......@@ -6,6 +6,6 @@
</PropertyGroup>
<ItemGroup>
<PackageReference Include="TouchSocket" Version="1.2.10" />
<PackageReference Include="TouchSocket" Version="1.2.12" />
</ItemGroup>
</Project>
......@@ -5,6 +5,6 @@
<TargetFramework>net6.0</TargetFramework>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="TouchSocket" Version="1.2.10" />
<PackageReference Include="TouchSocket" Version="1.2.12" />
</ItemGroup>
</Project>
......@@ -7,7 +7,7 @@
<ItemGroup>
<PackageReference Include="Consul" Version="1.6.10.8" />
<PackageReference Include="TouchSocket" Version="1.2.10" />
<PackageReference Include="TouchSocket" Version="1.2.12" />
</ItemGroup>
</Project>
......@@ -7,7 +7,7 @@
<ItemGroup>
<PackageReference Include="Consul" Version="1.6.10.8" />
<PackageReference Include="TouchSocket" Version="1.2.10" />
<PackageReference Include="TouchSocket" Version="1.2.12" />
</ItemGroup>
</Project>
......@@ -8,7 +8,7 @@
<ItemGroup>
<PackageReference Include="Consul" Version="1.6.10.8" />
<PackageReference Include="TouchSocket" Version="1.2.10" />
<PackageReference Include="TouchSocket" Version="1.2.12" />
</ItemGroup>
</Project>
\ No newline at end of file
......@@ -7,7 +7,7 @@
</PropertyGroup>
<ItemGroup>
<PackageReference Include="TouchSocketPro" Version="1.2.16" />
<PackageReference Include="TouchSocketPro" Version="1.2.19" />
</ItemGroup>
</Project>
\ No newline at end of file
......@@ -7,6 +7,6 @@
</PropertyGroup>
<ItemGroup>
<PackageReference Include="TouchSocketPro" Version="1.2.16" />
<PackageReference Include="TouchSocketPro" Version="1.2.19" />
</ItemGroup>
</Project>
\ No newline at end of file
......@@ -5,6 +5,6 @@
<TargetFramework>net6.0</TargetFramework>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="TouchSocket" Version="1.2.10" />
<PackageReference Include="TouchSocket" Version="1.2.12" />
</ItemGroup>
</Project>
......@@ -5,6 +5,6 @@
<TargetFramework>net6.0</TargetFramework>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="TouchSocket" Version="1.2.10" />
<PackageReference Include="TouchSocket" Version="1.2.12" />
</ItemGroup>
</Project>
......@@ -12,7 +12,7 @@
</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="CommunityToolkit.Mvvm" Version="8.1.0" />
</ItemGroup>
......
......@@ -12,7 +12,7 @@
</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="CommunityToolkit.Mvvm" Version="8.1.0" />
</ItemGroup>
......
......@@ -6,6 +6,6 @@
</PropertyGroup>
<ItemGroup>
<PackageReference Include="TouchSocket" Version="1.2.10" />
<PackageReference Include="TouchSocket" Version="1.2.12" />
</ItemGroup>
</Project>
......@@ -7,6 +7,6 @@
<ItemGroup>
<PackageReference Include="Newtonsoft.Json" Version="13.0.2" />
<PackageReference Include="TouchSocket" Version="1.2.10" />
<PackageReference Include="TouchSocket" Version="1.2.12" />
</ItemGroup>
</Project>
......@@ -9,7 +9,7 @@
<ItemGroup>
<PackageReference Include="log4net" Version="2.0.15" />
<PackageReference Include="TouchSocket" Version="1.2.10" />
<PackageReference Include="TouchSocket" Version="1.2.12" />
</ItemGroup>
<ItemGroup>
......
......@@ -6,7 +6,7 @@
</PropertyGroup>
<ItemGroup>
<PackageReference Include="TouchSocketPro" Version="1.2.16" />
<PackageReference Include="TouchSocketPro" Version="1.2.19" />
</ItemGroup>
</Project>
......@@ -6,6 +6,6 @@
</PropertyGroup>
<ItemGroup>
<PackageReference Include="TouchSocket" Version="1.2.10" />
<PackageReference Include="TouchSocket" Version="1.2.12" />
</ItemGroup>
</Project>
......@@ -6,7 +6,7 @@
<ItemGroup>
<PackageReference Include="Swashbuckle.AspNetCore" Version="6.5.0" />
<PackageReference Include="TouchSocketPro" Version="1.2.16" />
<PackageReference Include="TouchSocketPro.AspNetCore" Version="1.2.0" />
<PackageReference Include="TouchSocketPro" Version="1.2.19" />
<PackageReference Include="TouchSocketPro.AspNetCore" Version="1.2.1" />
</ItemGroup>
</Project>
......@@ -46,8 +46,8 @@
<Reference Include="System.Net.Http" />
<Reference Include="System.Windows.Forms" />
<Reference Include="System.Xml" />
<Reference Include="TouchSocket, Version=1.2.10.0, Culture=neutral, PublicKeyToken=e66400a0f8ce7abb, processorArchitecture=MSIL">
<HintPath>..\..\..\packages\TouchSocket.1.2.10\lib\net45\TouchSocket.dll</HintPath>
<Reference Include="TouchSocket, Version=1.2.12.0, Culture=neutral, PublicKeyToken=e66400a0f8ce7abb, processorArchitecture=MSIL">
<HintPath>..\..\..\packages\TouchSocket.1.2.12\lib\net45\TouchSocket.dll</HintPath>
</Reference>
</ItemGroup>
<ItemGroup>
......
<?xml version="1.0" encoding="utf-8"?>
<packages>
<package id="TouchSocket" version="1.2.10" targetFramework="net48" />
<package id="TouchSocket" version="1.2.12" targetFramework="net48" />
</packages>
\ No newline at end of file
......@@ -6,7 +6,7 @@
</PropertyGroup>
<ItemGroup>
<PackageReference Include="TouchSocket" Version="1.2.10" />
<PackageReference Include="TouchSocket" Version="1.2.12" />
</ItemGroup>
</Project>
......@@ -46,8 +46,8 @@
<Reference Include="System.Net.Http" />
<Reference Include="System.Windows.Forms" />
<Reference Include="System.Xml" />
<Reference Include="TouchSocket, Version=1.2.10.0, Culture=neutral, PublicKeyToken=e66400a0f8ce7abb, processorArchitecture=MSIL">
<HintPath>..\..\..\packages\TouchSocket.1.2.10\lib\net45\TouchSocket.dll</HintPath>
<Reference Include="TouchSocket, Version=1.2.12.0, Culture=neutral, PublicKeyToken=e66400a0f8ce7abb, processorArchitecture=MSIL">
<HintPath>..\..\..\packages\TouchSocket.1.2.12\lib\net45\TouchSocket.dll</HintPath>
</Reference>
</ItemGroup>
<ItemGroup>
......
<?xml version="1.0" encoding="utf-8"?>
<packages>
<package id="TouchSocket" version="1.2.10" targetFramework="net48" />
<package id="TouchSocket" version="1.2.12" targetFramework="net48" />
</packages>
\ No newline at end of file
......@@ -8,7 +8,7 @@
</PropertyGroup>
<ItemGroup>
<PackageReference Include="TouchSocket" Version="1.2.10" />
<PackageReference Include="TouchSocket" Version="1.2.12" />
</ItemGroup>
</Project>
......@@ -6,7 +6,7 @@
</PropertyGroup>
<ItemGroup>
<PackageReference Include="TouchSocket" Version="1.2.10" />
<PackageReference Include="TouchSocket" Version="1.2.12" />
</ItemGroup>
</Project>
......@@ -8,7 +8,7 @@
</PropertyGroup>
<ItemGroup>
<PackageReference Include="TouchSocket" Version="1.2.10" />
<PackageReference Include="TouchSocket" Version="1.2.12" />
</ItemGroup>
</Project>
......@@ -8,6 +8,6 @@
<Compile Include="..\TouchRpcServerApp\RpcProxy.cs" Link="RpcProxy.cs" />
</ItemGroup>
<ItemGroup>
<PackageReference Include="TouchSocket" Version="1.2.10" />
<PackageReference Include="TouchSocket" Version="1.2.12" />
</ItemGroup>
</Project>
\ No newline at end of file
......@@ -6,7 +6,7 @@
</PropertyGroup>
<ItemGroup>
<PackageReference Include="TouchSocket" Version="1.2.10" />
<PackageReference Include="TouchSocket" Version="1.2.12" />
</ItemGroup>
</Project>
......@@ -8,7 +8,7 @@
</PropertyGroup>
<ItemGroup>
<PackageReference Include="TouchSocketPro" Version="1.2.16" />
<PackageReference Include="TouchSocketPro" Version="1.2.19" />
</ItemGroup>
</Project>
......@@ -6,6 +6,6 @@
</PropertyGroup>
<ItemGroup>
<PackageReference Include="TouchSocket" Version="1.2.10" />
<PackageReference Include="TouchSocket" Version="1.2.12" />
</ItemGroup>
</Project>
......@@ -7,6 +7,6 @@
<ItemGroup>
<PackageReference Include="Microsoft.Extensions.Logging.Abstractions" Version="7.0.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>
</Project>
......@@ -7,6 +7,6 @@
<Compile Include="..\TouchRpcWebApplication\RpcProxy.cs" Link="RpcProxy.cs" />
</ItemGroup>
<ItemGroup>
<PackageReference Include="TouchSocket.AspNetCore" Version="1.2.0" />
<PackageReference Include="TouchSocket.AspNetCore" Version="1.2.1" />
</ItemGroup>
</Project>
\ No newline at end of file
......@@ -6,7 +6,7 @@
<ItemGroup>
<PackageReference Include="MemoryPack" Version="1.9.13" />
<PackageReference Include="TouchSocketPro" Version="1.2.16" />
<PackageReference Include="TouchSocketPro" Version="1.2.19" />
</ItemGroup>
</Project>
......@@ -7,8 +7,8 @@
<Nullable>enable</Nullable>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="TouchSocketPro" Version="1.2.16" />
<PackageReference Include="TouchSocketPro.CodeAnalyzer" Version="1.2.6">
<PackageReference Include="TouchSocketPro" Version="1.2.19" />
<PackageReference Include="TouchSocketPro.CodeAnalyzer" Version="1.2.8">
<PrivateAssets>all</PrivateAssets>
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
</PackageReference>
......
......@@ -8,7 +8,7 @@
</PropertyGroup>
<ItemGroup>
<PackageReference Include="TouchSocketPro" Version="1.2.16" />
<PackageReference Include="TouchSocketPro" Version="1.2.19" />
</ItemGroup>
<ItemGroup>
......
......@@ -5,8 +5,8 @@
</PropertyGroup>
<ItemGroup>
<PackageReference Include="TouchSocketPro" Version="1.2.16" />
<PackageReference Include="TouchSocketPro.CodeAnalyzer" Version="1.2.6">
<PackageReference Include="TouchSocketPro" Version="1.2.19" />
<PackageReference Include="TouchSocketPro.CodeAnalyzer" Version="1.2.8">
<PrivateAssets>all</PrivateAssets>
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
</PackageReference>
......
......@@ -5,7 +5,7 @@
</PropertyGroup>
<ItemGroup>
<PackageReference Include="TouchSocketPro" Version="1.2.16" />
<PackageReference Include="TouchSocketPro" Version="1.2.19" />
</ItemGroup>
<ItemGroup>
......
......@@ -8,8 +8,8 @@
</PropertyGroup>
<ItemGroup>
<PackageReference Include="TouchSocketPro" Version="1.2.16" />
<PackageReference Include="TouchSocketPro.CodeAnalyzer" Version="1.2.6">
<PackageReference Include="TouchSocketPro" Version="1.2.19" />
<PackageReference Include="TouchSocketPro.CodeAnalyzer" Version="1.2.8">
<PrivateAssets>all</PrivateAssets>
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
</PackageReference>
......
......@@ -7,7 +7,7 @@
</PropertyGroup>
<ItemGroup>
<PackageReference Include="TouchSocket" Version="1.2.10" />
<PackageReference Include="TouchSocket" Version="1.2.12" />
</ItemGroup>
</Project>
\ No newline at end of file
......@@ -7,7 +7,7 @@
</PropertyGroup>
<ItemGroup>
<PackageReference Include="TouchSocket" Version="1.2.10" />
<PackageReference Include="TouchSocket" Version="1.2.12" />
</ItemGroup>
</Project>
\ No newline at end of file
......@@ -7,6 +7,6 @@
</PropertyGroup>
<ItemGroup>
<PackageReference Include="TouchSocket" Version="1.2.10" />
<PackageReference Include="TouchSocket" Version="1.2.12" />
</ItemGroup>
</Project>
\ No newline at end of file
......@@ -8,7 +8,7 @@
</PropertyGroup>
<ItemGroup>
<PackageReference Include="TouchSocket" Version="1.2.10" />
<PackageReference Include="TouchSocket" Version="1.2.12" />
</ItemGroup>
</Project>
......@@ -5,6 +5,6 @@
<TargetFramework>net6.0</TargetFramework>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="TouchSocket" Version="1.2.10" />
<PackageReference Include="TouchSocket" Version="1.2.12" />
</ItemGroup>
</Project>
......@@ -4,6 +4,6 @@
<TargetFramework>net6.0</TargetFramework>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="TouchSocket" Version="1.2.10" />
<PackageReference Include="TouchSocket" Version="1.2.12" />
</ItemGroup>
</Project>
\ No newline at end of file
......@@ -6,7 +6,7 @@
</PropertyGroup>
<ItemGroup>
<PackageReference Include="TouchSocket" Version="1.2.10" />
<PackageReference Include="TouchSocket" Version="1.2.12" />
</ItemGroup>
</Project>
......@@ -7,7 +7,7 @@
</PropertyGroup>
<ItemGroup>
<PackageReference Include="TouchSocket" Version="1.2.10" />
<PackageReference Include="TouchSocket" Version="1.2.12" />
</ItemGroup>
</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 @@
</PropertyGroup>
<ItemGroup>
<PackageReference Include="TouchSocket" Version="1.2.10" />
<PackageReference Include="TouchSocket" Version="1.2.12" />
</ItemGroup>
</Project>
......@@ -4,6 +4,6 @@
<TargetFramework>net6.0</TargetFramework>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="TouchSocket" Version="1.2.10" />
<PackageReference Include="TouchSocket" Version="1.2.12" />
</ItemGroup>
</Project>
\ No newline at end of file
......@@ -6,7 +6,7 @@
</PropertyGroup>
<ItemGroup>
<PackageReference Include="TouchSocket" Version="1.2.10" />
<PackageReference Include="TouchSocket" Version="1.2.12" />
</ItemGroup>
</Project>
......@@ -6,6 +6,6 @@
<ImplicitUsings>enable</ImplicitUsings>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="TouchSocket" Version="1.2.10" />
<PackageReference Include="TouchSocket" Version="1.2.12" />
</ItemGroup>
</Project>
......@@ -6,6 +6,6 @@
<UseWindowsForms>true</UseWindowsForms>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="TouchSocketPro" Version="1.2.16" />
<PackageReference Include="TouchSocketPro" Version="1.2.19" />
</ItemGroup>
</Project>
\ No newline at end of file
......@@ -6,6 +6,6 @@
</PropertyGroup>
<ItemGroup>
<PackageReference Include="TouchSocketPro" Version="1.2.16" />
<PackageReference Include="TouchSocketPro" Version="1.2.19" />
</ItemGroup>
</Project>
......@@ -4,13 +4,13 @@
<meta charset="UTF-8">
<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">
<link rel="preload" href="/touchsocket/assets/js/runtime~main.2f749209.js" as="script">
<link rel="preload" href="/touchsocket/assets/js/main.53d0b925.js" as="script">
<link rel="preload" href="/touchsocket/assets/js/runtime~main.4d96ddc9.js" as="script">
<link rel="preload" href="/touchsocket/assets/js/main.66ba2a18.js" as="script">
</head>
<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">
<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/main.53d0b925.js"></script>
<script src="/touchsocket/assets/js/runtime~main.4d96ddc9.js"></script>
<script src="/touchsocket/assets/js/main.66ba2a18.js"></script>
</body>
</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"}')}}]);
\ No newline at end of file
"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
"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"}}]);
\ 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(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
"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}}]);
\ 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:"\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
此差异已折叠。
"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"}')}}]);
\ No newline at end of file
"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
"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"}}]);
\ 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(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
"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"}}]);
\ 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(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
"use strict";(self.webpackChunktouchsocket=self.webpackChunktouchsocket||[]).push([[7978],{3769:e=>{e.exports=JSON.parse('{"name":"docusaurus-plugin-content-docs","id":"default"}')}}]);
\ No newline at end of file
"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
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。