
C/C++
文章平均质量分 64
swartz_lubel
这个作者很懒,什么都没留下…
展开
-
100万并发连接服务器笔记之1M并发连接目标达成
第四个遇到的问题:tcp_mem在服务端,连接达到一定数量,诸如50W时,有些隐藏很深的问题,就不断的抛出来。 通过查看dmesg命令查看,发现大量TCP: too many of orphaned sockets错误,也很正常,下面到了需要调整tcp socket参数的时候了。第一个需要调整的是tcp_rmem,即TCP读取缓冲区,单位为字节,查看默认值cat /proc/s转载 2018-01-25 09:22:23 · 442 阅读 · 0 评论 -
100万并发连接服务器笔记之测试端就绪
重新编写测试端程序测试端程序需要增加绑定本机IP和本地端口的功能,以尽可能的向外发出更多的tcp请求。需要对client1.c重构,增加参数传递。 下面是client2.c的代码12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849转载 2018-01-25 09:20:42 · 324 阅读 · 0 评论 -
推动Windows的限制:句柄
这是我推出Windows 系列的第五篇文章,在这篇文章中 ,我探索了Windows管理的资源的数量和大小上限,例如物理内存,虚拟内存,进程和线程。这是整个推动限制系列的索引。虽然他们可以独立存在,但他们认为你是按顺序阅读的。推动Windows的限制:物理内存推动Windows的限制:虚拟内存推动Windows的限制:分页和非分页池推动Windows的限制:进程和线程推动Windows的限制:句...翻译 2018-01-31 16:56:13 · 2371 阅读 · 0 评论 -
推动Windows的限制:USER和GDI对象 - 第2部分
上次,我介绍了限制以及如何度量两个关键窗口管理器资源USER对象之一的使用情况。这一次,我将介绍其他关键资源,GDI对象。与往常一样,我建议您在此之前阅读以前的帖子,因为与USER和GDI资源相关的一些限制是基于我所介绍的限制。这里是我的另一个推动Windows的限制职位的完整索引:推动Windows的限制:物理内存推动Windows的限制:虚拟内存推动Windows的限制:分页和非分页池推动Wi...翻译 2018-01-31 21:30:14 · 606 阅读 · 0 评论 -
推动Windows的限制:USER和GDI对象 - 第1部分
到目前为止,在“推动Windows系列的极限”中,我主要关注由Windows操作系统内核管理的资源,包括物理和虚拟内存,分页和非分页池,进程,线程和句柄。然而,在本文和下一篇文章中,我将探索Windows窗口管理器USER和GDI对象管理的两个资源,这些资源表示窗口元素(如窗口和菜单)和图形构造(如钢笔,画笔和绘图表面)。就像我在之前的文章中讨论的其他资源一样,耗尽各种USER和GDI资源限制可能...翻译 2018-01-31 21:29:31 · 1453 阅读 · 0 评论 -
推动Windows的限制:进程和线程
这是我推行Windows系列的第四篇文章,探讨Windows基础资源的界限。这一次,我将讨论Windows上支持的最大线程数和进程数限制。我将简要介绍一下线程和进程之间的区别,调查线程限制,然后调查进程限制。我首先介绍了线程的限制,因为每个活动进程至少有一个线程(一个进程已经终止,但由另一个进程所拥有的句柄保持引用将不会有),所以进程的限制直接受上限限制线程。与某些UNIX变体不同,Windows...翻译 2018-01-31 21:28:28 · 1699 阅读 · 0 评论 -
推动Windows的限制:分页和非分页池
在之前的“极限”帖子中,我描述了两个最基本的系统资源,即物理内存和虚拟内存。这一次我将描述两个基本的内核资源,分页池和非分页池,它们是基于这些资源的,并且直接负责包括最大进程数,同步对象和句柄在内的许多其他系统资源限制。这是整个推动限制系列的索引。虽然他们可以独立存在,但他们认为你是按顺序阅读的。推动Windows的限制:物理内存推动Windows的限制:虚拟内存推动Windows的限制:分页和非...翻译 2018-01-31 21:27:47 · 7391 阅读 · 0 评论 -
推动Windows的限制:虚拟内存
在我推出Windows的限制后,我讨论了物理内存限制,包括由许可,实现和驱动程序兼容性施加的限制。这是整个推动限制系列的索引。虽然他们可以独立存在,但他们认为你是按顺序阅读的。推动Windows的限制:物理内存推动Windows的限制:虚拟内存推动Windows的限制:分页和非分页池推动Windows的限制:进程和线程推动Windows的限制:把手推动Windows的限制:USER和GDI对象 -...翻译 2018-01-31 21:27:03 · 2323 阅读 · 0 评论 -
推动Windows的限制:物理内存
这是我将在接下来的几个月中编写的第一篇博客文章,名为“推动Windows的限制”,介绍Windows和应用程序如何使用特定资源,资源的许可和实现派生限制,如何衡量资源用法以及如何诊断泄漏。为了能够有效地管理Windows系统,您需要了解Windows如何管理物理资源(如CPU和内存)以及逻辑资源(如虚拟内存,句柄和窗口管理器对象)。了解这些资源的限制以及如何跟踪其使用情况,可以将资源使用情况归因于...翻译 2018-01-31 21:26:11 · 2353 阅读 · 0 评论 -
C++使用localtime函数需要注意的地方
在处理时间时用到了localtime这个函数,将一个UTC时间转为本地时间:[cpp] view plain copy#include time_t tmNow = time(NULL); tm *ptmNow = localtime(&tmNow); //从tm结构体中可以取到年月日时分秒等值。 这里local转载 2018-01-23 18:29:29 · 1142 阅读 · 0 评论 -
流媒体协议介绍(rtp/rtcp/rtsp/rtmp/mms/hls)
RTP 参考文档 RFC3550/RFC3551 Real-time Transport Protocol)是用于Internet上针对多媒体数据流的一种传输层协议。RTP协议详细说明了在互联网上传递音频和视频的标准数据包格式。RTP协议常用于流媒体系统(配合RTCP协议),视频会议和一键通(Push to Talk)系统(配合H.323或SIP)转载 2017-10-30 18:38:18 · 455 阅读 · 0 评论 -
malloc、calloc、realloc的区别
(1)C语言跟内存分配方式从静态存储区域分配. 内存在程序编译的时候就已经分配好,这块内存在程序的整个运行期间都存在.例如全局变量、static变量.在栈上创建 在执行函数时,函数内局部变量的存储单元都可以在栈上创建,函数执行结束时这些存储单元自动被释放.栈内存分配运算内置于处理器的指令集中,效率很高,但是分配的内存容量有限.从堆上分配,亦称动态转载 2017-10-09 19:14:28 · 240 阅读 · 0 评论 -
C++ 用libcurl库进行http 网络通讯编程
一、LibCurl基本编程框架libcurl是一个跨平台的网络协议库,支持http, https, ftp, gopher, telnet, dict, file, 和ldap 协议。libcurl同样支持HTTPS证书授权,HTTP POST, HTTP PUT, FTP 上传, HTTP基本表单上传,代理,cookies,和用户认证。想要知道更多关于libcurl的介绍,可以到官网ht转载 2017-06-02 16:55:39 · 603 阅读 · 0 评论 -
libevent evhttp学习——http服务端
http服务端相对客户端要简单很多,我们仍旧使用libevent-2.1.5版本,服务端接口和2.0版本没有区别基本流程http服务端使用到的借口函数及流程如下创建event_base和evhttpstruct event_base *event_base_new(void);struct evhttp *evhttp_new(struct event_bas转载 2017-09-21 16:35:04 · 1010 阅读 · 0 评论 -
libevent evhttp学习——http客户端
基本环境使用版本为libevent-2.1.5,目前为beta版,其中evhttp和旧版区别在于新增了如下接口// 设置回调函数,在包头读取完成后回调void evhttp_request_set_header_cb (struct evhttp_request *, int(*cb)(struct evhttp_request *, void *))// 设置回调函数,在bod转载 2017-09-21 15:56:37 · 2384 阅读 · 0 评论 -
tcp keepalive
部分信息可以看UNIX网络编程第157页,摘录过来:在一个正常的TCP连接上,当我们用无限等待的方式调用下面的Recv或Send的时候: ret=recv(s,&buf[idx],nLeft,flags); 或 ret=send(s,&buf[idx],nLeft,flags); 如果TCP连接被对方正常关闭,也就是说,对方是正确地调用了closesocke转载 2017-09-27 22:48:06 · 292 阅读 · 0 评论 -
100万并发连接服务器笔记之处理端口数量受限问题
第二个遇到的问题:端口数量受限一般来说,单独对外提供请求的服务不用考虑端口数量问题,监听某一个端口即可。但是向提供代理服务器,就不得不考虑端口数量受限问题了。当前的1M并发连接测试,也需要在客户端突破6万可用端口的限制。单机端口上限为65536端口为16进制,那么2的16次方值为65536,在linux系统里面,1024以下端口都是超级管理员用户(如root)才可以使用,普转载 2018-01-25 09:24:02 · 786 阅读 · 0 评论 -
C++ 后台程序实时性能监控
面对的问题:做后台程序经常会被问一句话,你的程序能撑多少人。一般官方一点的回答是这个得根据实际情况而定。实际上后台程序的性能是可以被量化的。我们开发的每一个服务器程序,对性能都非常有底,以为我们有数据。So,能撑多少人不少随便猜的,让数据报表来说话。另外一种情况经常发生在开发人员之中,甲乙丙一起讨论接口实现,经常会说这么实现效率太低,那么实现效率才高等。实际上,效率高低都是相对而言转载 2018-01-27 11:27:24 · 2823 阅读 · 0 评论 -
rapidjson
Document document; if (document.Parse(req_buf).HasParseError()){ printf("parse URL Body err,info = %s",req_buf); return ;} const char* szOptType = document["optType"].GetString();if (szOp...原创 2018-03-05 10:28:09 · 286 阅读 · 0 评论 -
tinyxml2
#include <stdio.h>#include "tinyxml2.h"using namespace tinyxml2;int main(){ XMLDocument doc; if(doc.LoadFile("DC.xml")!=0) { printf("load DC.xml err"); return -1; } printf("load ...原创 2018-03-05 10:21:30 · 296 阅读 · 0 评论 -
Linux系统调用Hook姿势总结
相关学习资料http://xiaonieblog.com/?post=121http://hbprotoss.github.io/posts/li-yong-ld_preloadjin-xing-hook.htmlhttp://www.catonmat.net/blog/simple-ld-preload-tutorial/http://os.51cto.com/art/201004/195...转载 2018-02-11 17:12:04 · 3750 阅读 · 0 评论 -
c++ 实现组播协议
#include <stdio.h>#include <stdlib.h>#include <string.h>#include <winsock.h>#pragma comment(lib, "Wsock32.lib")#define close closesocket#define LOCAL_IP "0.0.0.0"ty...原创 2018-02-11 14:21:17 · 6956 阅读 · 1 评论 -
c++ ping 功能实现
#if !defined(COMMON_FDSET_H)#define COMMON_FDSET_H #include <cassert>#include <errno.h>#include <algorithm>#ifdef WIN32//#include <winsock2.h>#include <WS2TCPIP.H&...原创 2018-02-11 11:19:00 · 1120 阅读 · 0 评论 -
windows 获取系统CPU和进程CPU 内存等信息
#ifndef __GETSYSTEM_INFO_H#define __GETSYSTEM_INFO_H#include "psapi.h"#include "tlhelp32.h"typedef struct PROCESS_INFO_T{ int memUsage; //内存使用率 int threadNum; //线程数 int TotalMemSize...原创 2018-01-30 09:57:09 · 1536 阅读 · 0 评论 -
C++ 单例模板
#ifndef _XTHREADDEFINE_H#define _XTHREADDEFINE_Htemplateclass singleton{public: static T* Instance() { return pInstance; } static T* pInstance;private: //构造函数隐藏起来 singleton(){} //将拷贝构原创 2017-08-27 23:31:20 · 626 阅读 · 0 评论 -
std::string::assign 崩溃的问题
最近遇到了一个assign 崩溃的问题, 代码的话 其实就是去assign,莫名其妙就崩溃,是在一个自动化测试的时候发生的,可能手动测试的时候不会发现!猜了一下里面的assign的逻辑,基本是这样的:每次去assign的时候 string内部会去申请内存,然后把数据放进去,第二次的话 会首先将之前的先delete掉,再重新new一遍!那样的话 多线程就有问题了,因为这个东西的话 本身不是线原创 2017-08-21 18:52:33 · 15944 阅读 · 0 评论 -
值得推荐的C/C++框架和库 (真的很强大)
值得学习的C语言开源项目- 1. WebbenchWebbench是一个在linux下使用的非常简单的网站压测工具。它使用fork()模拟多个客户端同时访问我们设定的URL,测试网站在压力下工作的性能,最多可以模拟3万个并发连接去测试网站的负载能力。Webbench使用C语言编写, 代码实在太简洁,源码加起来不到600行。下载链接:http://home.tiscali.c转载 2018-01-27 13:23:26 · 456 阅读 · 0 评论 -
分布式模式之Broker模式
问题来源:创建一个游戏系统,其将运行在互联网的环境中。客户端通过WWW服务或特定的客户端软件连接到游戏服务器,随着流量的增加,系统不断的膨胀,最终后台数据、业务逻辑被分布式的部署。然而相比中心化的系统,复杂度被无可避免的增大了,该如何降低各个组件之间的耦合度。挑战:需要保证可伸缩性、可维护性、可更新性,需要将服务划分为各个相对独立的组件,组件被分布式的部署,它们之间通过进程间通转载 2018-01-27 12:48:28 · 222 阅读 · 0 评论 -
C++多进程并发框架FFLIB
三年来一直从事服务器程序开发,一直都是忙忙碌碌,不久前结束了职业生涯的第一份工作,有了一个礼拜的休息时间,终于可以写写总结了。于是把以前的开源代码做了整理和优化,这就是FFLIB。虽然这边总结看起来像日记,有很多废话,但是此文仍然是有很大针对性的。针对服务器开发中常见的问题,如多线程并发、消息转发、异步、性能优化、单元测试,提出自己的见解。面对的问题 从事开发工程中转载 2018-01-27 12:46:07 · 2133 阅读 · 0 评论 -
C++ static_cast dynamic_cast const_cast reinterpret_cast使用总结
因为原来C风格的暴力万能类型转换容易导致运行时出错,所以要引入分类更清晰提前发现错误的转换语法。对象的类型转换包含了对象的引用或指针。1.static_cast是编译器默认选项,该运算符把expression转换为type-id类型,但没有运行时类型检查来保证转换的安全性。但是没有动态检查所以类对象间非直线继承转换不支持(无关对象指针类型),C风格的转换确是可以的,所以并不转载 2017-09-09 14:38:58 · 211 阅读 · 0 评论 -
动态库的链接和链接选项-L,-rpath-link,-rpath
链接动态库如何程序在连接时使用了共享库,就必须在运行的时候能够找到共享库的位置。linux的可执行程序在执行的时候默认是先搜索/lib和/usr/lib这两个目录,然后按照/etc/ld.so.conf里面的配置搜索绝对路径。同时,Linux也提供了环境变量LD_LIBRARY_PATH供用户选择使用,用户可以通过设定它来查找除默认路径之外的其他路径,如查找/work/lib路径,你可以在转载 2017-09-13 20:12:18 · 404 阅读 · 0 评论 -
如何在32位程序中突破地址空间限制使用超过4G的内存
众所周知,所有的32位应用程序都有4GB的进程地址空间,因为32位地址最多可以映射4GB的内存(对于虚拟地址空间概念不太熟悉的朋友建议去看一下《Windows核心编程》这本书)。对于Microsoft Windows操作系统,应用程序可以访问2GB的进程地址空间(32位Linux可以访问3GB地址空间),这就是称为用户模式的虚拟地址空间。这2GB的用户模式虚拟地址空间位于4GB地址空间的低一半,而转载 2017-08-22 11:02:54 · 5509 阅读 · 0 评论 -
DLL入门浅析(5)——使用DLL在进程间共享数据
在Win16环境中,DLL的全局数据对每个载入它的进程来说都是相同的,因为所有的进程用的都收同一块地址空间;而在Win32环境中,情况却发生了变化,每个进程都有了它自己的地址空间,DLL函数中的代码所创建的任何对象(包括变量)都归调用它的进程所有。当进程在载入DLL时,操作系统自动把DLL地址映射到该进程的私有空间,也就是进程的虚拟地址空间,而且也复制该DLL的全局数据的一份拷贝到该进程空转载 2017-02-22 09:54:36 · 315 阅读 · 0 评论 -
DLL入门浅析(4)——从DLL中导出类
前面介绍了怎么从DLL中导出函数和变量,实际上导出类的方法也是大同小异,废话就不多说了,下面给个简单例子示范一下,也就不多做解释了。DLL头文件:#ifndef _DLL_SAMPLE_H#define _DLL_SAMPLE_H// 通过宏来控制是导入还是导出#ifdef _DLL_SAMPLE#define DLL_SAMPLE_API __declsp转载 2017-02-22 09:45:04 · 373 阅读 · 0 评论 -
DLL入门浅析(3)——从DLL中导出变量
前面介绍了怎么从DLL中导出函数,下面我们来看一下如何从DLL中导出变量来。 声明为导出变量时,同样有两种方法: 第一种是用__declspec进行导出声明#ifndef _DLL_SAMPLE_H#define _DLL_SAMPLE_H// 如果定义了C++编译器,那么声明为C链接方式#ifdef __cplusplusextern "C" {转载 2017-02-22 09:43:10 · 627 阅读 · 0 评论 -
DLL入门浅析(2)——如何使用DLL
上文我简单的介绍了如何建立一个简单DLL,下面再我简单的介绍一下如何使用一个DLL。当一个DLL被生成后,它创建了一个.dll文件和一个.lib文件;这两个都是你需要的。要使用DLL,就需要载入这个DLL。隐式链接这里有两个方法来载入一个DLL;一个方法是捷径另一个则相比要复杂些。捷径是只链接到你.lib 文件并将.dll文件置入你的新项目的路径中去。因此,创建一个新的空的Win3转载 2017-02-22 09:35:46 · 362 阅读 · 0 评论 -
DLL入门浅析(1)——如何建立DLL
动态链接库(DLL)是从C语言函数库和Pascal库单元的概念发展而来的。所有的C语言标准库函数都存放在某一函数库中。在链接应用程序的过程中,链接器从库文件中拷贝程序调用的函数代码,并把这些函数代码添加到可执行文件中。这种方法同只把函数储存在已编译的OBJ文件中相比更有利于代码的重用。但随着Windows这样的多任务环境的出现,函数库的方法显得过于累赘。如果为了完成屏幕输出、消息处理、内存管理、对转载 2017-02-22 09:30:42 · 304 阅读 · 0 评论 -
mingW与cygwin
首先MingW和cygwin都可以用来跨平台开发。 MinGW是Minimalistic GNU for Windows的缩写,也就是Win版的GCC。 Cygwin则是全面模拟了Linux的接口,提供给运行在它上面的的程序使用,并提供了大量现成的软件,更像是一个平台。 相对的MingW也有一个叫MSys(Minimal SYStem)的子项目,主要是提供了一个模拟Linux的S原创 2017-02-21 23:00:11 · 265 阅读 · 0 评论 -
STL list
List 容器list是C++标准模版库(STL,Standard Template Library)中的部分内容。实际上,list容器就是一个双向链表,可以高效地进行插入删除元素。使用list容器之前必须加上头文件:#include;list属于std命名域的内容,因此需要通过命名限定:using std::list;也可以直接使用全局的命名空间方式:using namesp原创 2017-02-21 17:03:41 · 253 阅读 · 0 评论 -
STL stack
c++stack(堆栈)是一个容器的改编,它实现了一个先进后出的数据结构(FILO)使用该容器时需要包含#include头文件; 定义stack对象的示例代码如下: stacks1; stacks2; stack的基本操作有: 1.入栈:如s.push(x); 2.出栈:如 s.pop().注意:出栈操作只是删除栈顶的元素,并不返回该元素。 3.访问栈顶:如原创 2017-02-21 16:51:03 · 232 阅读 · 0 评论