本文共 1470 字,大约阅读时间需要 4 分钟。
服务端本来就可以处理短连接,则不需要修改
原因:P129\ABCBank\BankServer\Server.cpp P129\ABCBank\BankServer\BankThread.cpp P129\ABCBank\BankServer\BankSession.cpp短连接操作演示
客户端执行查询操作后,客户端就断开连接了将短连接修改成长连接需要注意的地方是:
短连接:每次请求都要连接服务器端,即:one connection per request; 长连接:每个客户端只连接一次服务器端,即:one connection per client;eg:P 129只是修改了客户端的登录和查询操作,其余的没改,要改自己改下就行
P129\ABCBank\BankClient\UI\LoginForm.cpp P129\ABCBank\BankClient\UI\BalanceInquiryForm.cpp P129\ABCBank\BankClient\main.cpp P129\ABCBank\BankClient\Client.cpp以客户端的登录和查询操作为eg,将短连接改成长连接
P128\ABCBank\BankClient\UI\LoginForm.cpp短连接//客户端BankSession是短连接的原因:BankSession bs;是局部变量,出了该作用域, //BankSession的析构函数都会被调用,BankSession的智能指针socket_会被释放掉,它所管理的对象Socket也会被释放掉 //所以连接会断开 try { BankSession bs; bs.SetCmd(CMD_LOGIN); bs.SetAttribute("name", editUser_->GetText()); bs.SetAttribute("pass", editPass_->GetText()); Singleton::Instance().DoAction(bs);
P129\ABCBank\BankClient\UI\LoginForm.cpp长连接
try { //改成长连接 BankSession* bs = Singleton::Instance().GetBankSession();//登录操作完成后,bs是存在的,不会释放掉,因为单例的Client端未被释放掉 //因为所有请求和应答数据都公用一个BankSession,所以每次做事情之前最好Clear下 //比如查询明细,可能有应答,应答数据实际保存在response_.clear();,此时又做了一次查询,这次的查询没查到任何内容,但是 //response_.clear()没有clear()掉,会将以前的内容给显示出来,所以每次请求之前都Clear()一下 bs->Clear(); bs->SetCmd(CMD_LOGIN); bs->SetAttribute("name", editUser_->GetText()); bs->SetAttribute("pass", editPass_->GetText());
转载地址:http://ymiws.baihongyu.com/