文章分类 » 未分类

Asterisk PJSIP configuration example

pjsip.conf

[transport-udp]
type=transport
protocol=udp
bind=0.0.0.0
allow_reload=yes
external_media_address=172.217.25.78 // server ip address
external_signaling_address=172.217.25.78 // server ip address

pjsip_wizard.conf

[user_defaults](!)
type = wizard
endpoint/transport=transport-udp
endpoint/context=from-internal
endpoint/rtp_symmetric=yes
endpoint/rewrite_contact=yes
endpoint/force_rport=yes
endpoint/disallow=all
endpoint/allow=ulaw,gsm
aor/max_contacts=2
aor/qualify_frequency=30

[user1](user_defaults)
inbound_auth/username = 101
inbound_auth/password = password101

[user2](user_defaults)
inbound_auth/username = 102
inbound_auth/password = password102

ZeroMQ Guide 笔记

首先强烈谴责ZMQ的作者,本身不是一个消息中间件的产品,为毛要起这么个名字,严重误导新手。

ZMQ是什么

1. ZMQ定义了一套“智能”的应用层传输协议。
2. ZMQ为协议提供了多种语言的实现

ZMQ解决什么问题

相比HTTP,XMPP等等其他协议,ZMQ自认为”更好的“解决了网络编程的常见问题。

这里假设我们从头开始制定一个像QQ一样的聊天协议,并封装成库给别人用,那我们就不得不考虑下面的问题:
1. 异步IO的需求,这是最基本的需求
2. 兼容多种传输层协议的需求。为了兼容不同的传输层协议,TCP/UDP,ipv4/ipv6我们肯定要做一下封装
3. 连接库的可靠性,需要有buffer,需要有掉线处理的逻辑,需要有消息重传的需求
4. 分布式扩展的需求。随着系统规模的扩展,我们需要对系统进行横向的或纵向的拆分,有了队列和路由的需求,所以我们也要在协议中考虑。
5. 协议的扩展性,支持分片,支持传输流媒体
6. 协议的多语言支持的需求。可能一开始只有PC端,用C语言就够了,但是未来还可能有osx客户端(objc),air客户端(actionscript),.net客户端(C#)。

想想好像也不复杂,协议可以用现成的XMPP,定义自己的二进制协议也更简单,库的话libev,libuv啥的再封装一层就搞定了。正当你想着造一个自己的nb之轮的时候,ZMQ瞟了你一眼,轻蔑的说“你有哥实现的好嘛,乖乖用我的协议吧,细节屏蔽到你感觉不到哥的存在,弯路也帮你走了不少,不止啊,哥的协议包罗万象,帮你实现这个破IM协议算是屈才了。。“

guide一些文章中给我的感觉就是,zmq几乎把其他协议鄙视一圈。总结起来就是,比起TCP这种低级协议,哥更高级,比起XMPP,AMQP这些高级协议,哥更快,比起商业软件来,哥开源免费。比起同步的来哥异步。。。

那ZMQ到低做了神马nb的设计呢,我觉得可以简单的这么描述:ZMQ实现了一套虚拟的应用层的socket,可以拿tcp做个对比。
TCP的socket,传输的是字节流,buffer里是字节流。
ZMQ的socket,传输以Message为单位,buffer是mesage队列。
TCP的socket,只有两个角色client,server
ZMQ的socket, 有更多角色PUB,SUB,REQ,REP,DEALER,ROUTER…
TCP的socket, 只能是点到点的连接
ZMQ的socket,可以是1-1,1-n,n-1,n-m的任意模型

ZMQ中可以通过各种角色组合来适应不同的应用场景。REQ/REP可以支持传统的c/s应用,PUB/SUB可以实现订阅模式的消息中间件,DEALER/ROUTER可以实现一个中间路由或7层负载的角色。通过把这些组合积木一样的混搭,便可以构建几乎所有复杂的应用拓扑。

这么nb的东西,最关键的是提供的接口很简单,而且使用起来感觉和普通的socket也很像,这里贴个echo server的例子

$context = new ZMQContext(1);
$responder = new ZMQSocket($context, ZMQ::SOCKET_REP);
$responder->bind("tcp://*:5555");
$responder->bind("tcp://*:9999");

while (true) {
    $request = $responder->recv();
    $responder->send($request);
}

ZMQ可以当做消息队列用嘛?因为好多人拿来跟rabbitmq啥的做了对比评测啊,千万别。。。ZMQ自带的队列是人家的协议buffer啊,完全没有中间件的特性,只能说利用ZMQ完全可以做一个天生扩展性和可靠性灰常高的消息中间件出来。。。

2B长城宽带正在做网站内容挟持,私自投放广告的勾当~

访问招行的网站,一片空白,先跳出一个广告,感觉不对劲,立刻查看dom,发现已经被iframe加了壳。此2b宽带运营商之前就干过dns挟持到自己的官网的事。。不曝光不足以平息自己的愤怒~~

补了几篇文章竟然超了。。

这tm才应该是第201啊。。。现在只能含恨202

postfix出错一则

能收到邮件但是发不出去

错误日志如下

Nov  4 20:32:21 localhost postfix/cleanup[4853]: warning: 51CCA2E129: virtual_alias_maps map lookup probl         em for xxxx@gmail.com
Nov  4 20:33:21 localhost postfix/pickup[4851]: 587A12F5F5: uid=0 from=
Nov  4 20:33:21 localhost postfix/cleanup[4853]: warning: connect to mysql server localhost: Can't connec         t to local MySQL server through socket '/var/run/mysqld/mysqld.sock' (2)

原因是之前配置了基于mysql的地址映射

virtual_alias_maps = mysql:/etc/postfix/mysql-alias.cf 

当一些在chroot环境中运行的postfix组建试图通过/var/run/mysqld/mysqld.sock连接数据库时就报错了,在master.cf里禁用smtp,rewrite,cleanup的chroot即可

smtp      inet  n       -       n       -       -       smtpd
rewrite   unix  -       -       n       -       -       trivial-rewrite
cleanup   unix  n       -       n       -       0       cleanup

#这是一种不安全的fix方法,另一种解决方法是修改my.conf同过3306端口访问mysql,也可以解决问题。