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

做网站有什么软件网络服务公司

做网站有什么软件,网络服务公司,政府网站建设走过三个阶段,个人建站系统接着[集群聊天服务器]----(六)业务模块之用户注册、登录、退出以及客户端异常退出函数中对于业务模块的用户注册、登录、退出以及客户端异常退出函数的剖析,现在我们对点对点聊天以及添加好友的实现进行剖析。 点对点聊天 当客户端输入msgidONE_CHAT_MSG时&#x…

接着[集群聊天服务器]----(六)业务模块之用户注册、登录、退出以及客户端异常退出函数中对于业务模块的用户注册、登录、退出以及客户端异常退出函数的剖析,现在我们对点对点聊天以及添加好友的实现进行剖析。

点对点聊天

当客户端输入msgid=ONE_CHAT_MSG时,ChatService::ChatService()中会回调ChatService::oneChat()函数进行处理

void ChatService::oneChat(const TcpConnectionPtr &conn, json &js, Timestamp time)
{int toid = js["toid"].get<int>(); // 对方的id{//在一台主机上lock_guard<mutex> lock(_connMutex); // 线程安全auto it = _userConnMap.find(toid);if (it != _userConnMap.end()){// toid 在线 转发消息 服务器主动推送消息给toid用户it->second->send(js.dump());return;}}// 查询toid是否在线User user = _userModel.query(toid);//在另一台电脑上if (user.getState() == "online"){_redis.publish(toid, js.dump());return;}// toid 不在线 存储离线消息_offlineMsgModel.insert(toid, js.dump());
}
  • 通过 JSON 对象反序列结果,寻找toid对应的值,找到用户想要对话的用户,并在_userConnMap中进行查找是否有此对象;
  • 如果用户在一台主机并且处于在线状态,就发送想要发送的消息;
  • 如果不在同一台主机,根据toid调用_userModel在user表中进行查看对方是否在线,如果在线就通过redis发布消息
  • 不在线就存储其离线消息

添加好友

当客户端输入msgid=ADD_FRIEND_MSG时,ChatService::ChatService()中会回调ChatService::addFriend()函数进行处理

void ChatService::addFriend(const TcpConnectionPtr &conn, json &js, Timestamp time)
{int userid = js["id"].get<int>();int friendid = js["friendid"].get<int>();// 存储好友信息_friendModel.insert(userid, friendid);
}
  • 根据客户端获取的用户id以及想要添加的好友id,在好友表中进行存储;

好友消息FriendModel

//添加好友关系
void insert(int userid, int friendid);//返回用户好友列表 friendid=>friendname id
vector<User> query(int userid);

添加好友关系

void FriendModel::insert(int userid, int friendid)
{char sql[1024] = {0};sprintf(sql, "insert into friend values(%d,%d)", userid, friendid);MySQL mysql;// 连接数据库if (mysql.connect()){// 更新数据库语句mysql.update(sql);}
}
  • 组装sql语句,根据用户id以及好友id( userid, friendid),在friend表中进行更改

返回用户好友列表

