- @[toc] 简介在前面C++集群的项目里面大量应用到了绑定器来做解耦操作,那么,绑定器到底是什么呢?有什么玄妙的地方嘞?其实也不是很玄乎,以前写Qt的时候就经常用到绑定,昨天又发现,其实我们一直在用绑定器却不自知,比如说创建线程,将函数指针与它的参数一并传入。 std::function在这一篇博客里(C++搭建集群聊天室(八):网络层代码与业务层代码(登录注册)解耦),我写过这样的代码:... @[toc] 简介在前面C++集群的项目里面大量应用到了绑定器来做解耦操作,那么,绑定器到底是什么呢?有什么玄妙的地方嘞?其实也不是很玄乎,以前写Qt的时候就经常用到绑定,昨天又发现,其实我们一直在用绑定器却不自知,比如说创建线程,将函数指针与它的参数一并传入。 std::function在这一篇博客里(C++搭建集群聊天室(八):网络层代码与业务层代码(登录注册)解耦),我写过这样的代码:...
- @[toc]曾经有个人,问我对无锁队列的实现是怎么想的。我想了一会儿,还是纳闷儿,无锁,也能做消息队列吗?然后他让我回去好好查查。没错,他就是面试官。 atomic在有些场景里面,是需要对一些资源进行锁定的。但是有些资源实在是太小了,锁定的粒度也太小了,不免显得上锁解锁倒成了繁琐。比方说:_mlock.lock();count++;_mlock.unlock();CAS,是基于硬件层面的无锁... @[toc]曾经有个人,问我对无锁队列的实现是怎么想的。我想了一会儿,还是纳闷儿,无锁,也能做消息队列吗?然后他让我回去好好查查。没错,他就是面试官。 atomic在有些场景里面,是需要对一些资源进行锁定的。但是有些资源实在是太小了,锁定的粒度也太小了,不免显得上锁解锁倒成了繁琐。比方说:_mlock.lock();count++;_mlock.unlock();CAS,是基于硬件层面的无锁...
- 天天说,new一个对象,但是有想过要如何写出更高效的对象操作代码吗?动手试过吗?这里是一个用来示例的类,代码很简单,稍微瞟一眼就好:#include<iostream>using namespace std;class test {public: test(int a = 10) :ma(a) { cout << "test()" << endl; } ~test() { cout << "... 天天说,new一个对象,但是有想过要如何写出更高效的对象操作代码吗?动手试过吗?这里是一个用来示例的类,代码很简单,稍微瞟一眼就好:#include<iostream>using namespace std;class test {public: test(int a = 10) :ma(a) { cout << "test()" << endl; } ~test() { cout << "...
- Linux、C/C++、面试、刷题、算法尽管咨询我,关注我,有问题私聊! Linux、C/C++、面试、刷题、算法尽管咨询我,关注我,有问题私聊!
- CSDN博客专家🏆,C/C++、面试、刷题、算法尽管咨询我,关注我,有问题私聊! CSDN博客专家🏆,C/C++、面试、刷题、算法尽管咨询我,关注我,有问题私聊!
- @[toc] 环境配置与基本知识C++搭建集群聊天室(十七):ngnix简介及tcp负载均衡配置Redis环境搭建与配置hiredis从安装到实操,一条龙服务redis事务处理机制,但当涉猎了解更多 redis 相关知识:我的redis专栏上面该看的看完了,咱往下可就直接上码啦!!!这次的改动会有有点大。 redis.hpp愿意放哪儿放哪儿,我觉着吧,怎么说redis也是个数据库,就放 db... @[toc] 环境配置与基本知识C++搭建集群聊天室(十七):ngnix简介及tcp负载均衡配置Redis环境搭建与配置hiredis从安装到实操,一条龙服务redis事务处理机制,但当涉猎了解更多 redis 相关知识:我的redis专栏上面该看的看完了,咱往下可就直接上码啦!!!这次的改动会有有点大。 redis.hpp愿意放哪儿放哪儿,我觉着吧,怎么说redis也是个数据库,就放 db...
- @[toc] nginx简介单台服务器受限于硬件资源,其性能是有上限的,当单台服务器不能满足应用场景的并发需求量时,就需要考虑部署多个服务器共同处理客户端的并发请求,此时就需要一台负载均衡器,通过预设的负载算法,指导客户端连接服务器。从1.9版本开始以后,nginx开始支持tcp的长连接负载均衡,但是nginx默认并没有编译tcp负载均衡模块,编写它时,需要加入–with-stream参数来... @[toc] nginx简介单台服务器受限于硬件资源,其性能是有上限的,当单台服务器不能满足应用场景的并发需求量时,就需要考虑部署多个服务器共同处理客户端的并发请求,此时就需要一台负载均衡器,通过预设的负载算法,指导客户端连接服务器。从1.9版本开始以后,nginx开始支持tcp的长连接负载均衡,但是nginx默认并没有编译tcp负载均衡模块,编写它时,需要加入–with-stream参数来...
- 既然客户端都发出来了,总得开始测试一下了,虽然说在整集群,两手抓嘛。测出来一些问题,还有不少问题潜在着。持续更新中@[toc] bug 1:bug:登录、测试皆失败寻病:debug调试病灶:char sql[128] = {0};sprintf("insert into User(name,password,state) values('%s','%s','%s')", use... 既然客户端都发出来了,总得开始测试一下了,虽然说在整集群,两手抓嘛。测出来一些问题,还有不少问题潜在着。持续更新中@[toc] bug 1:bug:登录、测试皆失败寻病:debug调试病灶:char sql[128] = {0};sprintf("insert into User(name,password,state) values('%s','%s','%s')", use...
- 直接塞一个文件里面。 client.cpp#include "json.hpp"#include <iostream>#include <thread>#include <string>#include <vector>#include <chrono>#include <ctime>#include <unordered_map>#include <functional>using nam... 直接塞一个文件里面。 client.cpp#include "json.hpp"#include <iostream>#include <thread>#include <string>#include <vector>#include <chrono>#include <ctime>#include <unordered_map>#include <functional>using nam...
- @[toc] 群聊功能思路1、创建群聊,提交群信息,返回群号2、拉取群人员基本信息,包括昵称、ID。3、群发消息时,如果成员在线则直接推送,成员不在线则存储相应群员的离线消息。 放码过来照例先修改一下 public.hpp 文件。#ifndef PUBLIC_H_#define PUBLIC_H_enum EnMsgType{ LOGIN_TYPE = 1, //正常登录 LOG... @[toc] 群聊功能思路1、创建群聊,提交群信息,返回群号2、拉取群人员基本信息,包括昵称、ID。3、群发消息时,如果成员在线则直接推送,成员不在线则存储相应群员的离线消息。 放码过来照例先修改一下 public.hpp 文件。#ifndef PUBLIC_H_#define PUBLIC_H_enum EnMsgType{ LOGIN_TYPE = 1, //正常登录 LOG...
- 添加好友又是一个新模块,好友功能。所以,照旧,先在public中写上,然后写上一个model类,再绑定一下,并在service中调用即可。最后重新编译,轻车熟路了。 public.hpp#ifndef PUBLIC_H_#define PUBLIC_H_enum EnMsgType{ LOGIN_TYPE = 1, //正常登录 LOGIN_MSG_ACK, //登录相应消息... 添加好友又是一个新模块,好友功能。所以,照旧,先在public中写上,然后写上一个model类,再绑定一下,并在service中调用即可。最后重新编译,轻车熟路了。 public.hpp#ifndef PUBLIC_H_#define PUBLIC_H_enum EnMsgType{ LOGIN_TYPE = 1, //正常登录 LOGIN_MSG_ACK, //登录相应消息...
- 单聊单聊功能其实很简单的,就是数据包的发送,接收。public.h 现状:#ifndef PUBLIC_H_#define PUBLIC_H_enum EnMsgType{ LOGIN_TYPE = 1, //正常登录 LOGIN_MSG_ACK, //登录相应消息 REG_TYPE, //正常注册 REG_MSG_ACK, //注册相应消息 ... 单聊单聊功能其实很简单的,就是数据包的发送,接收。public.h 现状:#ifndef PUBLIC_H_#define PUBLIC_H_enum EnMsgType{ LOGIN_TYPE = 1, //正常登录 LOGIN_MSG_ACK, //登录相应消息 REG_TYPE, //正常注册 REG_MSG_ACK, //注册相应消息 ...
- @[toc] 客户端异常退出此前我们对客户端退出的操作仅仅就是将连接释放掉,但是既然加入了新的业务,受业务影响,客户端的退出就不能是这么简单的处理了。打开 chatserver.cpp ,原先是这样的:void ChatServer::onConnection(const TcpConnectionPtr &conn){ if(!conn->connected()){ //用户断开连接... @[toc] 客户端异常退出此前我们对客户端退出的操作仅仅就是将连接释放掉,但是既然加入了新的业务,受业务影响,客户端的退出就不能是这么简单的处理了。打开 chatserver.cpp ,原先是这样的:void ChatServer::onConnection(const TcpConnectionPtr &conn){ if(!conn->connected()){ //用户断开连接...
- 前面准备了那么多,这里就直接是水到渠成了。该讲的前面都讲的差不多了,剩下还没讲的都在代码里面。不过由于文档Telnet一直是发送不了数据的状态,就一直没法进一步的测试,等后面写了客户端再说。 chatservice.hpp#ifndef CHATSERVICE_H_#define CHATSERVICE_H_#include<muduo/net/TcpConnection.h>#includ... 前面准备了那么多,这里就直接是水到渠成了。该讲的前面都讲的差不多了,剩下还没讲的都在代码里面。不过由于文档Telnet一直是发送不了数据的状态,就一直没法进一步的测试,等后面写了客户端再说。 chatservice.hpp#ifndef CHATSERVICE_H_#define CHATSERVICE_H_#include<muduo/net/TcpConnection.h>#includ...
- 数据库模块 db.hpp首先,在 include/server 目录下新增文件夹 db,用于存放数据库相关文件。在 db 文件夹下新增文件:db.hpp#ifndef DB_H_#define DB_H_#include<string>#include<mysql/mysql.h>#include<muduo/base/Logging.h>using namespace std;// 数据... 数据库模块 db.hpp首先,在 include/server 目录下新增文件夹 db,用于存放数据库相关文件。在 db 文件夹下新增文件:db.hpp#ifndef DB_H_#define DB_H_#include<string>#include<mysql/mysql.h>#include<muduo/base/Logging.h>using namespace std;// 数据...
上滑加载中
推荐直播
-
HDC深度解读系列 - Serverless与MCP融合创新,构建AI应用全新智能中枢2025/08/20 周三 16:30-18:00
张昆鹏 HCDG北京核心组代表
HDC2025期间,华为云展示了Serverless与MCP融合创新的解决方案,本期访谈直播,由华为云开发者专家(HCDE)兼华为云开发者社区组织HCDG北京核心组代表张鹏先生主持,华为云PaaS服务产品部 Serverless总监Ewen为大家深度解读华为云Serverless与MCP如何融合构建AI应用全新智能中枢
回顾中 -
关于RISC-V生态发展的思考2025/09/02 周二 17:00-18:00
中国科学院计算技术研究所副所长包云岗教授
中科院包云岗老师将在本次直播中,探讨处理器生态的关键要素及其联系,分享过去几年推动RISC-V生态建设实践过程中的经验与教训。
回顾中 -
一键搞定华为云万级资源,3步轻松管理企业成本2025/09/09 周二 15:00-16:00
阿言 华为云交易产品经理
本直播重点介绍如何一键续费万级资源,3步轻松管理成本,帮助提升日常管理效率!
回顾中
热门标签