- 博客(85)
- 资源 (14)
- 收藏
- 关注
原创 从rabbitmq谈谈基于redis的分布式存储系统的开发(1)
传统的数据库系统如mysql,在数据存储的可靠性,以及数据多机房的分布上可以满足,但是大几千甚至几万、几十万每秒的高并发读写请求上,由于硬盘瓶颈,所以性能通常无法满足,因此,在这种高并发请求的需求下,我们选择了redis这种nosql产品。redis基于内存的读写,有着卓越的性能,号称能满足将近每秒10万的读写请求,因而能满足我们业务系统频繁读写(数万每秒)的需求。Redis支持string、
2014-08-12 11:55:58
4213
原创 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
4428
原创 基于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
4075
原创 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
5220
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
3155
原创 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
4209
原创 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
1745
原创 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
1723
原创 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
1917
原创 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
1500
原创 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
1682
原创 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
6196
原创 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
1179
原创 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
1835
原创 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
1721
原创 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
1950
原创 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
4795
原创 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
1780
原创 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
3119
2
原创 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
1526
1
原创 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
1236
原创 LinuxC/C++编程基础(25) “心跳”信息的处理
一.在客户端登录服务器,建立长连接,请求服务时,通常服务器端要检查客户端是否还保持连接,若连接已经断开,则服务器不再向该客户端提供服务,这种ping服务器的机制通常称为心跳,若在一定时间内没收到ping信息,则说明客户端已经断线。如下图,就是模拟实现了在高并发连接中处理ping信息时,服务器端收到的ping请求,如图:说明:由上图可以看出,有3个客户端不断地向服务器发送
2012-12-18 19:23:44
2724
原创 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
3086
原创 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
4368
原创 LinuxC/C++编程基础(22) 使用thrift/rpc开发简单实例
一.在实际项目的开发中,一个功能的增加,可能需要多个部门或者多个同事的合作才能实现,而不同的部门或者同事,使用的开发语言不尽相同,这时,thrift/rpc就能很好的派上用场。如下:说明:YY客户端,关注功能的实现(图中心形部分),其实现就需要粉丝代理服务器(c/c++实现)和后台服务器(java实现)之间进行通信,其实就是通过thrift/rpc实现的二.thrift/rpc
2012-12-11 11:04:56
3035
原创 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
2487
原创 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
3033
原创 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
1729
原创 LinuxC/C++编程基础(18) 视频关键帧长度和宽度的解析(续)
写在前面:前一篇文字已经把视频的解析叙述了,http://blog.csdn.net/linyanwen99/article/details/8260199,该篇是用C/C++写的,考虑到视频前端的开发通常是基于flash或者html来实现,这里不妨给出用actionscript3.0实现的一个,尽管在本系列文字中显得格格不入。考虑到前一篇中该讲述的都讲得差不多了,这里不再赘述,若有差别,
2012-12-05 16:52:25
1519
原创 LinuxC/C++编程基础(17) 视频关键帧长度和宽度的解析
一.问题描述,如下:在视频开发时,在视频播放之前,通常得确定该视频的原始长度和宽度,以这样的长度和宽度,才能得到最佳的视觉效果。否则,长度或者宽度过大,就会造成失真,过小,则显然不必要。而视频的长度和宽度通常是通过相关算法变换后,存储于视频的关键帧,因此,需要把它们解析出来,如下图给出了一些视频帧的数据:比如,在网页YY的开发中,http://yy.com/
2012-12-05 15:47:38
3132
原创 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
3322
原创 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
1258
原创 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
1447
原创 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
1210
原创 LinuxC/C++编程基础(12) 红黑树的实现
写在前面:红黑树是基于本系列文字中的其他两篇文字>,>的基础上实现的,这几篇文字中,写过的,这里就不再赘述。红黑树的实现也比较简单,如下:一.红黑树节点的定义,如下:typedef struct TreeNode* link;enum COLOR {RED,BLACK};struct TreeNode {COLOR color;unsigned char k
2012-11-29 18:54:59
1074
原创 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
1509
原创 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
1044
原创 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
915
原创 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
1251
原创 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
1488
Struts2实例教程,手把手教你关于Struts2的方方面面
2012-03-07
FlashBuilder4使用手册,很全面,很详细
2012-03-28
as3教程,手把手教你在flashbuilder4下开发as3
2012-03-20
mybatis编程实例,手把手教你学会初步的mybatis编程
2012-03-07
launch failed binary not found(图文)手把手教你解决
2012-03-09
navicat for mysql10.0.10版本
2012-03-05
linux环境下用makefile编译简单的helloworld程序
2012-04-01
Flex sdk 4.5.0
2012-04-11
FreeMarker实例教程,手把手教你FreeMarker的方方面面
2012-03-07
mysql最新版本下载
2012-03-05
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人