博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
(P129)abcbank长连接版
阅读量:4299 次
发布时间:2019-05-27

本文共 1470 字,大约阅读时间需要 4 分钟。

文章目录

1.短连接vs长连接

  • 服务端本来就可以处理短连接,则不需要修改

    原因: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/

你可能感兴趣的文章
ping、traceroute、host、curl以及wget
查看>>
git merge 时可能会遇到的问题
查看>>
淘宝 OAuth2.0 的登录验证与授权
查看>>
git stash 使用技巧
查看>>
nginx 中location和root,你确定真的明白他们关系?
查看>>
一篇文章精通常用 git 命令
查看>>
Nginx配置文件nginx.conf 总结
查看>>
基础JavaScript 实例学习
查看>>
JavaScript的数据类型
查看>>
JavaScript 函数
查看>>
Javascript中for循环
查看>>
JavaScript While循环
查看>>
git 中fetch+rebase工作流
查看>>
mac 上开发环境的安装(djang, git , virtualenv)
查看>>
linux 查询用户 w, who, last, lastlog
查看>>
python 对象的魔力--多态、封装和继承
查看>>
设置mysql 的root密码
查看>>
django filter 中使用 or (django中Q)
查看>>
python strip()函数 介绍
查看>>
django http请求request详解
查看>>