![](https://img-blog.csdnimg.cn/20201014180756918.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
C/C++
hnzwx888
这个作者很懒,什么都没留下…
展开
-
快速排序算法详解
快速排序(Quick Sort)是对冒泡排序的一种改进。由C. A. R. Hoare在1962年提出,其基本思想是选取一个记录作为枢轴,经过一趟排序,将整段序列分为两个部分,其中一部分的值都小于枢轴,另一部分都大于枢轴。然后继续对这两部分继续进行排序,从而使整个序列达到有序。1.基本思想:例如对于一个待排序的源数组arr = { 4,1,3,2,7,6,8}。我们可以随便选一个元...转载 2019-12-15 21:21:19 · 1296 阅读 · 0 评论 -
Linux下如何用nginx+ffmpeg搭建流媒体服务器
安装ffmpeg安装过程略安装完成后,检查是否安装成功。比如我这里采用向pili推流的方式,将本地的一个mp4视频推流到七牛pili。ffmpeg -re -i /tmp/ffmpeg_test.mp4 -vcodec copy -acodec copy -f flv "rtmp://pili-publish.qingkang.echohu.top/qingkang/stream1?...转载 2019-12-14 23:08:27 · 407 阅读 · 0 评论 -
简单的搭建一个高并发低时延系统
首先声明一点:这里的“高并发”是相对的,相对于硬件而言,而不是绝对的高并发。后者需要分布式来实现,这里不做讨论。本文关注的是单机的高并发。最近在做一个语音通信系统,要求在线用户2W,并发1K路通话。硬件是两台服务器,酷睿多核,4G内存,千兆网卡(我用过的最好的硬件,负担这些应该问题不大)。系统的另一个指标是呼叫时延和语音时延。这是这个系统的关键。最终我们的系统拿到用户现场测试的时候,效果可...转载 2019-12-02 09:34:10 · 754 阅读 · 0 评论 -
Mongoose6.0源码分析(1)-从一个example开始到读取数据
/*摘自pi9nc博客http://blog.csdn.net/pi9nc/article/details/23129377Mongoose是一种WEB服务器,因为最近在学习网络编程,所以打算研究研究它的源码,认真看了大部分,觉得学到的东西的确不少,拿出来分享一下,也和大家交流交流至于什么是WEB服务器,以及Mongoose作为一种轻量级的WEB服务器,它有哪些优点,这里给个链接:http:...转载 2018-12-12 14:23:34 · 847 阅读 · 0 评论 -
Mongoose6.0源码分析(2)-http数据处理
从http_handle开始新的旅程(老吴analyze_request)调用1:mg_parse_http :处理请求包和应答包的头部 { get_request_len:得到http包头状态行的长度,不包括body。 mg_skip:计算了请求行各标记的长度,不计空格 [ //////请求包 s = mg_skip(...转载 2018-12-12 14:41:43 · 775 阅读 · 1 评论 -
Mongoose6.0源码分析(3)-重要结构体
重要的结构体,但是不往下看很难明白要这么复杂的结构体,所以在读其他代码是慢慢分析struct mg_mgr { struct mg_connection *active_connections; const char *hexdump_file; /* Debug hexdump file path */ sock_t ctl[2]; /* Socketpa...转载 2018-12-12 16:01:42 · 330 阅读 · 0 评论 -
我读Mongoose源码----程序框架
转载自:https://blog.csdn.net/pi9nc/article/details/23129377 Mongoose源代码线程UnixMongoose是一种WEB服务器,因为最近在学习网络编程,所以打算研究研究它的源码,认真看了大部分,觉得学到的东西的确不少,拿出来分享一下,也和大家交流交流 至于什么是WEB服务器,以及Mongoose作为一种轻量级的WEB...转载 2018-12-12 16:17:56 · 187 阅读 · 0 评论 -
Mongoose源码剖析:mongoose的工作模型
引言我看一个项目的时候,比较喜欢首先看它的架构和设计。因为这样在研读源码的时候,有一个指导作用,不会迷失于具体细节,并能够引导我如何去将点串成线,将线串成面。而且一个软件怎么样,很大程度上取决于它采用的架构。本文主要介绍Mongoose的工作模型,及根据这个模型将代码大致串起来,找出主线。内容框架如下:1、线程模型 2、从程序入口着手 3、Mongoose的生命旅程1、线程模型...转载 2018-12-12 16:20:10 · 328 阅读 · 0 评论 -
Mongoose源码之master_thread
转自于:https://blog.csdn.net/larryliuqing/article/details/7544374 本来要写一篇Mongoose源码分析,发现用一篇很难尽述其详,今天先来分析一下master_thread函数的工作原理。 Master_thread函数是Mongoose启动服务时,启动的第一个监听线程,它的主要工作是监听所有的client连接的请...转载 2018-12-12 16:24:09 · 200 阅读 · 0 评论 -
mongoose之worker_thread()函数
前面已经介绍过了mongoose的生产者过程,现在介绍下消费者过程。mongoose默认创建了10个worker_thread()线程来处理已接受的连接。worker_thread()函数原型如下:static void worker_thread(struct mg_context *ctx) { struct mg_connection *conn; int buf_size = ...转载 2018-12-12 16:26:17 · 399 阅读 · 0 评论 -
利用Mongoose 实现HTTP服务
注意:这里是使用mongoose实现HTTP服务,非数据库使用。最近由于需要使用HTTP服务端,原先是使用的Qt框架实现的HTTP服务端,然后发现有些缺陷导致我不得不放弃这个框架,也不是完全放弃,只是HTTP服务端这里不再使用Qt,用Qt做高并发真的有点不好。然后毅然的选择了mongoose这个框架,主要是听说这玩意 嵌入到代码中非常方便。下载之后发现果然就一个 h文件和cpp文件。。...转载 2018-12-12 17:09:44 · 1875 阅读 · 0 评论 -
RTP协议全解析(H264码流和PS流)
写在前面:RTP的解析,网上找了很多资料,但是都不全,所以我力图整理出一个比较全面的解析,其中借鉴了很多文章,我都列在了文章最后,在此表示感谢。互联网的发展离不开大家的无私奉献,我决定从我做起,希望大家支持。 原创不易,转载请附上链接,谢谢http://blog.csdn.net/chen495810242/article/details/392073051、RTP Hea...转载 2018-12-12 17:14:18 · 243 阅读 · 0 评论 -
从零编写c++之http服务器(1)-线程池
引言 编写这么一个c++的http服务器,纯粹是满足多年前一个好奇心。为什么我输入链接可以打开一个网页?这背后究竟发生了什么?所以本着好事多磨的心理一点点从零写了这个http服务器。他有着以下几个特点。1) 基于epoll的异步事件驱动框架2) L/F线程池处理网络事件3) 完全从零编写http服务模块 当然实现中为了研究原理,仅做了关键功能的开发,...转载 2018-12-12 19:37:55 · 586 阅读 · 0 评论 -
从零编写c++之http服务器(2)-epoll异步事件驱动框架
epoll是select/poll基础上改进的为大规模描述符事件监测的机制,常出现在高性能,高并发的服务器设计中。在这里我们需要设计一个框架,实现套接字对象将自身注册到框架中,框架即可利用epoll对其套接字进行事件监测;当事件产生时通知相应的套接字对象。从而实现事件的监测与处理解耦。惯例还是献上类图。完整源码见<https://github.com/kwansoner/p...转载 2018-12-12 19:40:44 · 374 阅读 · 0 评论 -
从零编写c++之http服务器(3)-http服务
http全称超文本传输协议,可调试性高,扩展性也强。上两个篇章我们已经拥有了epoll事件驱动框架和线程池处理网络事件,接下来我们要先写一个基础网络套接字,然后在此基础上扩展出http的套接字。献上类图如下完整源码见<https://github.com/kwansoner/panda.git> ...转载 2018-12-12 19:42:35 · 202 阅读 · 0 评论 -
C/C++跨平台程序基础知识
如需转载请标明出处:http://blog.csdn.net/itas109 QQ技术交流群:129518033目录C/C++跨平台程序基础知识前言1.主流操作系统类别1.1 UNIX System V1.2 BSD UNIX-386BSD1.3 UNIX-Like1.4 Windows1.4.1 For DOS1.4.2 Win 9x1.4.3 NT系列1.4.3....转载 2018-11-29 10:07:08 · 412 阅读 · 0 评论 -
C++跨平台开发心得小结
Linux编程与windows编程的差异之处: 1. 文件与目录的大小写以及路径分隔符的差别 windows下不区分大小写,路径分隔符一般使用"/";linux下区分大小写,路径分隔符使用"/"。 2. itoa()函数在linux下并不存在 所以使用类似sprintf();之类的函数是个不错的替代。(为什么说是类似函数,看下面一条啦) ...转载 2018-11-29 09:47:38 · 1215 阅读 · 0 评论 -
跨平台C、C++代码注意的事项及如何编写跨平台的C/C++代码
在我们的开发中,跨平台的需求越来越强烈,如何保持C/C++代码能在多个平台上编译,是一个比较值得研究的问题。关于跨平台的文章网上很多,跨平台的库网上也很多。那么我从自己的跨平台开发经验谈一谈自己的心得,希望对大家能够起到一定的作用。主要涉及到Windows和linux两个操作系统。1、 关于路径和头文件路径分隔符的问题在Windows中,正斜杠和反斜杠都可以,但是在Linux中,...转载 2018-11-29 16:29:54 · 964 阅读 · 0 评论 -
基于mongoose + MFC 搭建本本地HTTP服务器
原文网址:https://blog.csdn.net/moyebaobei1/article/details/81042336 最近有个需求,需要做一个桌面插件,其实是一个微型桌面应用,可以集成第三方的接口,比如网络摄像头,身份证读卡器等,同时又需要处理前端(谁站的离用户近谁就是前端,常见的是H5,或者其他什么不三不四的管理系统、网站什么的)过来的请求,不管谁了...转载 2018-12-15 11:17:59 · 595 阅读 · 0 评论 -
基于mongoose的C++ Http Server的“坑”与“坑”
最近有个奇葩的需求,需要用C++去实现一个Http Server。用Java或者其他语言去实现Http Server是一件很简单的事,但用C++去实现我就闻所未闻了(当然主要是我也没写过C++嘛)。于是去搜索了一把,不少人推荐mongoose,在实际使用中遇到了不少的坑。使用方式使用mongoose只需要将mongoose.h和mongoose.c引入即可。下面通过几个简单的例子了解一...转载 2018-12-15 11:26:28 · 19511 阅读 · 11 评论 -
从零学习游戏服务器开发(二) 最后一战概况
这份代码我也是无意中来自一个朋友,据他说也是来源于互联网,服务器端代码原来是linux版本的,但被厉害的大神修改成可以在Windows上运行。(如果不小心侵犯了您的版权,请联系我删除)。好在,这份代码中使用的大多数方法和接口都是可以跨Windows和linux两个平台的,所以linux开发下的朋友请不要感到不适,我们学习这份代码更多的不是纠结细节而是学习思路和源码。游戏主solution文件用...转载 2018-12-10 11:16:24 · 239 阅读 · 1 评论 -
从零学习游戏服务器开发(三) CSBattleMgr服务源码研究
如上图所示,这篇文章我们将介绍CSBattleMgr的情况,但是我们不会去研究这个服务器的特别细节的东西(这些细节我们将在后面的文章中介绍)。阅读一个未知的项目源码如果我们开始就纠结于各种细节,那么我们最终会陷入“横看成岭侧成峰,远近高低各不同”的尴尬境界,浪费时间不说,可能收获也是事倍功半。所以,尽管我们不熟悉这套代码,我们还是尽量先从整体来把我,先大致了解各个服务的功能,细节部分回头...转载 2018-12-10 11:24:25 · 284 阅读 · 0 评论 -
从零学习游戏服务器开发(四)LogServer源码探究
这是从零学习开源项目的第四篇,上一篇是《从零学习开源项目系列(三) CSBattleMgr服务源码研究》,这篇文章我们一起来学习LogServer,中文意思可能是“日志服务器”。那么这个日志服务器到底做了哪些工作呢?我们在Visual Studio中将LogServer设置为启动项,然后按F5将LogServer启动起来,启动成功后显示如下图:从上图中,我们可以到大致做了三件事:...转载 2018-12-10 11:26:25 · 455 阅读 · 0 评论 -
从零学习游戏服务器开发(一) 从一款多人联机实时对战游戏开始
写在前面的话 经常有学生或者初学者问我如何去阅读和学习一个开源软件的代码,也有不少朋友在工作岗位时面对前同事留下的项目,由于文档不完善、代码注释少、工程数量大,而无从下手。本文将来通过一个多人联机实时对战游戏——最后一战,来解答以上问题。 其实,我以上问题在我是一个学生时,我也同样因此而困惑,但是后来,我发现,对于文档缺失、注释缺失的项目,需要自己摸索,虽然是挑战,同时...转载 2018-12-10 13:04:07 · 325 阅读 · 0 评论 -
跨平台、高性能的媒体转发服务器实现
最近实现了一个媒体转发服务器,代码可以编译成windows(64位或32位,可以编译为service),Linux,Mac OS X等多种平台下的程序。sip客户端一般是躲在内网,要跨nat如果采用stun一类的技术,除了客户端麻烦外,需要部署stun服务器,而且不能解决所有类型的nat,最佳解决方案是部署一个支持媒体转发的全代理服务器,运营商的IMS网络,在网络边缘部署的SBC--会话边界控...转载 2018-12-21 18:24:43 · 801 阅读 · 0 评论 -
无锁:高性能录音系统根本性改进
当并发呼叫增加到1千以上(交换机端口镜像过来的流量达150M),含多种语音编码时(如g711A、U和g729等),录音系统性能出现下降,如丢录音,丢包,卡顿甚至崩溃等情况。经过彻底改进和优化,录音系统运行非常顺畅,可以长时间稳定运行而不会丢失任何数据。下面记录一下改进的关键部分。1、抓包改进抓包库使用的pcap_开头的函数,有很多可优化的地方,如设置缓冲区大小,读包延时(最好就不要...转载 2018-12-21 18:05:34 · 180 阅读 · 0 评论 -
如何实现一个voip录音系统
这里讨论的voip录音系统,是在网络交换机上设置端口镜像,将所有坐席(如ip话机)的端口数据镜像到指定端口,录音系统接到该端口,抓取端口上所有的数据包。市场上做voip录音的厂家,有些是硬件如板卡,有些是纯软件,他们的产品存在下列缺点: 1、很贵; 2、会丢失录音,原因一是处理能力不够,二是程序不稳定; 3、界面或接口复杂,有的还需要调用CTI接口。我花了几天思考了一下,并用一周的时...转载 2018-12-21 18:04:11 · 882 阅读 · 0 评论 -
Windows资源监视器软件的原理
原文网址:https://www.freebuf.com/column/137615.html 微软给我们提供了一些很好的程序,比如资源监视器,可以从这个软件里获取分析windows的自身的一些性能数据,比如CPU、内存、磁盘数据、文件读写、进程线程等,他具体怎么实现呢,今天这天文章就带你去获取其真实的原理。1.分析打开windows任务栏管理器,在其性能选项里,可以看到性能监控的...转载 2018-12-28 14:27:51 · 1530 阅读 · 2 评论 -
Web服务器----mongoose
原文网址:https://www.cnblogs.com/spite/p/9489495.html 概述: 简介: Mongoose是c语言写成的网络库。它为TCP、UDP、HTTP、WebSocket、CoAP、MQTT实现了事件驱动型的非阻塞api。其具有以下特性: 跨平台:可在linux/unix macos QNX eCos Windows Androi...转载 2018-12-12 13:01:43 · 1190 阅读 · 0 评论 -
web服务器之mongoose:简介
原文网址:https://blog.csdn.net/yangxuan12580/article/details/51659790 引言在深入Mongoose源码剖析之前,我们应该清楚web服务器是什么?它提供什么服务?怎样提供服务?使用了什么协议?客户端如何唯一标识web服务器的资源?下面我们就抛开Mongoose,来介绍一个web服务的这些通性。web服务器:指驻留于因特网上某...转载 2018-12-12 13:07:17 · 252 阅读 · 0 评论 -
web服务器之mongoose:安装
原文网址:https://blog.csdn.net/yangxuan12580/article/details/51659598 引言Mongoose开源项目的主页是http://code.google.com/p/mongoose/。Mongoose是一个web服务器,通过提供一个web接口给它,它可以嵌入到现有的应用程序中去。Mongoose web服务器的执行是自满足的,它不依...转载 2018-12-12 13:10:34 · 232 阅读 · 0 评论 -
web服务器之mongoose:数据结构
原文网址:https://blog.csdn.net/yangxuan12580/article/details/51659762 Mongoose中有几个数据结构扮演着重要的角色,它们分别是:struct mg_context:保存Mongoose的上下文,几乎每个函数都有mg_context参数struct mg_connection:保存HTPP连接信息struct mg...转载 2018-12-12 13:30:32 · 184 阅读 · 0 评论 -
web服务器之mongoose:工作模型
引言 我看一个项目的时候,比较喜欢首先看它的架构和设计。因为这样在研读源码的时候,有一个指导作用,不会迷失于具体细节,并能够引导我如何去将点串成线,将线串成面。而且一个软件怎么样,很大程度上取决于它采用的架构。 本文主要介绍Mongoose的工作模型,及根据这个模型将代码大致串起来,找出主线。内容框架如下: 1、线程模型2、从程序入口着手3、Mongoose的生命旅...转载 2018-12-12 13:32:40 · 181 阅读 · 0 评论 -
web服务器之mongoose:核心处理模块
原文网址:https://blog.csdn.net/yangxuan12580/article/details/51659778 引言前面我们介绍了Mongoose所有的几个主要的数据结构mg_context、mg_connection、mg_request_info,还有Mongoose的生命主线。有了这些基础就可以来看看Mongoose的核心处理工作是怎样的。本文从下面几个方...转载 2018-12-12 13:35:29 · 231 阅读 · 1 评论 -
强大全面的C++框架和库推荐!
原文地址:https://www.toutiao.com/i6620996680202322435/ C++ 资源大全关于 C++ 框架、库和资源的一些汇总列表,内容包括:标准库、Web应用框架、人工智能、数据库、图片处理、机器学习、日志、代码分析等。 标准库C++标准库,包括了STL容器,算法和函数等。 C++ Standard Library:是一系列类和函数...转载 2019-02-02 09:28:04 · 372 阅读 · 0 评论 -
Avaya PBX sip trunk对接第三方sip server传递UUI的方法
原文网址:http://blog.sina.com.cn/s/blog_538a8c730102vvvp.html 使用osip开发的sip server对接avaya sip trunk,基本流程可以跑通,但是没有办法传递UUI数据(通过AES server采集到uui数据)。研究发现avaya支持RFC7433( Mechanism for Transporting User-to...转载 2019-02-22 17:35:36 · 2362 阅读 · 0 评论 -
Jtapi开发之转接二 传递uui
原文网址:https://blog.csdn.net/cjqhut/article/details/85070954以下代码实现基于avaya的Tsapi环境,实现了转接是传递UUI(随录数据) package com.av.demo; import javax.telephony.Connection;import javax.telephony.Provider;i...转载 2019-02-22 17:50:57 · 426 阅读 · 0 评论 -
学会使用windbg定位程序bug
原文网址:https://www.52pojie.cn/thread-599555-1-1.htmlgoodboy_wkx发表于2017-4-15 09:540x1工作环境系统:win7 32bit sp1Windbg: 6.12.0002.633 x86测试程序:通过com接口获得系统计划任务0x2被调试程序说明被调试程序是一个通过com接口获取windows的计划任务列表的程序。...转载 2019-03-21 09:00:00 · 382 阅读 · 0 评论 -
MarioTCP:一个单机可百万并发长连接服务器
转载自:https://blog.csdn.net/abcd1f2/article/details/42350863注:如果用此服务器做变长data的传输,请在业务处理函数中为input buffer增加清空功能(一行memset搞定;也可以在mariotcp核心代码mario_network.c的read功能中增加,mariotcp为了追求性能极限没做此设置)。mario_network...转载 2019-03-27 19:11:44 · 548 阅读 · 0 评论 -
LibProNet单进程处理400万TCP长连接的测试
原文网址:https://blog.csdn.net/dhhome2006/article/details/83789634一、前言LibProNet是一个开源的C++网络通信引擎,它由一套网络库、一个消息框架和一些有用的网络编程套件构成。与其他著名的网络库诸如libevent/libuv/asio相比,LibProNet更加简洁清晰,容易使用。LibProNet的工程地址为:http...转载 2019-03-27 19:18:20 · 451 阅读 · 0 评论