自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

linyanwen99的专栏

每天进步一点点

  • 博客(85)
  • 资源 (14)
  • 收藏
  • 关注

原创 从rabbitmq谈谈基于redis的分布式存储系统的开发(1)

传统的数据库系统如mysql,在数据存储的可靠性,以及数据多机房的分布上可以满足,但是大几千甚至几万、几十万每秒的高并发读写请求上,由于硬盘瓶颈,所以性能通常无法满足,因此,在这种高并发请求的需求下,我们选择了redis这种nosql产品。redis基于内存的读写,有着卓越的性能,号称能满足将近每秒10万的读写请求,因而能满足我们业务系统频繁读写(数万每秒)的需求。Redis支持string、

2014-08-12 11:55:58 4121

原创 OpenRTMFP/Cumulus性能优化(7) 基于RTMFP的p2p的实现

1.RTMFP P2P连接描述:2.nearId的生成#define ID_SIZE 0x20class Entity {public:Entity();virtual ~Entity();...const Poco::UInt8id[ID_SIZE];...};Entity::Entity():id() {}再把生成的peer.id进行

2013-08-26 18:29:36 4348 4

原创 基于udp的音频抖动缓冲的实现

1. 音频包的结构:关键成员变量如下,其字段意思自明,无需进一步叙述:public var lastseq:uint;public var from:uint;public var sid:uint;public var seq:uint;public var time_stamp:uint;public var fec_id:uint;public var typ

2013-05-28 17:07:53 3981

原创 OpenRTMFP/Cumulus性能优化(6) RTMFP协议详解(3)

前面两篇文字叙述了RTMFP协议的握手流程,本篇文字接着叙述RTMFP协议连接流程,如下:一.接收packet的处理,如下:    (1).读取marker值,UInt8 marker = packet.read8()|0xF0;此时marker的值为Marker==0xfd    (2).读取TimeSent和LastTimeRecv的值,_timeSent = packet.r

2013-03-13 16:04:31 5137 2

原创 OpenRTMFP/Cumulus性能优化(5) RTMFP协议详解(2)

前一篇文字http://blog.csdn.net/linyanwen99/article/details/8664626叙述了rtmfp协议第一趟的握手流程,本篇文字继续叙述第二趟握手流程,如下:一.接收packet的处理,如下图:1.读取该request的数据,如下:    (1)UInt8 marker = packet.read8();其中marker==0x0b,表示

2013-03-13 11:19:39 3101 1

原创 OpenRTMFP/Cumulus性能优化(4) RTMFP协议详解(1)

