- 博客(34)
- 收藏
- 关注
原创 使用GatewayWorker框架,多个workerman进程(businessworker)负载不均衡的问题解决过程
公司搭建一套智慧社区、智能对讲管控云平台时,使用GatewayWorker框架搭建app端外推送的服务。发现性能比预期的低。也就是GatewayWorker(https://github.com/walkor/GatewayWorker/)中的workerman组件往google fcm 服务和ios apns服务推送消息的性能不及预期。经过netstat -lanp后发现只有其中一个worker...
2018-08-09 16:07:59
4574
原创 结合freeswitch,分析voip中sip信令与音视频rtp传输的流程
freeswitch(下面用fs指代)作为sip server转发rtp包时,sip通话的整体流程大致如下:1、主叫发送invite给fs,并在sdp中携带主叫方接下来节将发送rtp包给fs的端口port1;2、fs转发invite信令给被叫放,其中已经修改过主叫方sdp中的IP&port2为fs服务端接收rtp包的地址信息(因为fs需要转流,所以fs要告诉需要修改sdp中描述rtp包目的...
2018-05-08 16:22:04
5293
原创 ipv6/ipv4双栈应用服务器开发细节
公司的楼宇对讲云平台项目需要为北美客户部署一套,美国T-mobile运营商的4G网络已经是纯ipv6的环境了,所以必须让平台支持ipv4/ipv6双栈网络模式。让平台支持双栈,只按照以下几个步骤来处理即可:1、主机保证有ipv4、ipv6两个网路地址。(国内实验室测试的时候,ipv6地址可以通过隧道临时配置);2、让服务监听在ipv6的模式下(这样既可以接收ipv4客户端,也可以接收ipv6客户端...
2018-05-07 17:55:40
6734
1
原创 thrift安装过程报错处理
1、make过程中总是: src/generate/thrift-t_c_glib_generator.o: file not recognized: File truncated /var/log/message查看了内核日志:发现 localhost kernel: Out of memory 怀疑是内存不足导致,看了下虚拟机内存分配只有1g,增加到2g后,make,一切
2017-05-03 11:08:35
4006
转载 使用 /proc 文件系统来访问 Linux 内核的内容
本文转自:https://www.ibm.com/developerworks/cn/linux/l-proc.html
2017-04-10 11:54:54
648
转载 Linux动态库(.so)搜索路径设置方法
众所周知,Linux动态库的默认搜索路径是/lib和/usr/lib。动态库被创建后,一般都复制到这两个目录中。当程序执行时需要某动态库,并且该动 态库还未加载到内存中,则系统会自动到这两个默认搜索路径中去查找相应的动态库文件,然后加载该文件到内存中,这样程序就可以使用该动态库中的函数,以及该动态库的其它资源了。在Linux 中,动态库的搜索路径除了默认的搜索路径外,还可以通过以下三种方法
2017-02-06 14:55:28
2863
原创 mysql5.6启动失败的一般解决方法
本文针对mysql5.6而言: MySQL server PID file could not be found! Starting MySQL...The server quit without updating PID file (/var/lib/mysql/mysql.pid).---------------------------------------
2017-01-20 12:36:14
6873
原创 nginx支持thinkphp
最近在搭建lnmp服务框架支持thinkphp,碰到一些问题,记录一下: 1、php7不兼容Thinkphp5以下的版本 2、nginx配置文件怎样支持Thinkphp的重写:server { listen 80; server_name localhost; root /home/web/nginx/
2017-01-13 18:29:11
476
原创 libxml2 解析xml字符串
最近在封装一个sdk接口给内部使用的时候,原来项目都是用c++开发的,xml解析工具用的是:Tinyxml,挺不错,至少不用考虑内存释放问题。这也是c++资源管理的好处。。。因为提供的是c的接口,所以tinyxml显然不能用了。后面就想到用libxml2,因为他用C语言开发的。网上想找现成的,结果发现都是解析文件的,记录一下解析xml字符串的过程吧,主要是内存的管理小心一点就OK了:
2017-01-11 20:07:35
2368
转载 linux性能分析的前60秒
转载自:http://techblog.netflix.com/2015/11/linux-performance-analysis-in-60s.htmlLinux Performance Analysis in 60,000 MillisecondsYou login to a Linux server with a performance issue: w
2016-11-20 12:58:39
1057
原创 std::list<>在结构体中占用的内存大小
#include#include#include#include#includetypedef struct tagTest{ char name[200]; int year;}Test;#define NUM 1typedef struct tagInfo{ //int count; char c; //会对齐到8字节,无论是count
2016-09-14 16:44:03
2779
转载 makefile三个常见变量:$@,$^,$<
转载自:http://my.oschina.net/u/1413984/blog/199029Makefile有三个非常有用的变量。分别是$@,$^,$<代表的意义分别是: $@--目标文件,$^--所有的依赖文件,$<--第一个依赖文件。 如果我们使用上面三个变量,那么我们可以简化我们的Makefile文件为: # 这是简化后的Makefile main:ma
2016-09-09 10:30:17
620
原创 epoll中的data联合体怎样使用的问题
1、epoll结构体的成员data其实是一个结构体,具体如下:typedef union epoll_data{ void *ptr; int fd; uint32_t u32; uint64_t u64;} epoll_data_t; struct epoll_event{ uint32_t events; /* Epoll events */ epoll_
2016-09-08 15:16:32
5794
1
转载 使用reuseport和recvmmsg优化UDP服务器_应用服务器
地址:http://www.shangxueba.com/jingyan/2216074.html最近刚好完成了一个DNS服务器的开发,因此积累一点对高性能UDP服务器的开发经验。如果你也遇到UDP服务器的性能不佳,远不如你的预期,也许你也可以采用本文的手段去优化一下试试。 udp不像tcp是有连接的,因此udp不能通过建立多个连接来提高对服务器的并发访问,然后我
2016-09-08 11:44:02
5133
转载 rtsp 客户端怎样保活
1、 Q: 各位老大,小弟有个问题,就是RTSP客户端与服务器之间是如何保活的? 就是当client与server建立好session后,是如何保证该session正在使用,不被删掉了噶? A1: RTSP服务器与客户端之间的保活,有几种不同的做法。 1. 首先,RTSP服务器对于每个客户端,都应该有一个超时定时器,一旦客户端超时,就将对应的会话删除。如果会话还活
2016-09-05 11:36:24
3029
原创 boost_foreach
#include#include#include#include#include:wq#include int main(){//typedef std::pair IdSizePair_t;std::map mmap; mmap[1] = 1;mmap[2] = 2;mmap[3] = 3;//BOOST_FOREACH( IdSizePair_t i, mma
2016-08-30 20:16:54
489
原创 线程池
#include #include#include#includeusing namespace std;static pthread_mutex_t m_pthreadMutex = PTHREAD_MUTEX_INITIALIZER; /** 线程同步锁 */static pthread_cond_t m_pthreadCond = PTHREAD_COND_INITIAL
2016-08-30 14:11:26
336
原创 list-erase
#include#include#include#include#includetypedef std::list CList_int;void deleteAllList(){ CList_int::iterator it, it1; if( m_list.empty() ) { return; } for( it =
2016-08-29 16:12:48
457
转载 c++ string类的实现
#include#include#includeusing namespace std;class String{ friend ostream& operator<< (ostream&,String&);//重载<<运算符 friend istream& operator>> (istream&,String&);//重载>>运算符public: Strin
2016-08-25 19:08:18
383
转载 c++ string类的内部实现
#include#include#includeusing namespace std;class String{ friend ostream& operatorfriend istream& operator>> (istream&,String&);//重载>>运算符public: String(const char* str=NULL);
2016-08-25 19:07:01
1526
原创 sql语句
1、查询某个日期接下来的几天: select '2016-02-0'::date + i;2、确定某个表是否存在:SELECT COUNT(*) FROM pg_class WHERE relname = ‘表名’3、做除数时需要的判断: case when sum(count)=0 hen 0 else sum(h.speed * h.count)/sum(h.co
2016-08-23 14:10:54
335
原创 派生类的构造函数中,可以将基类作为成员变量进行初始化
#include#include#includeusing namespace std;class A{public: A():m_year(0){} A(int n){m_year = n;}public: int m_year ;};class B : public A{public: B(){} B(int n):A(n)
2016-08-19 17:46:00
3064
原创 malloc了多个结构体长度的内存后,怎样操作每个结构体
#include #include#include#include using namespace std;typedef struct tagtest{ int ID; char name[24];}TEST;int main(){ int num = 10; int ulmemsize = sizeof(TEST) * num; TEST *pstrfid =
2016-08-15 15:33:40
2111
原创 自己实现简单的智能指针
#include#includeusing namespace std;templateclass share{ public: share():point(0){} share(T* p1) { point = p1; } ~share() { cout << "begin to delete share" << endl; if
2016-08-04 19:40:35
2259
转载 libevent的evbuffer跟bufferevent的区别
libevent源码分析–evbuffer和bufferevent的关系2014年08月29日 ⁄ 综合 ⁄ 共 2853字 ⁄ 字号 小 中 大 ⁄ 评论关闭在libevent中还有一个很重要的部分。evbuffer和bufferevent。evbuffer是一个缓冲区,用户可以向evbuffer添加数据,evbuffer和bufferev
2016-08-02 08:56:31
1838
原创 论assert(0)的作用
一般在代码中用assert(0)的作用:在认为不可能执行到的地方前加上这个断言,如果程序走到这里,那么一定是逻辑错误。其实就是一种预防性的错误检查。
2016-07-29 19:59:23
837
转载 类之间的权限(转载)
private:只能由1.该类中的函数、2.其友元函数访问。不能被任何其他访问,该类的对象也不能访问。protected:可以被1.该类中的函数、2.子类的函数、以及3.其友元函数访问。但不能被该类的对象访问。public:可以被1.该类中的函数、2.子类的函数、3.其友元函数访问,也可以由4.该类的对象访问。注:友元函数包括3种:设为友元的普通的非成员函数;设为友
2016-07-29 18:55:37
319
原创 socket选项--SO_LINGER,SO_REUSEADDR(SO_REUSEPORT)
SO_LINGER:当TCP连接的一段主动close()连接时,一般情况下,系统会马上返回,但是当有数据残留在发送缓冲区时,系统会现将这些数据发送出去再返回,这样可以优雅地关闭掉连接。这就可能使close()阻塞在系统调用中。 这种情况下,我们可以使用套接字选项SO_LINGER来改变这种默认设置。该选项会在用户空间与内核间传递如下结构体:struct linger{
2016-07-29 18:54:51
695
转载 hash函数
1、hash函数广泛用于密码学中,比如银行客户的密码通过函数函数转换得到一个加密过的新密码,把这个信息密码保存在数据库中,每次客户登录时,都会将密码经过hash算法转换后,再次与数据库中的密码进行比较。由于hash算法是不可逆的,所以可以保证即使得到了数据库中的密码,也无法破解得到原先的密码。2、hash还可以用来搜索,即用生成的hash值来表示所存储内容的存储器中的位置,这样可以将搜索的时间
2016-04-17 11:25:53
470
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人