0
点赞
收藏
分享

微信扫一扫

(P129)abcbank长连接版


文章目录

  • ​​1.短连接vs长连接​​

1.短连接vs长连接

  • 服务端本来就可以处理短连接,则不需要修改
    原因:P129\ABCBank\BankServer\Server.cpp
    P129\ABCBank\BankServer\BankThread.cpp
    P129\ABCBank\BankServer\BankSession.cpp
  • 短连接操作演示
    客户端执行查询操作后,客户端就断开连接了
  • (P129)abcbank长连接版_短连接

  • 将短连接修改成长连接需要注意的地方是:
    短连接:每次请求都要连接服务器端,即:one connection per request;
    长连接:每个客户端只连接一次服务器端,即:one connection per client;
  • (P129)abcbank长连接版_长连接_02

  • 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<TransactionManager>::Instance().DoAction(bs);

P129\ABCBank\BankClient\UI\LoginForm.cpp长连接

try
{
//改成长连接
BankSession* bs = Singleton<Client>::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());

  • 测试:余额查询完毕后也不会断开连接,即一个客户端与服务器端只保持一个长连接

    先启动客户端,再启动服务端的优化

    若不优化,则先启动客户端,再启动服务端会出现下面的错误



举报

相关推荐

0 条评论