一.在握手创建session阶段,接收到的packet包的id都为0,该阶段的主要过程为client端发送hello数据块至server端,然后,server端也会创建rhello数据块响应client端,rhello包含server端创建的cookie以及认证证书certificate,具体流程如下:二.对接收到的packet进行处理如下: 接收到的packet结构如下,(该图为网友提供

2013-03-12 17:03:53 4130

原创 OpenRTMFP/Cumulus性能优化(3) Listener的优化

一.Listener.h中部分方法声明如下:class Listener {public:     Listener(Poco::UInt32 id,Publication& publication,FlowWriter& writer,bool unbuffered);     virtual ~Listener();     void pushAudioPacket(Poc

2013-03-08 16:27:26 1692

原创 OpenRTMFP/Cumulus性能优化(2) PacketWriter的优化

前一篇文字http://blog.csdn.net/linyanwen99/article/details/8627430叙述了PacketReader类的部分方法的优化,这节继续叙述PacketWriter类的部分方法的优化一.PacketWriter.h的定义如下:#pragma once#include "Cumulus.h"#include "MemoryStream.

2013-03-06 18:02:17 1678

原创 OpenRTMFP/Cumulus性能优化(1) PacketReader的优化

一.PacketReader类相关方法叙述,如下:1.PacketReader类继承了Poco::BinaryReader,Cumulus::BinaryReader类的一些方法,也自己定义了一些方法,其功能如下,     Poco::UInt8_buff[PACKETRECV_SIZE];    (1)PacketReader::read32():从_buff的当前指针位置读取4

2013-03-01 19:37:07 1862 2

原创 LinuxC/C++编程基础(37) Cumulus::BinaryReader的实现

一.Cumulus::BinaryReader.h的定义,如下:#pragma once#include "Cumulus.h"#include "Address.h"#include "LinyanwenBinaryReader.h"#include "Poco/Net/SocketAddress.h"namespace Cumulus {class BinaryRe

2013-02-21 18:30:36 1453

原创 LinuxC/C++编程基础(36) Poco::BinaryReader的实现

一.BinaryReader.h的定义如下:#ifndef LINYANWENBINARYREADER_H_#define LINYANWENBINARYREADER_H_#include "Poco/TextConverter.h"#include "Poco/Foundation.h"#include #include namespace Linyanwen {

2013-02-21 18:17:36 1609

原创 LinuxC/C++编程基础(35) std::istream使用实例

#include #include #include #define PACKETRECV_SIZE 20typedef char Int8;typedef unsigned char UInt8;typedef signed int Int32;typedef unsigned int UInt32;using namespace std;UInt8 _buf

2013-02-19 23:50:45 6117

原创 LinuxC/C++编程基础(34) 虚函数编程实例

一.实例1,如下:#include #include class Startable;class StartableProcess{public:StartableProcess(Startable& _startable):startable(_startable){std::cout}void run();private:Startable& sta

2013-02-03 23:22:57 1141

原创 LinuxC/C++编程基础(33) 视频包缓存的实现(续1)

相关结构的定义,见前一篇文字:http://blog.csdn.net/linyanwen99/article/details/8485475 一.updateVideoCache方法的实现,如下:void updateVideoCache( VideoPkt *spProto) {    Poco::SharedPtr pProto(spProto);    VideoUid

2013-01-25 19:30:50 1779 2

原创 LinuxC/C++编程基础(32) 使用thrift/rpc开发简单实例(续4)

前一篇文字已经把thrift-client相关的叙述了,这里简单把makefile文件的编写也附上1.makefile的编写,如下:SRC = $(wildcard \   ./*.cpp \   ../gen-cpp/*.cpp \   )CC = g++RELFLAGS = -O2 -g THRIFTFLAGS = -DHAVE_NETINET_IN_H -DH

2013-01-16 18:04:23 1645

原创 LinuxC/C++编程基础(31) 使用thrift/rpc开发简单实例(续3)

写在前面:本篇文字在前面几篇的基础上,做了很大部分深入的改动,但thrift/rpc的通信原理是一样的thrift-client的实现:一.thrift_pool类:1.TTransport类的创建,如下:shared_ptr ThriftPool::CreateConnection(const string ip, int port){     /*采用TCP Socke

2013-01-16 17:58:58 1867

原创 LinuxC/C++编程基础(30) 视频包缓存的实现

<!--body {margin:0 auto; font-family:Georgia,Palatino,serif; color:#444444; line-height:1; max-width:960px; padding:5px}h1, h2, h3, h4 {color:#111111; font-weight:400}h1, h2, h3,

2013-01-09 14:15:36 4715

原创 LinuxC/C++编程基础(29) syslog-ng配置实例

<!--body {margin:0 auto; font-family:Georgia,Palatino,serif; color:#444444; line-height:1; max-width:960px; padding:5px}h1, h2, h3, h4 {color:#111111; font-weight:400}h1, h2, h3,

2012-12-31 19:02:07 1702

原创 LinuxC/C++编程基础(28) “心跳”信息的处理

写在前面:前面几篇文字已经把服务器端相关的叙述了,这里再把客户端的给加上一.client.cpp函数的实现,如下:1.构造函数的实现,如下:Client::Client():writable(true){    if((epfd = epoll_create(MAXEVENTS)) == -1){        exit(-1);    }    if((connf

2012-12-18 19:36:51 3053 3

原创 LinuxC/C++编程基础(27) “心跳”信息的处理

写在前面:这里再把下行数据这部分加上一.handle函数的实现,如下:#include "JsonCpp/json.h"#include "DownstreamHandler.h"void DownstreamHandler::handle(ClientSession* client, const char* pack, int length){    Json::Value

2012-12-18 19:33:13 1467 2

原创 LinuxC/C++编程基础(26) “心跳”信息的处理

写在前面:前一篇文字已经把相关的东西叙述了,这里再把ClientSession这部分加上一.数据的发送,如下:int ClientSession::sendData(std::string message){    int rc = 1;    char buf[50];    int offset = 0;    offset += sprintf(buf, "%04d"

2012-12-18 19:28:30 1184

原创 LinuxC/C++编程基础(25) “心跳”信息的处理

一.在客户端登录服务器,建立长连接,请求服务时,通常服务器端要检查客户端是否还保持连接,若连接已经断开,则服务器不再向该客户端提供服务,这种ping服务器的机制通常称为心跳,若在一定时间内没收到ping信息,则说明客户端已经断线。如下图,就是模拟实现了在高并发连接中处理ping信息时,服务器端收到的ping请求,如图:说明:由上图可以看出,有3个客户端不断地向服务器发送

2012-12-18 19:23:44 2652

原创 LinuxC/C++编程基础(24) 使用thrift/rpc开发简单实例(续2)

写在前面:前面两篇文字已经把thrift/rpc的安装以及服务端的编写叙述了,这里再把客户端的编写加上一.client.cpp文件实现,如下:#include "../gen-cpp/MusicServlet.h"#include #include #include #include #include #include #include using name

2012-12-11 12:25:47 3033

原创 LinuxC/C++编程基础(23) 使用thrift/rpc开发简单实例(续1)

写在前面:thrift/rpc的安装请参考前一篇文字,这一篇文字主要叙述thrift/rpc的使用一.定义自己的服务接口,如下:1.music.thrift文件内容如下:namespace cpp shansjstruct Music_Info{1: i32 song_id;2: string song_name;3: string song_singer;4: s

2012-12-11 11:23:25 4299

原创 LinuxC/C++编程基础(22) 使用thrift/rpc开发简单实例

一.在实际项目的开发中,一个功能的增加,可能需要多个部门或者多个同事的合作才能实现,而不同的部门或者同事,使用的开发语言不尽相同,这时,thrift/rpc就能很好的派上用场。如下:说明:YY客户端,关注功能的实现(图中心形部分),其实现就需要粉丝代理服务器(c/c++实现)和后台服务器(java实现)之间进行通信,其实就是通过thrift/rpc实现的二.thrift/rpc

2012-12-11 11:04:56 2981

原创 LinuxC/C++编程基础(21) 使用boost::asio搭建服务器简单实例(续)

写在前面:前一篇文字http://blog.csdn.net/linyanwen99/article/details/8274754已经把相关原理讲解了,这里就不再赘述,直接上源码一.crossdomain.h头文件的声明,如下:#ifndef CROSSDOMAIN_H#define CROSSDOMAIN_H#include #include #include #i

2012-12-09 13:28:10 2443

原创 LinuxC/C++编程基础(20) 使用boost::asio搭建服务器简单实例

一.crossdomain.h头文件的编写,如下:#ifndef CROSSDOMAIN_H#define CROSSDOMAIN_H#include #include #include #include #include using namespace boost;class CrossDomain{private:    struct Server;

2012-12-09 13:16:58 2968

原创 LinuxC/C++编程基础(19) 不可复制类的原理及实现

有些类需要完全禁止复制。比如,iostream类,scoped_ptr类就不允许复制,本文叙述关于这种类型的类的原理及实现,如下:一.拷贝构造函数的实例,如下:class A;A a;A b(a);二.重载赋值操作符的实例:class A;A a;A b = a;三.拷贝构造函数的应用实例1.同一类型的对象显示或隐式初始化一个对象,如下:eg:cla

2012-12-06 12:09:30 1671

原创 LinuxC/C++编程基础(18) 视频关键帧长度和宽度的解析(续)

写在前面:前一篇文字已经把视频的解析叙述了,http://blog.csdn.net/linyanwen99/article/details/8260199,该篇是用C/C++写的,考虑到视频前端的开发通常是基于flash或者html来实现,这里不妨给出用actionscript3.0实现的一个,尽管在本系列文字中显得格格不入。考虑到前一篇中该讲述的都讲得差不多了,这里不再赘述,若有差别,

2012-12-05 16:52:25 1445

原创 LinuxC/C++编程基础(17) 视频关键帧长度和宽度的解析

一.问题描述,如下:在视频开发时,在视频播放之前,通常得确定该视频的原始长度和宽度,以这样的长度和宽度,才能得到最佳的视觉效果。否则,长度或者宽度过大,就会造成失真,过小,则显然不必要。而视频的长度和宽度通常是通过相关算法变换后,存储于视频的关键帧,因此,需要把它们解析出来,如下图给出了一些视频帧的数据:比如,在网页YY的开发中,http://yy.com/

2012-12-05 15:47:38 3061 6

原创 LinuxC/C++编程基础(16) boost异步socket处理

一.服务器端server.cpp的实现,如下:#include #include #include #include using namespace boost;using namespace boost::asio;class server{private:    io_service& ios;    ip::tcp::acceptor acceptor

2012-12-04 15:51:32 3271

原创 LinuxC/C++编程基础(15) boost同步socket处理

一.服务器端server.cpp的实现,如下:#include #include using namespace boost::asio;int main(int argc,char** argv){    try{        std::cout        io_service ios;        ip::tcp::acceptor acceptor(i

2012-12-04 11:21:18 1219

原创 LinuxC/C++编程基础(14) asio定时器的用法

一.同步定时器,如下:#include #include #include int main(int argc,char** argv){    boost::asio::io_service ios;    boost::asio::deadline_timert(ios,boost::posix_time::seconds(2));    std::cout

2012-12-03 19:29:58 1401

原创 LinuxC/C++编程基础(13) shell脚本简单实例

一.createDir.sh的编写,如下:#! /bin/bashisDirectory(){    DIR_NAME=$1    if [ ! -d $DIR_NAME ];then        return 1    else        return 0    fi}for DIR in "$@";do    if isDirector

2012-12-02 18:09:12 1152

原创 LinuxC/C++编程基础(12) 红黑树的实现

写在前面:红黑树是基于本系列文字中的其他两篇文字>,>的基础上实现的,这几篇文字中,写过的,这里就不再赘述。红黑树的实现也比较简单,如下:一.红黑树节点的定义,如下:typedef struct TreeNode* link;enum COLOR {RED,BLACK};struct TreeNode {COLOR color;unsigned char k

2012-11-29 18:54:59 1031

原创 LinuxC/C++编程基础(11) 基于深度优先搜索查找迷宫路线

一.问题描述:定义一个二维数组,如下:int maze[MAX_ROW][MAX_COL] = {0,1,0,0,0,0,1,0,1,0,0,0,0,0,0,0,1,1,1,0,0,0,0,1,0};它表示一个迷宫,其中1表示墙壁,0表示可走的路,只能横着走,或者竖着走,不能斜着走。要求(1):输出从左上角到右下角的一条路线(2)输出从左上角到右下角的所

2012-11-28 16:52:14 1463

原创 LinuxC/C++编程基础(10) quicksort的简单实现

源代码如下:#include #include #include #define ARRAYLENGTH 30#define RANGE 100void swap(int& key1,int& key2){int temp = key1;key1 = key2;key2 = temp;}int partition(int A[],int p,in

2012-11-27 18:20:24 1006

原创 LinuxC/C++编程基础(9) 二叉查找树的实现

一.树节点的结构及创建,如下:typedef struct TreeNode* link;struct TreeNode {unsigned char item;link parent;link left;link right;};static link createNode(unsigned char item){    link p = (link)

2012-11-27 16:08:02 865

原创 LinuxC/C++编程基础(8) 基于条件变量实现生产者与消费者的实例

一.buffer.h的声明,如下:#ifndef BUFFER_H#define BUFFER_H#include #include #include #include class buffer{public:buffer(size_t n):unRead(0),capacity(n){}void put(int x);void get(in

2012-11-26 18:24:49 1196

原创 LinuxC/C++编程基础(7) boost::mutex的简单实例

一.main.cpp函数的实现,如下:#include #include templateclass Counter:public boost::noncopyable{private:T t;boost::mutex mu;public:Counter(T _t = T()):t(_t){}T operator++(){boost::mutex::sc

2012-11-25 14:07:13 1433

Flex sdk 4.5.0

Flex sdk 4.5.0 下载网址,可提供下载链接,里面有本人联系方式,也可以通过联系方式直接联系本人,本人可以直接发送给各位需要的同学,由于文件太大,所以只好以这种方式了,欢迎下载!

2012-04-11

linux环境下用makefile编译简单的helloworld程序

linux环境下用makefile编译简单的helloworld程序,里面有详细的编译步骤,有写makefile文件时需要注意的一些细节,读者只需按照说明,按部就班地执行就可以成功,欢迎下载!

2012-04-01

as3教程,手把手教你在flashbuilder4下开发as3

as3教程,手把手教你在flashbuilder4下开发as3,从入门到精通,按部就班,事无巨细,真情给您各种技术细节,开发细节,有应用程序开发的示例,绝不坑爹!

2012-03-20

eclipse c++安装,保证教你安装成功

eclipse c++安装,这是本人安装的心得,里面列出了本人安装的整个流程,选择最简单的安装流程,方便快捷,保证成功,绝不坑爹!

2012-03-17

amr音频文件

可以播放的amr文件,供需要的朋友下载,是龚玥唱的步步高,其中是我经过编码转换成的

2012-03-13

launch failed binary not found(图文)手把手教你解决

您是否在网上找了好多资料都无法解决这个问题?launch failed binary not found,那小弟不才,愿以独家秘诀,(图文)手把手教你解决这个问题,绝不坑爹,欢迎下载!

2012-03-09

FreeMarker实例教程,手把手教你FreeMarker的方方面面

FreeMarker实例教程,手把手教你FreeMarker的方方面面,你只需要按照教程的示例按部就班地编程,就会有神奇的收获,绝不坑爹,祝各位学习工作愉快!

2012-03-07

mybatis编程实例,手把手教你学会初步的mybatis编程

mybatis编程实例,手把手教你学会初步的mybatis编程,里面有详细的开发步骤,有作者的联系方式,有问题的话可以随时联系,有很好的设计模式,和良好的编程习惯,相信读者阅读了会有很大的收获,绝不坑爹!祝各位工作开心!

2012-03-07

mysql最新版本下载

这个mysql版本用起来非常方便,安装方法也很简单,欢迎各位开发者下载玩玩,同时若是需要第三方的navicat软件的话,可以到本人资源页面下载哈,祝各位工作愉快!

2012-03-05

navicat for mysql10.0.10版本

这是navicat for mysql10.0.10版本的数据库第三方工具,很好用的一个数据库工具,界面美观,人性化,使用起来感觉特别的舒服,欢迎各位开发者下载玩玩

2012-03-05

oauth2.0接口java版编程实例,倾情给你详细的技术细节

真情大奉献,给你详细的技术细节,里面有作者的联系方式,有疑问的话,欢迎随时交流,一起提高,一起进步哦亲!

2012-03-04

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除