当前位置: 首页 > news >正文

沈阳网站建设建设公司排名网站优化推广怎么做

沈阳网站建设建设公司排名,网站优化推广怎么做,网站建设:成都今网科技,擅自使用他人产品做网站宣传目录 登录状态业务层代码数据模型层代码记录用户的连接信息以及线程安全问题客户端异常退出业务 登录状态 登录且状态变为online 业务层代码 #include "chatservice.hpp" #include "public.hpp" #include <string> #include <muduo/base/Loggi…

目录

  • 登录状态
  • 业务层代码
  • 数据模型层代码
  • 记录用户的连接信息以及线程安全问题
  • 客户端异常退出业务

登录状态

在这里插入图片描述
在这里插入图片描述
登录且状态变为online
在这里插入图片描述

业务层代码

#include "chatservice.hpp"
#include "public.hpp"
#include <string>
#include <muduo/base/Logging.h>
#include <muduo/net/TcpServer.h>
#include <muduo/net/EventLoop.h>
using namespace muduo;
using namespace std;//获取单例对象的接口函数
ChatService* ChatService::instance()
{static ChatService service;return &service;
}//注册消息以及对应的Handler回调操作
ChatService::ChatService()
{//要想实现回调就需要先进行注册,通过绑定对象_msgHandlerMap.insert({LOGIN_MSG,std::bind(&ChatService::login,this,_1,_2,_3)});_msgHandlerMap.insert({REG_MSG,std::bind(&ChatService::reg,this,_1,_2,_3)});}//获取消息对应的处理器
MsgHandler ChatService::getHandler(int msgid)
{//记录错误日志,msgid没有对应的事件处理回调auto it=_msgHandlerMap.find(msgid);if(it==_msgHandlerMap.end()){//返回一个默认的处理器,空操作return [=](auto a,auto b,auto c){LOG_ERROR<<"msgid:"<<msgid<<"can not find handler!";};}else{return _msgHandlerMap[msgid];}}//处理登录业务
void ChatService::login(const TcpConnectionPtr &conn,json &js,Timestamp)
{int id=js["id"].get<int>();string pwd=js["password"];User user=_userModel.query(id);if(user.getId()==id&&user.getPwd()==pwd){if(user.getState()=="online"){//该用户已经登录,不允许重复登录json response;response["msgid"]=LOGIN_MSG_ACK;response["errno"]=2;response["errmsg"]="该账号已经登录,请重新输入新账号";conn->send(response.dump());}else{//登录成功,更新用户状态信息 state offline=>onlineuser.setState("online");_userModel.updateState(user);json response;response["msgid"]=LOGIN_MSG_ACK;response["errno"]=0;response["id"]=user.getId();response["name"]=user.getName();conn->send(response.dump());}}else{//该用户不存在,登录失败json response;response["msgid"]=LOGIN_MSG_ACK;response["errno"]=1;response["errmsg"]="用户名或者密码错误";conn->send(response.dump());}
}
//处理注册业务
void ChatService::reg(const TcpConnectionPtr &conn,json &js,Timestamp)
{string name=js["name"];string pwd=js["password"];User user;user.setName(name);user.setPwd(pwd);bool state=_userModel.insert(user);if(state){//注册成功json response;response["msgid"]=REG_MSG_ACK;response["errno"]=0;response["id"]=user.getId();conn->send(response.dump());}else{//注册失败json response;response["msgid"]=REG_MSG_ACK;response["errno"]=1;conn->send(response.dump());}
}

数据模型层代码

//更新用户的状态信息
//根据用户号码查询用户信息
bool UserModel::updateState(User user)
{//组装sql语句char sql[1024]={0};sprintf(sql,"update user set state = '%s' where id=%d",user.getState().c_str(),user.getId());MySQL mysql;if(mysql.connect()) {if(mysql.update(sql)){return true;}}}

但是问题就是,一登录成功就断开连接了

记录用户的连接信息以及线程安全问题

所以需要保存连接信息
在这里插入图片描述
在这里插入图片描述

这个表会被多线程访问,所以要考虑它的线程安全问题
上互斥锁!
C++STL里面并没有考虑线程安全问题
数据库的增删改查的并发操作是由MYSQL来保证的,不需要担心去上锁啥的。而线程安全需要保证
大括号表示作用域
在这里插入图片描述

客户端异常退出业务

在没有任何响应的情况下,连接突然断开了。比如网络连接问题
如果异常退出,并没有发送合法的json。用户状态如何?
在这里插入图片描述
这个业务完成两件事,一个是把存储用户通信连接的哈希表删除该用户的键值对2、将用户在数据库里的状态信息由online变成offline。
当出了大括号之后,锁就自动释放
在这里插入图片描述

http://www.ds6.com.cn/news/68728.html

相关文章:

  • wordpress中文免费企业模板下载网站seo搜索引擎优化案例
  • 哪些做网站的公司seo数据
  • 如何架设内部网站网站优化关键词排名公司
  • 网站建设 php怎样建立自己网站
  • 国内做的好的网站上海关键词优化公司哪家好
  • 企业培训师资格证报考2022广东网络优化推广
  • 网站建设与推广的策划方案广东整治互联网霸王条款
  • c2b做的好的网站一手渠道推广平台
  • 跨境电商网站建设收录查询api
  • 西宁建设局官方网站网页设计与制作步骤
  • 阿根廷网站后缀推广普通话手抄报模板可打印
  • 广州网站建设知名乐云seo优化关键词的方法正确的是
  • 网络营销网站规划建设实训作业设计网站一般多少钱
  • doooor设计seo索引擎优化
  • 网站建设 兼职 外包中国最权威的网站排名
  • 网站建设的问题培训计划模板
  • 信息科技有限公司网站建设网站推广的6个方法是什么
  • 界面设计属于什么专业seo课程总结
  • 建设 互动 网站 模式软文推广代理平台
  • 如何查看用wordpress建的站点网页搜索优化
  • 网站内容管理媒体推广
  • 专做特卖的网站seo教程 百度网盘
  • 云主机做网站域名打不开北京seo实战培训班
  • 个人网站设计介绍文字俄罗斯搜索引擎yandex
  • 网站加入悬浮客服网站建设公司seo关键词
  • 网页布局类型及实例网店seo名词解释
  • 西安做视频网站公司免费b站推广网站
  • 成品app想找搜索引擎优化
  • 汕头在线制作网站长沙网站制作公司哪家好
  • jquery做背景的网站赏析整合营销方案