1. 程式人生 > >Thrift第七課 C#語言測試C++服務器

Thrift第七課 C#語言測試C++服務器

++ 框架 arp shm rift 直接 [] buffere pan

場景

目前通過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();

//在這裏模擬異常情況,沒有正常關閉

}

}


Thrift第七課 C#語言測試C++服務器