Thrift第七课 C#语言测试C++服务器

简介:

场景

目前通过Thrift框架生成了C#代码,由于没有怎么接触过这门语言,因此直接启动程序模拟多个用户进行测试。在无法修改代码进行负载性测试的情况下,可以使用system函数启动程序,模拟多个用户的实际操作。


#include <windows.h>


int main()

{

while (1)

{

::system("E:/thriftserver/thrift-csharp/ThriftTest/bin/Debug/ThriftTest.exe");

::Sleep(1000);

}


return 0;

}


C#的实际代码如下

       static void ProcessThread(TProtocol protocol)

        {

            TProcessor processor = new PushMessageService.Processor(new CRecvMessageSErviceImpl());

            while (true)

            {

                try

                {

                    while (processor.Process(protocol, protocol)) { };

                    return;

                }

                catch (System.NullReferenceException tt)

                {

                    return;

                }

                catch (Thrift.Transport.TTransportException tt)

                {

                    //服务器没有启动,会抛出此异常

                    return;

                }

            }

        }


        static void MonitorThread(TTransport trans, Action<string> callback)

        {

            while (true)

            {

                try

                {

                    if (!trans.Peek())

                    {

                        callback("connect close\n");

                    }

                    Thread.Sleep(200);

                }

                catch (Thrift.TApplicationException ex)

                {

                    callback(ex.Message);

                    return;

                }

            }

        }


        static void Main(string[] args)

        {

            TTransport transport = new TBufferedTransport(new TSocket("192.168.1.110", 7001));

            TProtocol protocol = new TBinaryProtocol(transport);

            UploadMessageService.Client client = new UploadMessageService.Client(protocol);

            Action<TProtocol> processAction = new Action<TProtocol>(ProcessThread);

            Action<TTransport, Action<string>> monitorAction = new Action<TTransport, Action<string>>(MonitorThread);


            try

            {

                transport.Open();

                processAction.BeginInvoke(protocol, (result) =>

                {

                    processAction.EndInvoke(result);

                }, null);


                monitorAction.BeginInvoke(transport, (msg) =>

                {

                    Console.WriteLine("connect stop", msg);

                }, (result) =>

                {


                }, null);



                info.StrUserId = "admin";

                info.StrPassword = "admin";

                client.Login(info);

                }

            }

            catch (System.NullReferenceException  ttx)

            {

                //服务器停止运行,会抛出此异常

                return;

            }

            catch (System.IO.IOException ttx)

            {

                return;

            }

            catch (Thrift.Transport.TTransportException tt)

            {

                //服务器没有启动,会抛出此异常

                return;

            }

            //transport.Close();

//在这里模拟异常情况,没有正常关闭

        }

    }




     本文转自fengyuzaitu 51CTO博客,原文链接:http://blog.51cto.com/fengyuzaitu/2071782,如需转载请自行联系原作者


相关文章
|
1月前
|
数据处理 C# C++
如何使用C#和C++结构体实现Socket通信
如何使用C#和C++结构体实现Socket通信
|
8天前
|
缓存 编译器 API
NumPy与其他语言(如C/C++)的接口实践
【4月更文挑战第17天】本文介绍了NumPy与C/C++的接口实践,包括Python与C/C++交互基础、NumPy的C API和Cython的使用。通过案例展示了如何将C++函数与NumPy数组结合,强调了内存管理、类型匹配、错误处理和性能优化的最佳实践。掌握这些技能对于跨语言交互和集成至关重要。
|
17天前
|
程序员 C++
C++语言模板学习应用案例
C++模板实现通用代码,以适应多种数据类型。示例展示了一个计算两数之和的模板函数`add&lt;T&gt;`,可处理整数和浮点数。在`main`函数中,展示了对`add`模板的调用,分别计算整数和浮点数的和,输出结果。
12 2
|
1月前
|
Java API 开发工具
【软件设计师备考 专题 】C、C++、Java、Visual Basic、Visual C++等语言的基础知识和应用(三)
【软件设计师备考 专题 】C、C++、Java、Visual Basic、Visual C++等语言的基础知识和应用
30 0
|
1月前
|
Java 数据处理 数据库
【软件设计师备考 专题 】C、C++、Java、Visual Basic、Visual C++等语言的基础知识和应用(二)
【软件设计师备考 专题 】C、C++、Java、Visual Basic、Visual C++等语言的基础知识和应用
34 0
|
1月前
|
存储 算法 Java
【软件设计师备考 专题 】C、C++、Java、Visual Basic、Visual C++等语言的基础知识和应用(一)
【软件设计师备考 专题 】C、C++、Java、Visual Basic、Visual C++等语言的基础知识和应用
34 0
|
1月前
|
安全 数据处理 C#
C# Post数据或文件到指定的服务器进行接收
C# Post数据或文件到指定的服务器进行接收
|
1月前
|
Java 程序员 C#
C++ 编程入门指南:深入了解 C++ 语言及其应用领域
C++是一种由Bjarne Stroustrup开发的跨平台编程语言,以C语言为基础并添加了面向对象特性。它用于创建高性能应用,支持类和对象,提供高级系统资源控制。C++经历了多次更新,包括C++11、C++14、C++17和C++20。因其可移植性和代码重用,成为流行选择。学习C++简单有趣,与C、C#、Java有共通性。开始C++编程,可以从打印&quot;Hello World!&quot;的简单程序入手。关注微信公众号`Let us Coding`获取更多内容。
24 0
|
1月前
|
存储 安全 C语言
不只是printf:探究C/C++语言中的可变参数函数
不只是printf:探究C/C++语言中的可变参数函数
27 0
|
1月前
|
Unix Linux C语言
【C/C++ 跳转函数】setjmp 和 longjmp 函数的巧妙运用: C 语言错误处理实践
【C/C++ 跳转函数】setjmp 和 longjmp 函数的巧妙运用: C 语言错误处理实践
19 0