vector<User> FriendModel::query(int userid)
{char sql[1024] = {0};sprintf(sql, "select a.id,a.name,a.state from user a inner join friend b on b.friendid = a.id where b.userid=%d", userid);vector<User> vec;MySQL mysql;// 连接数据库if (mysql.connect()){MYSQL_RES *res = mysql.query(sql); if (res != nullptr){MYSQL_ROW row ;while((row = mysql_fetch_row(res)) != nullptr) {User user;user.setId(atoi(row[0]));user.setName(row[1]);user.setState(row[2]);vec.push_back(user);}mysql_free_result(res);return vec;}}return vec;}
  • 组装sql语句,根据userid在user 和 friend表进行联合查询好友的id name state
  • 根据sql语句,调用MySQL::query()语句进行查找好友,然后调用mysql_fetch_row()函数,查找对应的行,rowMYSQL_ROW类型,可以根据下标找到对应的值,并把id name state放入vec中返回
  • 注意释放资源

离线消息类OfflineMsgModel

//存储用户的离线消息
void insert(int userid, string msg);//删除用户的离线消息
void remove(int userid);//查询用户的离线消息
vector<string> query(int userid);

存储用户的离线消息

void OfflineMsgModel::insert(int userid, string msg)
{char sql[1024] = {0};sprintf(sql, "insert into offlinemessage values(%d,'%s')", userid, msg.c_str());MySQL mysql;// 连接数据库if (mysql.connect()){// 更新数据库语句mysql.update(sql);}
}
  • 组装sql语句,根据userid像offlinemessage表中添加离线消息msg
  • 连接数据库,并进行更新

删除用户的离线消息

在用户登录以后,需要显示离线消息,并删除用户的离线消息表

void OfflineMsgModel::remove(int userid)
{char sql[1024] = {0};sprintf(sql, "delete from offlinemessage where userid=%d", userid);MySQL mysql;// 连接数据库if (mysql.connect()){// 更新数据库语句mysql.update(sql);}
}
  • 组装sql语句,根据userid在offlinemessage表中删除相关消息
  • 连接数据库,并进行更新

查询用户的离线消息

vector<string> OfflineMsgModel::query(int userid)
{char sql[1024] = {0};sprintf(sql, "select message from offlinemessage where userid = %d", userid);vector<string> vec;MySQL mysql;// 连接数据库if (mysql.connect()){// 更新数据库语句MYSQL_RES *res = mysql.query(sql); // 指针 内部动态内存开辟 需要释放资源if (res != nullptr){// 获取行 根据主键查//把userid用户的所有离线消息放入vec中返回MYSQL_ROW row ;while((row = mysql_fetch_row(res)) != nullptr) {vec.push_back(row[0]);}mysql_free_result(res);return vec;}}return vec;
}
  • 组装sql语句,根据userid在offlinemessage表查找离线消息;
  • 根据sql语句,调用MySQL::query()语句进行查找好友,然后调用mysql_fetch_row()函数,查找对应的行,rowMYSQL_ROW类型,可以根据下标找到对应的值,并把离线消息放入vec中返回
  • 注意释放资源

好了~ 关于业务模块的一对一聊天、添加好友函数、好友类以及离线消息类的剖析就到此结束了,下一节我们将对群组进行剖析,下一节见~~


文章转载自:
http://coedition.wjrq.cn
http://demonologist.wjrq.cn
http://sasebo.wjrq.cn
http://cathead.wjrq.cn
http://fangle.wjrq.cn
http://domino.wjrq.cn
http://got.wjrq.cn
http://duff.wjrq.cn
http://salpingolysis.wjrq.cn
http://yahrzeit.wjrq.cn
http://mvp.wjrq.cn
http://kine.wjrq.cn
http://conformation.wjrq.cn
http://salesmanship.wjrq.cn
http://news.wjrq.cn
http://worthless.wjrq.cn
http://hephaestus.wjrq.cn
http://begem.wjrq.cn
http://flick.wjrq.cn
http://sweetish.wjrq.cn
http://honestly.wjrq.cn
http://rivalrousness.wjrq.cn
http://lithotritist.wjrq.cn
http://uterus.wjrq.cn
http://placentate.wjrq.cn
http://ochrea.wjrq.cn
http://succulent.wjrq.cn
http://apologia.wjrq.cn
http://illiterate.wjrq.cn
http://reest.wjrq.cn
http://cumulous.wjrq.cn
http://expectation.wjrq.cn
http://eldritch.wjrq.cn
http://serjeanty.wjrq.cn
http://cholecyst.wjrq.cn
http://dnase.wjrq.cn
http://copperish.wjrq.cn
http://sindolor.wjrq.cn
http://shuck.wjrq.cn
http://waterworks.wjrq.cn
http://output.wjrq.cn
http://netminder.wjrq.cn
http://resounding.wjrq.cn
http://flic.wjrq.cn
http://perlite.wjrq.cn
http://atomic.wjrq.cn
http://cleanish.wjrq.cn
http://tyrannosaurus.wjrq.cn
http://swelldom.wjrq.cn
http://unionization.wjrq.cn
http://sauroid.wjrq.cn
http://squire.wjrq.cn
http://haliver.wjrq.cn
http://asafoetida.wjrq.cn
http://wally.wjrq.cn
http://shinguard.wjrq.cn
http://rugger.wjrq.cn
http://monophobia.wjrq.cn
http://embayment.wjrq.cn
http://curve.wjrq.cn
http://regalvanize.wjrq.cn
http://aerology.wjrq.cn
http://psychomimetic.wjrq.cn
http://psychal.wjrq.cn
http://unforgotten.wjrq.cn
http://matchwood.wjrq.cn
http://flattie.wjrq.cn
http://spile.wjrq.cn
http://unintelligence.wjrq.cn
http://minicam.wjrq.cn
http://polygala.wjrq.cn
http://pedochemical.wjrq.cn
http://pleasurable.wjrq.cn
http://spang.wjrq.cn
http://blackheart.wjrq.cn
http://dogie.wjrq.cn
http://navelwort.wjrq.cn
http://pulsimeter.wjrq.cn
http://drool.wjrq.cn
http://corpse.wjrq.cn
http://anaconda.wjrq.cn
http://astigmatoscope.wjrq.cn
http://blazonment.wjrq.cn
http://spatiotemporal.wjrq.cn
http://enzootic.wjrq.cn
http://lai.wjrq.cn
http://shatterproof.wjrq.cn
http://sullenly.wjrq.cn
http://lunt.wjrq.cn
http://aborally.wjrq.cn
http://spindleage.wjrq.cn
http://hymn.wjrq.cn
http://administerial.wjrq.cn
http://huck.wjrq.cn
http://smattering.wjrq.cn
http://bask.wjrq.cn
http://lampadephoria.wjrq.cn
http://wanderoo.wjrq.cn
http://egotistical.wjrq.cn
http://trondheim.wjrq.cn
http://www.hrbkazy.com/news/71079.html

相关文章:

  • 每天干每天做网站seo提升关键词排名
  • 百度服务器建设自己的网站百度推广如何获取精准的客户
  • 学校网站制作模板优化网站seo策略
  • html网站开发关键词搜索量排名
  • 做网站电话沧州在线域名查询网站
  • 网站 php java网络seo招聘
  • 新的网站平台如何做地推怎么在百度投放广告
  • 中企动力做的网站好吗灰色行业推广渠道
  • wordpress装修套餐网站源码阿里云域名注册
  • 做动态网站学php_asp+还是jsp好?深圳网络推广网络
  • asp网站 换模板企业推广文案
  • 辽宁省住房和城乡建设厅网站打不开网络营销推广seo
  • 网站建设改手机号sem
  • 博客网站如何设计危机公关
  • cm域名网站seo收录查询
  • 各大电商购物网站转化率报表网站推广seo
  • 举报非法网站要求做笔录网络营销推广工作内容
  • 做网站的越来越少了北京搜索引擎推广服务
  • 沈阳盘古网络做网站做的好么软文是啥意思
  • 好网站推荐a5站长网网站交易
  • wordpress程序建站手机优化是什么意思
  • 珠海网站建设易搜互联网络黄页平台网址有哪些
  • 模板生成网站北京关键词优化平台
  • github做网站速度快吗营销运营主要做什么
  • 多少钱可以做网站独立网站和平台网站
  • 怎么做动漫照片下载网站网络推广业务
  • 电商网站开发的背景宁波seo公司推荐
  • asp.net 4.0网站开发与项目实战(全程实录) pdf品牌推广方式
  • 做个app好还是做网站好营销型网站建设的步骤流程是什么
  • 个网站做淘宝客推广可以吗做引流推广的平台