这一篇是将Android和C#实现Thrift服务端和客户端中C#部分单独拆分开来的,方便不需要Android的开发者使用。
编写Thrift文件
写个简单的,有输入参数,无返回值,文件命名为 HelloWorld.thrift
service HelloWorldService{
void SayHello(1:string msg);
}
根据Thrift文件生成对应的C#和java文件,生成的C#和java都只有一个文件。
可以看到我用的是Thrift 0.10.0版本
C# Thrift服务端和客户端实现,并实现消息发送及接收
创建一个WinForm应用程序,命名为Thrift_HelloWorld_Csharp。
将生成的C#文件拷到项目中,并包含在项目里。在Nuget中添加thrift-csharp的引用,0.10.0版本的。
目录结构如图:
最后要实现的效果是:当前程序启动一个Thrift服务,并且能通过当前程序调用Thrift Client发送消息到服务端。
效果如下:
点击【启动】即可启动C#服务端,填写完正确的端口号,点击【发送】即可完成消息发送,因为是在本机测试,所以Ip地址固定为127.0.0.1。输入Android映射出来的端口号即可完成与Android服务端通信。
Thrift Server 代码:
public class HelloWorldServer : HelloWorldService.Iface
{
public static void Run(int port)
{
HelloWorldServer client = new HelloWorldServer();
HelloWorldService.Processor processor = new global::HelloWorldService.Processor(client);
TServerTransport transport = new TServerSocket(port);
TServer server = new TThreadPoolServer(processor, transport);
Console.WriteLine("Starting the server...");
server.Serve();
transport.Close();
}
public void SayHello(string msg)
{
Console.WriteLine(string.Format("{0:yyyy/MM/dd hh:mm:ss} {1}", DateTime.Now, msg));
}
}
调用Run方法即可启动Thrift服务,需另开一个线程运行此方法才不会阻塞下面的功能。
Thrift Client发送消息至服务端代码:
public static class HelloWorldClient
{
public static void Say(int port, string msg, string ip = "127.0.0.1")
{
TTransport transport = new TSocket(ip, port);
TProtocol protocol = new TBinaryProtocol(transport);
HelloWorldService.Client client = new HelloWorldService.Client(protocol);
transport.Open();
try
{
client.SayHello(msg);
}
catch (TApplicationException x)
{
Console.WriteLine(x.StackTrace);
}
finally
{
transport.Close();
}
}
}
调用Say方法即可实现消息发送。当将port设置为服务端端口号时即可实现发送消息至当前服务端。
就是这么简单。
源码地址:
C#实现的Thrift服务端与客户端
文章浏览阅读172次。题目描述 Description 小松终于步入了大学的殿堂,带着兴奋和憧憬,他参加了信息科学技术学院的新生大会。会上,院长梅教授给大家介绍了在大学中的成绩计算方式: 需要解释一下的是,小_gpa输入的第一行
文章浏览阅读2w次,点赞8次,收藏7次。【每天1分钟】MarkDown语法学习之插入代码块Markdown在IT圈子里面比较流行的一个重要原因是,它能够轻松漂亮地插入代码。方法是,使用反引号`进行包裹即可。如果是行内代码引用,使用单个反引号进行包裹这是一段 var x = 3 行内代码如果插入一整段代码,需要至少使用两个以上反引号进行包裹, 看效果:fun (x: Int, y: Int): Int { return x ..._idea markdown 插入代码块
文章浏览阅读1.3k次,点赞29次,收藏20次。缓存穿透:查询一个不存在的数据,mysql查询不到数据也不会直接写入缓存,就会导致每次请求都会去查数据库,数据库的压力增大。缓存击穿:给某一个key设置了过期时间,当key过期的时候,恰好这时间点对这个key有大量的并发请求过来,这些并发的请求可能会瞬间把DB压垮。缓存雪崩是指在同一时段大量的缓存key同时失效或者Redis服务宕机,导致大量请求到达数据库,带来巨大压力。客户端对数据库中的数据主要有两类操作,读(select)与写(DML)。缓存由于其高并发和高性能的特性,已经在项目中被广泛使用。
文章浏览阅读98次。这种格式的时间 2022-08-12 12:13:00 ,判断它是今天还是明天,还是几天后_["2023-12-08 13:45","2023-12-09 13:45"]取时间
文章浏览阅读369次。问题的描述MFC应用程序远程访问MYSQL数据库,程序初始化时创建一个连接池,通常保存10个连接用于访问数据库使用。该程序平时运行正常,但是程序正常使用后闲置一个晚上不关闭,第二天第一次使用报错如标题。分析使用命令查询数据库超时参数,服务器安装MYSQL 数据库版本为5.7.22。查询命令:show global variables like '%timeout';..._mysql5.7 [err] 2006 - mysql server has gone awa
文章浏览阅读687次。Android 新手想要入门,很容易会遇到各类困难和学习瓶颈。没有一个好学的学习方向,学习规划,学习教程,这都是新手会面临的问题。 很多人会在百度上搜索,查阅相关资料。但是网上搜索的很多资料,都是断片式的学习,缺乏完整性和系统性。那么新手应该从何学起?这样学习呢?这里给大家一份最强Android入门指南:_android 开发指南
文章浏览阅读1.9w次,点赞7次,收藏60次。在做分类时常常需要估算不同样本之间的相似性度量(SimilarityMeasurement),这时通常采用的方法就是计算样本间的“距离”(Distance)。采用什么样的方法计算距离是很讲究,甚至关系到分类的正确与否。 本文的目的就是对常用的相似性度量作一个总结。本文目录:1.欧氏距离2.曼哈顿距离3. 切比雪夫距离4. 闵可夫斯基距离_马氏距离中间那个矩阵是啥
文章浏览阅读820次。表输出控件如下1)步骤名称,2)数据库连接,前面有过部分解释3)目标模式,数据库中的概念,引用:https://www.cnblogs.com/csniper/p/5509620.html(感谢)4)目标表:数据库中的表,这里有两种方式:(1) 应用数据库中已经存在的表,浏览表选中对应表即可,下图有部分sql功能。ddl可以执行ddl语句。(2) 创建新的表,填写表的名字,点击下面的sql就可以执..._kettle 步骤 提交
文章浏览阅读4.4k次,点赞2次,收藏2次。鼠标选中多行,按下 widows 下 Ctrl Shift L( Mac下 Command Shift L)即可同时编辑这些行;鼠标选中文本,反复按widows 下CTRL D(Mac下 Command D)即可继续向下同时选中下一个相同的文本进行同时编辑;鼠标选中文本,按下Alt F3(Win)或Ctrl Command G(Mac)即可一次性选择全部的相同文本进行同时编辑;..._submlite 同时操作多行 macos
文章浏览阅读252次。尽管Linux是具有广泛硬件和软件支持的出色操作系统,但现实是有时您必须使用Windows,这可能是由于关键应用程序无法在Linux下运行。 幸运的是,双重引导Windows和Linux非常简单-本文将向您展示如何使用Windows 10和Ubuntu 18.04进行设置。 在开始之前,请确保已备份计算机。 尽管双启动设置过程不是很复杂,但是仍然可能发生事故。 因此,请花点时间备份您的重要..._windows linux双启动
文章浏览阅读1.6w次,点赞25次,收藏20次。本文主要介绍Flink 的3种常用的operator(map、flatmap和filter)及以具体可运行示例进行说明.将集合中的每个元素变成一个或多个元素,并返回扁平化之后的结果。按照指定的条件对集合中的元素进行过滤,过滤出返回true/符合条件的元素。本文主要介绍Flink 的3种常用的operator及以具体可运行示例进行说明。这是最简单的转换之一,其中输入是一个数据流,输出的也是一个数据流。下文中所有示例都是用该maven依赖,除非有特殊说明的情况。中了解更新系统的内容。中了解更新系统的内容。_flink 常用的分类和计算
文章浏览阅读590次。IMP-00019: row rejected due to ORACLE error 12899IMP-00003: ORACLE error 12899 encounteredORA-12899: value too large for column "CRM"."BK_ECS_ORDER_INFO_00413"."POSTSCRIPT" (actual: 895, maximum..._row rejected due to oracle