- @[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;// 数据...
上滑加载中
推荐直播
-
华为云码道-玩转OpenClaw,在线养虾2026/03/11 周三 19:00-21:00
刘昱,华为云高级工程师/谈心,华为云技术专家/李海仑,上海圭卓智能科技有限公司CEO
OpenClaw 火爆开发者圈,华为云码道最新推出 Skill ——开发者只需输入一句口令,即可部署一个功能完整的「小龙虾」智能体。直播带你玩转华为云码道,玩转OpenClaw
回顾中 -
华为云码道-AI时代应用开发利器2026/03/18 周三 19:00-20:00
童得力,华为云开发者生态运营总监/姚圣伟,华为云HCDE开发者专家
本次直播由华为专家带你实战应用开发,看华为云码道(CodeArts)代码智能体如何在AI时代让你的创意应用快速落地。更有华为云HCDE开发者专家带你用码道玩转JiuwenClaw,让小艺成为你的AI助理。
回顾中 -
Skill 构建 × 智能创作:基于华为云码道的 AI 内容生产提效方案2026/03/25 周三 19:00-20:00
余伟,华为云软件研发工程师/万邵业(万少),华为云HCDE开发者专家
本次直播带来两大实战:华为云码道 Skill-Creator 手把手搭建专属知识库 Skill;如何用码道提效 OpenClaw 小说文本,打造从大纲到成稿的 AI 原创小说全链路。技术干货 + OPC创作思路,一次讲透!
回顾中
热门标签