TouchSocket的WebAPI开发服务端

TouchSocket.Net(包括 C# 、VB.Net、F#)的一个整合性的 socket网络通信框架用于TCP通讯,也可以udp、ssl等一系列的通信模块。

大家都使用过其他的Socket产品,那么TouchSocket在设计时也是借鉴了其他产品的优秀设计理念,数据处理适配器就是其中之一,但和其他产品的设计不同的是,TouchSocket的适配器功能更加强大,易用,且灵活。它不仅可以提前解析数据包,还可以解析数据对象,可以随时替换,然后立即生效。例如:可以使用固定包头对数据进行预处理,从而解决数据分包粘包的问题。也可以直接解析HTTP数据协议、WebSocket数据协议等。

如下示例:

using System;
using System.Threading.Tasks;
using TouchSocket.Core;
using TouchSocket.Http;
using TouchSocket.Rpc;
using TouchSocket.Rpc.WebApi;
using TouchSocket.Sockets;namespace WebApiServerApp
{internal class Program{private static void Main(string[] args){WebApiParserPlugin webApiParser = null;HttpService service = new HttpService();service.Setup(new TouchSocketConfig().UsePlugin().SetListenIPHosts(new IPHost[] { new IPHost(7789) }).ConfigureRpcStore(a =>{a.RegisterServer<Server>();//注册服务}).ConfigurePlugins(a =>{a.UseCheckClear();webApiParser = a.UseWebApi();a.UseDefaultHttpServicePlugin();//此插件是http的兜底插件,应该最后添加。作用是当所有路由不匹配时返回404.且内部也会处理Option请求。可以更好的处理来自浏览器的跨域探测。})).Start();Console.WriteLine("以下连接用于测试webApi");Console.WriteLine($"使用:http://127.0.0.1:7789/Server/Sum?a=10&b=20");//下列代码,会生成客户端的调用代码。string codeString = webApiParser.RpcStore.GetProxyCodes("WebApiProxy");Console.ReadKey();}}public class Server : RpcServer{private readonly ILog m_logger;public Server(ILog logger){this.m_logger = logger;}[Origin(AllowOrigin = "*")]//跨域设置[Router("[api]/[action]ab")]//此路由会以"/Server/Sumab"实现[Router("[api]/[action]")]//此路由会以"/Server/Sum"实现[WebApi(HttpMethodType.GET)]public int Sum(int a, int b){return a + b;}[WebApi(HttpMethodType.POST)]public int TestPost(MyClass myClass){return myClass.A + myClass.B;}/// <summary>/// 使用调用上下文,响应文件下载。/// </summary>/// <param name="callContext"></param>[WebApi(HttpMethodType.GET, MethodFlags = MethodFlags.IncludeCallContext)]public Task<string> DownloadFile(IWebApiCallContext callContext, string id){if (id == "rrqm"){callContext.HttpContext.Response.FromFile(@"D:\System\Windows.iso", callContext.HttpContext.Request);return Task.FromResult("ok");}return Task.FromResult("id不正确。");}/// <summary>/// 使用调用上下文,获取实际请求体。/// </summary>/// <param name="callContext"></param>[WebApi(HttpMethodType.POST, MethodFlags = MethodFlags.IncludeCallContext)][Router("[api]/[action]")]public Task<string> PostContent(IWebApiCallContext callContext){if (callContext.Caller is ISocketClient socketClient){this.m_logger.Info($"IP:{socketClient.IP},Port:{socketClient.Port}");//获取Ip和端口}if (callContext.HttpContext.Request.TryGetContent(out byte[] content)){this.m_logger.Info($"共计:{content.Length}");}return Task.FromResult("ok");}}public class MyClass{public int A { get; set; }public int B { get; set; }}
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/858223.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

2024年6月23日 语法纠正

Certainly! Below is a comparison of the original content and the polished version, with explanations for the changes: Original: “Good afternoon, everybody! Hopefully not disturb your wonderful weekend.” Polished: “Good afternoon, everyone! I hope I’m n…

【Vision AI v2开箱之SenseCraft AI猫狗识别Arduino教程】

【Vision AI v2开箱之SenseCraft AI猫狗识别Arduino教程】 1. 前言2. 实验材料2.1 Grove Vision AI Module V22.1.1 特征2.1.2 硬件概述2.1.3 启动/重置/程序2.1.4 驱动 2.2 ESP32C32.2.1 引脚图2.2.2 组件概述2.2.3 电源引脚 2.3 SenseCraft AI Model Assistant2.3.1 部署的模…

从低代码开发看,国企数字化转型的思考与探索

引言 在我国新时代发展战略背景下&#xff0c;国有企业作为国家经济的重要支柱&#xff0c;正面临着从传统经营模式向数字化转型的挑战。数字化转型不仅能提高企业经营效率&#xff0c;还能为企业创新提供强大动力。低代码开发作为一种新兴的软件开发模式&#xff0c;有助于简化…

【雷丰阳-谷粒商城 】【分布式高级篇-微服务架构篇】【13】压力压测JMeter-性能监控jvisualvm

持续学习&持续更新中… 守破离 【雷丰阳-谷粒商城 】【分布式高级篇-微服务架构篇】【13】压力压测JMeter-性能监控jvisualvm 压力测试概述性能指标 JMeter基本使用添加线程组添加 HTTP 请求添加监听器启动压测&查看分析结果JMeter Address Already in use 错误解决 性…

Hive数据锁问题处理

在测试环境有定时任务会定期将flume采集的数据load到hive表中&#xff0c;在查看yarn application过程中发现load操作没有执行&#xff0c;且后续的任务在上一个任务执行结束后很久才开始。感觉像是阻塞一样&#xff0c;于是手动执行相关脚本&#xff0c;发现也是会卡住&#x…

【Linux】进程间通信上 (1.5万字详解)

目录 一.进程间通信介绍 1.1进程间通信的目的 1.2初步认识进程间通信 1.3进程间通信的种类 二.匿名管道 2.1何为管道 2.1实现原理 2.3进一步探寻匿名管道 2.4编码实现匿名管道通信 2.5管道读写特点 2.6基于管道的进程池设计 三.命名管道 3.1实现原理 3.2代码实现 四.…

视觉理解与图片问答,学习如何使用 GPT-4o (GPT-4 Omni) 来理解图像

&#x1f349; CSDN 叶庭云&#xff1a;https://yetingyun.blog.csdn.net/ 一、引言 OpenAI 最新发布的 GPT-4 Omni 模型&#xff0c;也被称为 GPT-4o&#xff0c;是一个多模态 AI 模型&#xff0c;旨在提供更加自然和全面的人机交互体验。 GPT-4o 与 GPT-4 Turbo 都具备视觉功…

SuiNS发布子名及新命名标准,推动Web3身份结构的进步

SuiNS子名是Sui Name Service的强大扩展&#xff0c;最近与新命名标准一起发布。子名允许用户在一个主要的SuiNS名下创建额外的自定义身份&#xff0c;而无需额外费用。用户 gia 可以创建如 gaminggia 或 lendinggia 这样的子名&#xff0c;从而增强个人组织和支持群组与组织的…

068、PyCharm 关于Live Template模板

在 PyCharm 编辑器中&#xff0c;Live Templates 是一种功能强大的工具&#xff0c;可以帮助我们快速插入常用的代码片段或模板。 以下是在 PyCharm 中添加 Live Templates 的步骤&#xff1a; 添加 Live Templates 步骤&#xff1a; 打开 PyCharm 编辑器。 转到菜单栏中的 …

飞行堡垒系列_键盘灯开关

飞行堡垒系列键盘灯可以通过键盘上的"Fn 方向键"控制 演示机型品牌型号&#xff1a;飞行堡垒8 系统版本&#xff1a;Windows 11 飞行堡垒键盘灯可通过键盘上的"Fn方向键"控制。 " Fn 下方向键 "为减弱键盘灯光&#xff0c;多按几次键盘灯就可…

Linux源码阅读笔记05-进程优先级与调度策略-实战分析

基础知识 Linux 内核当中有 3 种调度策略&#xff1a; SCHED_OTHER 分时调度策略&#xff1b;SCHED_FIFO 实时调度策略&#xff0c;先到先服务&#xff1b;SCHED_RR 实时调度策略&#xff0c;时间片轮转。 如果有相同优先级的实时进程&#xff08;根据优先级计算的调度权值是…

Python基础之面向对象

文章目录 1 面向对象1.1 类方法1.1.1 普通方法1.1.1.1 实例调用1.1.1.2 类调用 1.1.2 类方法1.1.3 类静态方法 1.2 继承1.2.1 单继承1.2.2 多继承 1.3 方法重写1.4 类私有属性方法和专有方法1.4.1 类的私有属性1.4.2 类的私有方法1.4.3 类专有方法 1 面向对象 Python从设计之初…

2024 年值得推荐的 10 款 iPhone 数据恢复软件

iPhone 从来都不是一个简单的打电话电话。它就像一台微型电脑&#xff0c;让我们互相联系、拍照、拍视频、发邮件、看文档、看书。然而&#xff0c;随着它成为日常生活的必需品&#xff0c;我们总是容易因各种原因丢失数据&#xff0c;如删除、恢复出厂设置、iOS 错误、文件同步…

云手机在跨平台兼容性方面优势明显?有何应用场景

跨平台设备间无缝切换和数据同步的需求现在是很多人或者企业都需要的&#xff0c;云手机在这些方面似乎有很大优势&#xff1f;下面我们来具体探讨在兼容方面&#xff0c;云手机有何出彩之处&#xff1f;又支持哪些应用场景呢 先来说说云手机跨平台兼容性优势所在&#xff0c;要…

【设计模式深度剖析】【9】【行为型】【访问者模式】| 以博物馆的导览员为例加深理解

&#x1f448;️上一篇:备忘录模式 | 下一篇:状态模式&#x1f449;️ 设计模式-专栏&#x1f448;️ 文章目录 访问者模式定义英文原话直译如何理解呢&#xff1f; 访问者模式的角色类图代码示例 访问者模式的应用优点缺点使用场景 示例解析:博物馆的导览员代码示例 访问…

【React】useEffect等价于那几个生命周期函数

useEffect 在 React 的函数组件中相当于类组件中的几个生命周期方法的组合。具体来说,它可以模拟以下生命周期函数的行为: componentDidMount:当 useEffect 的第二个参数(依赖项数组)为空数组 [] 时,传入的回调函数会在组件挂载后立即执行,这与 componentDidMount 的行为…

DK盾-服务器 + docusaurus搭建

DK盾云服务器官网&#xff1a;https://www.dkdun.cn 详细可看我的github博客https://mumuzi7179.github.io/docs/Blog/%E5%8F%8B%E9%93%BE 主要是CSDN审核不通过 DK盾CTF群–727077055 以下是为了审核通过顺带写的。。 Docusaurus搭建 第一步&#xff0c;安装npm curl -f…

NLP中文本的嵌入层

在自然语言处理&#xff08;NLP&#xff09;任务中&#xff0c;模型学习的不是原始的文本字符串&#xff0c;而是这些字符串通过分词和索引化过程转换成的单词索引。实际学习的内容是这些单词索引对应的嵌入向量及其在模型中的权重。 原始文本到模型输入的过程 原始文本&#…

Mybatis——动态sql

if标签 用于判断条件是否成立。使用test属性进行条件判断&#xff0c;如果条件为true&#xff0c;则拼接sql。 <where>标签用于识别语句是否需要连接词and&#xff0c;识别sql语句。 package com.t0.maybatisc.mapper;import com.t0.maybatisc.pojo.Emp; import org.a…

linux关于epoll概述(各项组成,以及作用)

在 Linux 中&#xff0c;多个进程可以各自创建自己的 epoll 对象&#xff0c;每个进程都有独立的 epoll 实例&#xff0c;即拥有独立的 eventpoll 结构体和相关的数据结构&#xff08;如红黑树、就绪列表等&#xff09;。 当一个进程调用 epoll_create 函数时&#xff0c;Linu…