Asterisk Macro带来的性能较低问题 Asterisk作为优秀的开源VOIP软件,其功能核心Dialplan辅助Asterisk核心完成一些复杂的业务功能。但其中一个常见的应用Macro在Dialplan的扩展中展现的相当灵活,方便用户快速扩展适合自己的应用。Macro的灵活性也有它的弊端,即会导致较低的性能。通过阅读app_macro代码发现Macro执行过程是递归调用。如:在上述的dialplan中,macro-1将会递归调用macro-2,macro-3,直到macro-3返回后则此次调用结束,递归结束后需要按原路径回归,这样在回归
socket选项SO_REUSEADDR带来的隐患 背景在实际开发中遇到一次单通的问题,排查后发现同一个端口被绑定了多次,导致在实际RTP流传输过程中端口对应的上层应用对象不正确,使得后续媒体传输都被丢弃。验证问题#include <stdio.h>#include <stdlib.h>#include <string.h>#include <sys/socket.h>#include <netdb.h>#include <arpa/inet.h>#includ
记:freeswitch-1.10.7 aarch64交叉编译 1. 下载源码https://files.freeswitch.org/freeswitch-releases/freeswitch-1.10.7.-release.tar.gz2. 编写交叉编译脚本build.sh#!/bin/bashexport ROOTDIR=$(cd `dirname $0`; pwd)export INSTALL_PREFIX=/data/freeswitch2export EXTERNAL_PREFIX=/data/ext-freeswitch2ex
ARMv8之arm64架构汇编知识 1. 寄存器1.1. 通用寄存器 31 个R0~R30,每一个寄存器能够存取一个64位大小的数。 当使用 x0~x30访问时,是一个 64位的数;当使用 w0~w30访问时,是一个 32 位的数,访问的是寄存器的低32位,如下图所示:1.2. 向量寄存器(也可以叫做浮点寄存器)每一个寄存器的大小是 128 位的。 分别能够用Bn、Hn、Sn、Dn、Qn的方式来访问不一样的位数。如下图:Bn:一个 Byte的大小,即8位 Hn:half word,即16位 S...
ARMv8架构 1. 背景从1995年,ARMV4(主要对应ARM7 family)开始到现在ARM RISC体系结构到现在已经演化了20多年。从设计一开始ARM就关注到了低功耗 到2011年,所有的ARM-Cotex family都被设计成使用ARMV7架构。1.1. 发展历程ARM7:采用ARMV4架构 ARM9:ARMV4的变体 ARM11:ARMV4的变体 Cotex-A8:为了匹配不同的市场,ARMV7从Cotex-A8开始被划分为三种属性:Application-Profile、RealT
Linux coredump文件压缩 1. 原理core文件的压缩借助于管道符“|”。 当有coredump文件生产时,系统会将文件流通过管道传输给压缩命令,这样就完成coredump文件的压缩工作。2. 压缩辅助工具手动编译core_helper shell脚本,内容添加为: exec gzip -> /data/corefiles/core-$1-$2-$3-$4.gz 3. 更新coredump生成规则 echo "| /usr/local/sbin/core_helper %e %t %s %p"
程序员的十个等级 背景介绍自西方文艺复兴以来,中国在自然科学方面落后西方很多,软件领域也不例外。当然现在中国的许多程序员们对此可能有许多不同的意见,有些人认为中国的程序员水平远落后于西方,有些则认为中国的程序员个人能力并不比西方的程序员差,只是整个软件产业落后而已。那么,到底中国的程序员水平比西方程序员水平差,还是中国有许多优秀的程序员达到或超过了西方程序员同等水平呢?要解决这个问题,必须先知道程序员有多少种技术层级,每个层级需要什么样的技术水平,然后再比较中国和西...
getaddrinfo神秘面纱 1. getaddrinfo能做什么名字到地址转换:解析DNS地址 服务到端口转换:将IP地址和端口转换为一个socket地址2. 重要数据结构struct addrinfo { int ai_flags; int ai_family; int ai_socktype; int ai_protocol; socklen_t ai_addr
res_nsearch查询DNS过慢优化 1. 问题背景一个无效的DNS地址,通过res_nsearch接口解析其IP地址。由于res_nsearch查询过程过慢,影响系统其他业务的使用。2. 解决思路由于res_nsearch接口是在glibc库中实现,阅读源码了解其实际工作原理,以解决查询过慢的问题。3. 重要数据结构贯穿于res_nxxx系列接口函数的重要数据结构如下:struct __res_state { int retrans; /* retransmition time interval */ int ret