摘要:
Thrift 服务端有如下模式:TSimpleServer TThreadpoolServer TThreadedServer TNonblockingServerNonblockingServer是非阻塞的,编写非阻塞服务端程序需要链接库libthriftnb.a,即 -lthriftnb如果找不到libthriftnb.a,可能是以下问题:1.之前没有安装libevent,解决方法是安装libevent,再重新编译安装Thrift2.安装libevent,没有生成libevent动态库最初遇到这个问题是因为未安装libevent,但是安装libevent重新编译Thrfit仍然没有thri 阅读全文
摘要:
printf()和fprintf()这些输出函数的参数是可变的,在调试程序时,你可能希望定义自己的参数可变的输出函数, 那么可变参数宏会是一个选择。 C99中规定宏可以像函数一样带有可变参数,比如 #define LOG(format, ...) fprintf(stdout, format, __VA_ARGS__)其中,...表示参数可变,__VA_ARGS__在预处理中为实际的参数集所替换G... 阅读全文
摘要:
内容不断更新,目前包括协议中握手和数据帧的分析 1.1 背景 1.2 协议概览 协议包含两部分:握手,数据传输。 客户端的握手如下:GET /chat HTTP/1.1Host: server.example.comUpgrade: websocketConnection: UpgradeSec-WebSocket-Key: dGhlIHNhbXBsZSBub25jZQ==Origin: htt... 阅读全文
摘要:
使用libevent编写websocket服务端时遇到了一个问题: 浏览器与服务端建立连接后,若刷新或关闭浏览器窗口(未监听相应事件并处理),服务端无法得知连接断开,按理说,这种情况属于client异常终止,跟拔网线的情况类似。这种情况下,服务端不知情,仍保留此连接,仍按照既定逻辑向client写数据,写了两次后,服务端程序终止(多次测试,均是第2次后终止),不是崩溃,是异常终止,非常不解。 问... 阅读全文
摘要:
一直在做一个语音项目,到了测试阶段,近来不是很忙,想把之前做的内容整理一下。 关于AAC音频格式基本情况,可参考维基百科http://en.wikipedia.org/wiki/Advanced_Audio_Coding AAC音频格式分析 AAC音频格式有ADIF和ADTS: ADIF:Audio Data Interchange Format 音频数据交换格式。这种格式的特征是可以确定的... 阅读全文
摘要:
随机数包括伪随机数和物理随机数,我要说的是使用rand()和srand()生成伪随机数,尽管是伪随机,也能满足大部分要求。#include <stdlib.h>int rand(void);返回一个伪随机数,范围是0-RAND_MAX(尽管实现不同,但至少是32767)void srand(unsigned int seed);设置伪随机数算法的种子了解随机数的生成,需要从它内部工作原理说起。调用rand()返回的随机数实际上是由一个算法生成的,此算法会生成一个无关联的数字序列,它需要一个种子,根据种子生成相应的数字序列,即种子不同,生成的数字序列也不同。srand()就是用来设置 阅读全文
摘要:
字典树,又称单词查找树,Trie树,是一种树形结构,是一种哈希树的变种。典型应用是用于统计、排序和保存大量的字符串(但不仅限于字符串),所以经常被搜索引擎系统用于文本词频统计。其优点是:利用字符串的公共前缀来节约存储空间,最大限度地减少无谓的字符串比较,查询效率比哈希表高。根节点不包含字符,除根节点外每一个节点都只包含一个字符,每个节点的所有子节点包含的字符都不相同。从根节点到某一节点,路径上经过的字符连接起来,为该节点对应的字符串。利用字典树查找字符串的过程,是从根节点开始,在根结点的子节点中寻找字符串的第一个字符,若找到节点,则从此节点开始进行字符串第二个字符的查找,这是一个反复、字符串逐 阅读全文
摘要:
简单说一下popen()函数函数定义#include <stdio.h>FILE * popen(const char *command , const char *type );int pclose(FILE *stream);函数说明 popen()函数通过创建一个管道,调用fork()产生一个子进程,执行一个shell以运行命令来开启一个进程。这个管道必须由pclose()函数关闭,而不是fclose()函数。pclose()函数关闭标准I/O流,等待命令执行结束,然后返回shell的终止状态。如果shell不能被执行,则pclose()返回的终止状态与shell已执行exi 阅读全文
摘要:
原文链接:http://www.cnblogs.com/skyme/archive/2011/01/04/1925227.html如下显示free是显示的当前内存的使用,-m的意思是M字节来显示内容.我们来一起看看.$ free -m total used free shared buffers cachedMem: 1002 769 232 0 62 421-/+ buffers/cache: 286 7... 阅读全文
摘要:
一般,在开发测试阶段用debug版本,而上线发布用release版本。使用Makefile定制编译不同版本,避免修改程序和Makefile文件,将会十分方便。读了一些资料,找到一个解决方法,Makefile预定义宏与条件判断,结合make预定义变量,进行条件编译。比如,有一个test.cpp,包含这段代码#ifdef debug//your code#endif你希望在debug版本要执行它,在release版本不执行。我们可以写这样的一个Makefile: 1 ver = debug 2 3 ifeq ($(ver), debug) 4 ALL: test_d 5 CXXFLAGS = -. 阅读全文