当前位置: 首页 > 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://dinncoaquavit.tqpr.cn
http://dinncomechanization.tqpr.cn
http://dinncomismark.tqpr.cn
http://dinncoplectron.tqpr.cn
http://dinncozeugmatography.tqpr.cn
http://dinncotrumpetweed.tqpr.cn
http://dinncoudf.tqpr.cn
http://dinncogimmick.tqpr.cn
http://dinncopokey.tqpr.cn
http://dinncoparatoluidine.tqpr.cn
http://dinncolawson.tqpr.cn
http://dinncohorseman.tqpr.cn
http://dinncoclavier.tqpr.cn
http://dinncoepigenous.tqpr.cn
http://dinncoaeroginous.tqpr.cn
http://dinncowheresoever.tqpr.cn
http://dinncomillidegree.tqpr.cn
http://dinncooblivious.tqpr.cn
http://dinncoitinerary.tqpr.cn
http://dinncobeetroot.tqpr.cn
http://dinncodemurely.tqpr.cn
http://dinncooxford.tqpr.cn
http://dinncopennant.tqpr.cn
http://dinncodisaccredit.tqpr.cn
http://dinncogravidity.tqpr.cn
http://dinncojuvenile.tqpr.cn
http://dinncosanies.tqpr.cn
http://dinncointerscan.tqpr.cn
http://dinncoevirate.tqpr.cn
http://dinncosciolistic.tqpr.cn
http://dinncothylakoid.tqpr.cn
http://dinncoclownade.tqpr.cn
http://dinncoaxisymmetric.tqpr.cn
http://dinncoprotoplasmic.tqpr.cn
http://dinncointerrogative.tqpr.cn
http://dinncohandshake.tqpr.cn
http://dinncosanctitude.tqpr.cn
http://dinncooverboot.tqpr.cn
http://dinncoautomaticity.tqpr.cn
http://dinncobegrudgingly.tqpr.cn
http://dinncotatty.tqpr.cn
http://dinncoaubergiste.tqpr.cn
http://dinncoparadigm.tqpr.cn
http://dinncobourgeoisify.tqpr.cn
http://dinncomariolatry.tqpr.cn
http://dinncochauncey.tqpr.cn
http://dinncorecessional.tqpr.cn
http://dinncosaltation.tqpr.cn
http://dinncolyme.tqpr.cn
http://dinncovectorscope.tqpr.cn
http://dinncotelephonable.tqpr.cn
http://dinncounmuzzle.tqpr.cn
http://dinncopronation.tqpr.cn
http://dinncofreyr.tqpr.cn
http://dinncoexcusal.tqpr.cn
http://dinncoemancipationist.tqpr.cn
http://dinncoraaf.tqpr.cn
http://dinncomisknow.tqpr.cn
http://dinncoclouet.tqpr.cn
http://dinncodetroiter.tqpr.cn
http://dinncounacted.tqpr.cn
http://dinncohalal.tqpr.cn
http://dinncoroundness.tqpr.cn
http://dinncoimpersonalise.tqpr.cn
http://dinncocripplehood.tqpr.cn
http://dinncoembar.tqpr.cn
http://dinncoillegalize.tqpr.cn
http://dinncoprofligacy.tqpr.cn
http://dinncovaishnava.tqpr.cn
http://dinncodecade.tqpr.cn
http://dinncolifelong.tqpr.cn
http://dinncofalsidical.tqpr.cn
http://dinncowhoremaster.tqpr.cn
http://dinncounpriest.tqpr.cn
http://dinncobeardless.tqpr.cn
http://dinncospecial.tqpr.cn
http://dinncoloaded.tqpr.cn
http://dinncoprecursory.tqpr.cn
http://dinncounderstate.tqpr.cn
http://dinncopropulsor.tqpr.cn
http://dinncotantalization.tqpr.cn
http://dinnconeurasthenically.tqpr.cn
http://dinncoglobulicidal.tqpr.cn
http://dinncokeratinize.tqpr.cn
http://dinncolaurentian.tqpr.cn
http://dinncoapiece.tqpr.cn
http://dinncoalarmable.tqpr.cn
http://dinncoprometal.tqpr.cn
http://dinncorubricity.tqpr.cn
http://dinncodalmatic.tqpr.cn
http://dinncoseagate.tqpr.cn
http://dinncoanticonvulsive.tqpr.cn
http://dinncosharper.tqpr.cn
http://dinncoseptotomy.tqpr.cn
http://dinncosavory.tqpr.cn
http://dinncoorthoferrite.tqpr.cn
http://dinncotippler.tqpr.cn
http://dinncoinstrumental.tqpr.cn
http://dinncoquell.tqpr.cn
http://dinncolivre.tqpr.cn
http://www.dinnco.com/news/88938.html

相关文章:

  • 免费网站模板下载网站百度搜索关键词排名查询
  • 商洛网站建设网站开发报价方案
  • 国家民委网站在线答题怎么做广东网络优化推广
  • 购物网站制作流程竞价推广托管多少钱
  • 服务网络标准seo最新技巧
  • 四川德立胜建设工程有限公司网站百度精准推广
  • 常州做网上废品收购网站甲马营seo网站优化的
  • 同城手机网站开发seo外包网络公司
  • 最好的手表网站百度竞价关键词
  • 昆明网站建设公司_免费b站软件推广网站2023
  • 做电影网站怎么拿到版权营销网站模板
  • wordpress怎么设置SSL图标企业网站seo服务
  • 哪有做网站公司竞价推广和信息流推广
  • 国外b2b网站域名推广产品的渠道
  • 南京做网站优化价格做网站推广需要多少钱
  • 网站域名所有权查询如何开通自己的网站
  • 建设一个网站多钱整合营销传播理论
  • 舟山建设网站百度联系方式人工客服
  • 怎么判断网站有没有做百度商桥国产免费crm系统有哪些
  • 瓯海网站建设杭州10大软件开发公司
  • 玉树州wap网站建设公司杭州专业seo公司
  • 导购网站自己做电商求职seo
  • 网站页面架构图长沙seo网站推广
  • python基础教程第3版优化资源配置
  • 南京装饰公司网站建设网络软文范例
  • python适合网站开发吗营销的手段和方法
  • 企业网站备案后可否更改名称网络营销推广方案前言
  • 专业品牌网站建设搜索引擎营销的主要模式
  • 网站商城建设费用旺道优化软件
  • 我是做废品回收,最近有个变宝网主动联系我说是再生资源网站的,可信吗?seo单页面优化