服务器开发专栏
文章平均质量分 83
谢白羽
无论东西
展开
-
记录一次curl的使用报错:使用PUT的设置错误
因此,如果您要使用libcurl库发送PUT请求,请使用curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, “PUT”)。①curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, “PUT”)设置libcurl库发送HTTP请求的自定义方法为PUT。②而curl_easy_setopt(curl, CURLOPT_PUT, true)是错误的,因为CURLOPT_PUT选项不是用于设置HTTP请求方法的选项。原创 2023-04-17 16:56:22 · 616 阅读 · 0 评论 -
服务器开发29:Kubernetes (K8S)上手简单实践(2/13)
一、Kubernetes (K8S) 简介二、安装k8s集群三、部署应用到集群中四、Service五、StatefulSet六、数据持久化七、ConfigMap&Secret八、Helm&命名空间九、Ingress十、其他补充原创 2023-02-13 00:33:41 · 285 阅读 · 0 评论 -
服务器开发28:rapidjson充当http服务器与运营中台服务器之间解析json数据的工具,rapidjson接口和坑
一、背景知识1)DOM 与 SAX2)解析json二、使用接口文档1)序列化与反序列化(1)字符串转 json(2)json 转字符串2)数据类型3)字符串4)数组5)对象(1)查找对象(2)COPY对象(3)遍历对象两种方法三、使用示例1)解析一个字符串2)构造一个json并转成字符串3)修改一个已有的json字符串4)读数组5)以Writer构造一个json,然后修改它,最后转成字符串6)以Document构造一个json,然后修改它,最后转成字符串7)以Doc原创 2022-12-21 11:14:41 · 912 阅读 · 0 评论 -
linux后台自定义后台服务service(以filebeat举例)
一、配置攥写1)安装filebeat和配置相关修改2)常用命令二、启动顺序1)命令循序2)systemctl添加自定义系统服务(服务填写指南)3)linux的systemctl命令详解及使用教程三、遇到的坑点和报错1)systemctl服务部署错误:code=exited, status=217/USER2)selinux引起nginx启动失败3)OPENSSL引起nginx启动失败原创 2022-12-19 18:37:39 · 3213 阅读 · 0 评论 -
游戏思考26:游戏服务器压力测试文档(新增linux相关命令,02/10未完待续)
一、压力测试关注点二、计算最耗时的加载操作1)从数据库读取数据,对加载的类型进一步划分各种类型,计算最耗时操作2)查看CPU随着在线人数的变化所占百分比3)查看内存变化4)备注原创 2022-12-03 18:44:29 · 2474 阅读 · 0 评论 -
CMake Cookbook笔记(12/23未完待续,游戏服务器观点阅读,编译器及指令集不涉及)
一、配置环境(略)二、从可执行文件到库1)将单个源码文件编译为可执行文件2)切换生成器(-G)三、检测环境四、检测外部库和程序五、创建和运行测试六、配置时和构建时的操作七、生成源码八、构建项目九、超级构建模式十、语言混合项目十一、编写安装程序十二、打包项目十三、构建文档十四、选择生成器和交叉编译十五、测试面板十六、使用CMake构建已有项目十七、备注原创 2022-11-18 01:52:21 · 1159 阅读 · 0 评论 -
游戏思考25:MMORPG场景服务器作用及说明(后面会增加人物行走双端相关总结,未完待续02/20)
一、总体介绍1)对于场景地图数据的处理相同点2)对于场景地图数据的处理不同点3)补充点4)3D地形数据介绍(区别于2D的相同点和不同点)原创 2022-10-20 17:22:47 · 1471 阅读 · 0 评论 -
服务器开发27:log4c充当服务器跨平台日志库(cmake跨平台编译,配置介绍及代码封装)
一、跨平台编译1)编译准备(1)expat编译2)原生linux编译、安装3)cmake跨平台编译二、log4c配置笔记1)与log4cpp\log4cxx的比较2)log4c的三个基本概念简单介绍(Category, Appender, Layout)3)配置文件示例三、log4c概念详细介绍1)category2)appender3)layout4)rollingpolicy5)配置文件的路径 :6)环境变量四、log4c代码使用案例及简答封装实例1)引用头文件注意点原创 2022-10-18 11:43:44 · 980 阅读 · 0 评论 -
服务器开发26:Linux中线程和进程的联系与区别(游戏后端请和游戏思考10一起食用)
一、线程创建方法(以redis举例)1)创建线程函数讲解2)线程创建的标记二、内核中对线程的数据结构表示1)task_struct具体定义2)线程与进程的区别三、进程、线程创建过程及异同1)进程创建(用到do_fork)2)线程的创建(也是用到do_fork)3)进程线程创建异同(传入do_fork的标记不一样)四、揭秘 do_fork 系统调用1)复制 task_struct 结构体2)拷贝打开文件列表(创建进程就没有传入CLONE_FILES标记,进程不会共用file_struc原创 2022-10-12 10:14:56 · 693 阅读 · 0 评论 -
服务器开发24补充:市面上一些xml第三方库解析速度的对比,tinyxml、tinyxml2、Qt、RapidXml、PugiXml,和tinyxml与tinyxml2的对比
一、Qt - QDomDocument二、TinyXml三、TinyXml2四、RapidXml五、PugiXml原创 2022-10-11 18:17:09 · 2059 阅读 · 0 评论 -
服务器开发25:用libevent充当游戏服务器之间连接(libevent笔记及源码剖析,实际evconnlistenr使用(重要的部分))
一、libevent的介绍1)优点2)利用到的Reactor模式的优点二、基本使用场景和事件流程1)基本应用场景2)实例代码3)事件处理流程三、libevent源文件组织结构1)源码组织结构2)拆分讲解四、libevent的核心:事件event1)libevent核心-event介绍2)libevent 对 event 的管理3)事件设置的接口函数四、事件处理框架1)框架event_base介绍2)创建和初始化event_base3)接口函数(1)注册事件(2)删除事件原创 2022-09-25 16:13:22 · 1127 阅读 · 0 评论 -
服务器开发24:tinyxml使用(服务器起服读取配置信息接口)
xml使用接口:增、删、改、查原创 2022-08-22 20:13:40 · 264 阅读 · 0 评论 -
服务器正文22:linux内核网络模块笔记:理解TCP连接建立过程、一条TCP连接多大内存、一台机器最多支持多少条TCP连接、网络优化建议(下)(8/9未完待续)
1)TCP连接建立过程2)一条TCP连接消耗多大内存3)一台机器最多支持多少跳TCP连接4)网络性能优化建议原创 2022-08-08 18:30:50 · 1250 阅读 · 0 评论 -
服务器正文23:定时器设计与实现(最小堆、跳表、多层时间轮)
定时器实现:1)最小堆;2)红黑树;3)跳表;4)时间轮;5)共享内存升级版记录原创 2022-08-07 01:49:13 · 666 阅读 · 0 评论 -
服务器正文22:linux内核网络模块笔记:收包、发包、内核如何与用户进程协同合作(上)
linux内核模块1)收包2)发包3)网络内核调参优化4)容器网络虚拟化原创 2022-08-02 15:52:23 · 1523 阅读 · 3 评论 -
服务器正文21:不同编译器对预编译的处理(简单介绍msvc和gcc)及常用gcc编译指令、跨平台debug、release不同指令flag选择
编译器对预编译支持的处理原创 2022-07-28 11:08:33 · 1220 阅读 · 0 评论 -
服务器正文20:跨平台(win和linux)用cmake给程序增加汇编代码
代码加入汇编代码接口原创 2022-07-28 00:46:31 · 1830 阅读 · 0 评论 -
服务器正文19:编译protobuf(win和linux编译)
protobuf跨平台编译原创 2022-07-16 20:53:02 · 512 阅读 · 0 评论 -
记录线上bug解决list(未完待续7/4)
bug集锦原创 2022-07-04 10:32:39 · 193 阅读 · 0 评论 -
服务器正文18:UDP可靠传输的理解和思考(读云凤博客有感)
UDP可靠传输的思考原创 2022-06-28 02:02:59 · 386 阅读 · 0 评论 -
服务器正文17:内存映射和共享内存的简单理解
内存映射mmap和共享内存shm原创 2022-06-20 01:30:04 · 1154 阅读 · 0 评论 -
服务器正文16:缓冲区设计(ringbuffer、用libevent配合ringbuffer做无锁队列)
文章目录一、为什么用户层需要设计网络缓冲区二、寿司ringbuffer以及多线程换将下数据安全思考三、libevent中event buffer的设计一、为什么用户层需要设计网络缓冲区二、寿司ringbuffer以及多线程换将下数据安全思考三、libevent中event buffer的设计https://www.bilibili.com/video/BV1ZL411M7Qz?spm_id_from=333.337.search-card.all.click...............原创 2022-06-06 01:14:38 · 882 阅读 · 0 评论 -
服务器正文15:Assert的使用技巧
文章目录一、assert基础二、嵌入信息三、嵌入更多信息四、让其变得更好用五、可增加总是忽略选项六、提供堆栈信息便于调试一、assert基础备注1)断言若为错,程序直接core down2)在release版本中自动隐藏,在debug版本中显示出来二、嵌入信息效果,发生错误会打印prand: /home/lighthouse/core_code/srand_num/assert1.cpp:17: void VectorNormalize(int32_t, int32_t): A原创 2022-05-20 01:21:38 · 233 阅读 · 0 评论 -
补充番外14:cmake实践项目笔记
文章目录一、安装cmake1)卸载旧版本cmake2)文件下载解压:3)查看目录4)创建软链接二、项目1)单个文件目录实现(1)基本工程(2)目录展现(3)代码(4)指令2)改进工程结构(1)基本工程(2)目录展现(3)代码(4)指令3)多个目录实践编译(1)基本工程(2)目录展现(3)代码(4)指令4)(1)基本工程(2)目录展现(3)代码(4)指令5)(1)基本工程(2)目录展现(3)代码(4)指令一、安装cmake1)卸载旧版本cmake apt-get autoremove cmake2)原创 2022-04-21 02:01:31 · 1217 阅读 · 0 评论 -
补充番外14:cmake笔记
零、cmake的构建步骤步骤1)第一步是cmake -B build,成为配置阶段(configure),这时候只检测环境并生成构建规则,会在build目录下生成本地构建系统能识别的项目文件(Makefile或是.sln)1)这个阶段可以通过-D设置缓存变量。第二次配置时,之前的-D添加任然会被保留2)第二步是cmake --build build ,成为构建阶段(build),这时候才实际调用编译器来编译代码1)cmake -B build -DCMAKE_INSTALL_PREFIX=原创 2022-04-08 01:03:24 · 4467 阅读 · 0 评论 -
Protobuf反射(未完待续3/01)
文章目录零、文章背景一、反射的背景知识(反射消息来修改消息的某些字段)二、反射消息来传输数据需要注意的点1)长度2)类型三、过程(反射消息来传输数据的详细过程)1)根据type name自动创建Message的关键代码2)代码示例3)createMessage()返回的是动态创建的对象的指针,调用方有责任释放它,不然就会使内存泄漏。四、API介绍1)std::string Descriptor::DebugString(); // 将message转化成人可以识别出的string信息零、文章背景有些后台原创 2022-03-01 01:39:57 · 501 阅读 · 0 评论 -
补充番外4:创建Koroutine协程仓库并提交代码,vscode关联远方仓库
文章目录一、配置github上的SSH二、创建仓库最近开始仿照ntyco写协程项目,需要新建仓库一、配置github上的SSH1.命令ssh-keygen -t rsa -C 邮箱地址例如: ssh-keygen -t rsa -C youremail@163.com本命令提示输入信息,回车即可2.命令ssh -v git@github.com3.命令ssh-agent -s4.命令eval ssh-agent -s5.命令ssh-add ~/.ssh/id_rsa6.原创 2021-12-15 15:27:53 · 940 阅读 · 0 评论 -
正文十二:rpc的原理和应用(未完待续,12/20,以brpc为举例)
文章目录一、RPC原理1)常见RPC框架2)完整RPC框架3)流程4)RPC核心功能框架5)RPC 核心之功能实现(1)服务寻址(2)序列化和反序列化(3)RPC 核心之网络传输协议6)REST和RPC的区别二、RPC核心要素三、BRPC应用RPC:remote procedure call远程系统调用一、RPC原理1)常见RPC框架2)完整RPC框架3)流程(1)服务器注册业务(2)客户端在对应服务器探测业务(3)负载均衡处理客户端和服务器的处理4)RPC核心功能框架原创 2021-11-15 01:25:42 · 1095 阅读 · 0 评论 -
正文11(补充):测试zlib库的使用及用cmake静态编译
文章目录一:zlib简介:二:linux编译:三、linux测试代码4.vs传递命令行参数5.windows测试zlib代码一:zlib简介:zlib是提供数据压缩用的函式库,由Jean-loup Gailly与Mark Adler所开发。二:linux编译:sudo tar -zxvf zlib-1.2.11.tar.gz -C .sudo chown -R aston zlib-1.2.11mkdir install_libsudo ./configure --prefix=/home/a原创 2021-10-21 00:38:31 · 3684 阅读 · 0 评论 -
正文10:线程安全的try-catch组件了解及实现(10/12,未完待续)
文章目录1.finally是不管try和catch是否执行,finally都执行2.跳转goto :函数内部跳转,函数的栈里面setjmp:设置标签位,提供来用的,第一次设置setjmp返回是0longjmp:长跳,函数跳转,但是代码阅读性不好3.setjmp/longjmp的代码示例(线程安全的函数)#include <setjmp.h>#include <stdio.h>jmp_buf env;int count = 0;void sub_func原创 2021-10-12 01:41:35 · 257 阅读 · 0 评论 -
正文9:共享内存区和posix共享内存介绍(10/9)
文章目录1.posix共享内存和System V共享内存的区别2.共享内存区1)mmap\munmap和msync函数mmap函数2)在内存映射文件中给计数器持续加13)4.4BSD匿名内存映射4)SVR4 /dev/zero内存映射5)访问内存映射的对象6)小结3.Posix共享内存区1)shm_open和shm_unlink函数2)ftruncate和fstat函数3)简单的程序4)给一个共享的计数器持续加15)向一个服务器发送消息6)小结1.posix共享内存和System V共享内存的区别S原创 2021-10-09 20:18:36 · 287 阅读 · 0 评论 -
正文8:Http协议、Restful、异步http请求简单了解(未完善http相关信息,但是异步请求代码已经完成10/07)
文章目录1.http知识(待补充)2.异步怎么设计?异步设计步骤(适用dns\http\redis\mysql等)1)初始化异步操作的上下文(上下文就是环境)a.创建线程b.epoll_createc.代码2)异步上下文的销毁a.pthread_cancelb.closec.代码3)commit提交请求a.准备socketb.connectc.protocald.sende.epoll_ctl(add , epollfd)把准备的io加入epoll里面4)callback回调函数a.epoll_wait()原创 2021-10-08 02:02:36 · 201 阅读 · 0 评论 -
正文7:内存池的分类、原理与优点及怎么手撕内存池(代码放github,未完待续10/4)
文章目录1.内存池分类伙伴slab老王仿nginx代码实战代码2.内存池原理及特点3.内存池代码讲解4.代码传送门1.内存池分类伙伴slab老王#include <iostream>class A{public: static void* operator new(size_t size); static void operator delete(void* phead); static int原创 2021-09-30 19:44:50 · 527 阅读 · 0 评论 -
番外篇17:柔性数组理解及当做不定长协议讲解(附libevent跨平台实现的不定长数组代码)
文章目录1.需求2.使用条件3.怎么使用?(代码)4.可能遇到的问题1.需求在日常的编程中,有时候需要在结构体中存放一个长度动态的字符串,一般的做法,是在结构体中定义一个指针成员,这个指针成员指向该字符串所在的动态内存空间但是:针对以上问题 可以有一个更优的解决方案即,在结构体的尾部放置一个0长度的数组是一个绝妙的解决方案,我们既能直接引用该字符串,又不占用结构体的空间。不过,C/C++标准规定不能定义长度为0的数组,因此,有些编译器就把0长度的数组成员作为自己的非标准扩展。 typedef s原创 2021-09-16 10:52:08 · 249 阅读 · 0 评论 -
番外篇15:libevent简单理解(附libevent官方代码解析,和跨平台服务器、客户端链接代码)
文章目录一、事件event和事件管理器event_base介绍二、libevent流程简介(注册->检测->分派)三、libevent的好处四、代码比较4.1 原来reactor代码4.2 libevent封装reactor的代码4.2.1 单reactor的封装4.2.2 memcached 多reactor的封装(多个网络线程中处理)五、异步请求池的实现libevent就是对reactor模式简单的封装,用了libevent就不需要关注平台特性,无论是linux、window还是mac平原创 2021-08-08 19:10:39 · 941 阅读 · 0 评论 -
番外14:make和cmake了解及小项目实现
文章目录一、makefile0.make零散知识补充1.第一个makefile2.第二个makefile3.第三个makefile4.第四个makefile5.第五个makefile一、makefile0.make零散知识补充原因:因为以前是只用过makefile所以,复习下,顺便总结cmake怎么写1)makefile三个要素:依赖、目标、命令2)对于make ⼯具,⼀个⽂件是否改动不是看⽂件⼤⼩,⽽是其时间戳3)在现实中也难免存在所定义的⽬标与所存在的⽂件是同名的,可以用.PHO原创 2021-07-30 20:37:14 · 235 阅读 · 0 评论 -
正文6:System V共享内存(修正版)及ftok函数讲解
文章目录1.共享内存的通信原理2.为什么共享内存速度最快3.共享内存的接口函数和指令4.模拟共享内存1.共享内存的通信原理1)定义:允许两个不相关的进程访问同一个逻辑内存,共享内存是两个正在运行的进程之间共享和传递数据的一种非常有效的方式。2)原理:不同进程之间共享的内存通常为同一段物理内存。进程可以将同一段物理内存连接到他们自己的地址空间中,所有的进程都可以访问共享内存中的地址。如果某个进程向共享内存写入数据,所做的改动将立即影响到可以访问同一段共享内存的任何其他进程。3)特别提醒:共享内存并未原创 2021-07-24 11:35:36 · 535 阅读 · 0 评论 -
正文5:tcp支持浏览器websocket协议的过程了解(7/22未完待续)
文章目录recv出来的buffer存储着http、websocket的协议,对协议的解析1.websocket协议主要是用来浏览器和服务器做一个长连接,例如csdn的微信登录:1.扫码,信息就传到微信的服务器2.微信服务器就传信息到csdn服务器3.csdn的服务器主动发送数据到网页前端,csdn主动发信息到网页前端,这一步就是websocekt做的,之前都是http请求(服务器主动发送数据给浏览器或前端的时候,可以选择websocket)2.websocket适用场景:1.网页聊天原创 2021-07-22 12:16:11 · 279 阅读 · 1 评论 -
正文4:CAS无锁队列简单了解
文章目录1.为什么需要无锁队列?1)锁引起的问题:2)在同步机制上的争抢队列3)动态内存分配问题2.yqueue的实现(无锁队列基础:单写单读)1)原子指针操作的一个类2)无锁队列相关接口3)数据结构逻辑4)无锁队列的函数(构造/析构函数等):1)构造函数2)front、back函数3)push函数4)pop函数5)总结1.为什么需要无锁队列?1)锁引起的问题:1)Cache损坏(Cache trashing) //同一线程在不同CPU运行,就会有CPU的Cache失效在保存和恢复上下⽂的原创 2021-07-15 01:13:02 · 789 阅读 · 0 评论 -
番外13:通过nginx惊群加深对互斥锁、自旋锁、读写锁、原子操作的理解
文章目录1.整体思维导图1)锁的分类介绍2)锁的使用场景3)锁的粒度4)单例类的原子操作5)死锁问题的解决2.代码1.整体思维导图1)锁的分类介绍思维导图有介绍补充读写锁:一般用在发生缓存雪崩时,访问mysql数据库只有一个拿到读写锁的才能去写2)锁的使用场景思维导图有介绍3)锁的粒度原子操作最小,自旋锁次之,互斥锁最大4)单例类的原子操作创建一个实例后,交换之前创建的实例就行(CAS: compare and swap)5)死锁问题的解决实例化为判断有向图的回路原创 2021-07-14 11:58:58 · 237 阅读 · 0 评论