Browsed by
Author: YI

为什么没有选择sipml5

为什么没有选择sipml5

有多种技术和实现方式可以将SIP与webRTC两个世界连接起来,比如我们的miniWebPhone/miniSIPServer以及sipml5等。当然,最早出现的是sipml5以及与TA配套的webrtc网关。既然已经有了sipml5,为什么我们在设计和实现miniWebPhone(以下简称MWP)时,不采用现成的解决方案呢?

回答这个问题之前,请先粗略的看一下完成后的情况。sipml5的javascript文件大小超过2MB,而MWP的javascript文件是20KB。仅仅对比这两个数据,我就认为我们的决定非常正确,sipml5实在是太臃肿了!

造成sipml5如此庞大的根本原因在于:TA的目标是在浏览器端用javascript来实现一个完整的SIP协议栈及呼叫处理过程。理想很丰满,现实太骨感。

我想sipml5的设计者被HTTP与SIP之间的相似性给迷惑了。两者的确都是基于文本格式,SIP甚至都基本遵循HTTP的消息定义,但是两者却有最根本的区别:HTTP本质上是无状态、无层次的协议,而SIP是有严格的状态,不仅有transaction的状态,也有session和dialog状态。同时SIP又是多层次的,包括transaction、session、UA等不同的层次。当你用一个无状态、无差别的协议模式强行去套一个多状态、多层次的模式,工作量无疑是巨大的。

而对javascript语言而言,其实并不擅长去解析或者分析类HTTP协议格式的文本。而SIP协议虽然采用HTTP协议的文本格式,但是在会话过程中,不仅仅要解析到header层面,还要进一步解析内部各种参数。这种情况就更加不是javascript擅长的。因此可以看到sipml5不得不耗费大量的处理过程去解析SIP协议的细节。javascript擅长处理什么文本格式呢?JSON!因此在miniWebPhone的设计和实现过程中,我们理所当然地采用JSON来重新定义消息格式。

让我们再看看服务器端的设计。这又是另一个让人很纠结的地方。由于浏览器不支持开UDP和TCP连接,只支持websocket连接(本质上其实还是个TCP连接),sipml5的设计者们不得不引入SIP over websocket(这个定义到现在还处于draft状态)。而这要求客户端和服务器两端都必须修改才能支持。虽然websocket与TCP几乎没有区别,但是对SIP协议栈、SIP会话层面的处理来说,可不是仅仅重用TCP处理那么简单,服务器端的工作量同样巨大。

说到这里就稍微跑跑题,让我们先吐槽一下浏览器的实现者们。当浏览器支持websocket的时候,实际上就已经支持了TCP,为什么不向应用层开放TCP连接能力?websocket本质上就是个TCP连接,只有开始的两个握手消息是HTTP格式,后续跟HTTP一点关系都没有。同样,既然已经支持了webRTC,为什么不向应用层开放UDP连接能力?打开一个SRTP端口和打开一个UDP端口同样一点区别都没有。如果浏览器开放了TCP和UDP连接能力,哪怕仅仅开放UDP能力,sipml5的开发者也不用一边哭一边改设计,更不用搞出“SIP over websocket”这么个爷爷不疼、姥姥不爱的东西了。

让我们回到原点。分析了这些困难和不足,既然服务器(或者网关)死活都要修改,那我们为什么不把工作量集中到一端,从而解放另外一端?因此我们放弃sipml5,重新思考:

客户端无疑还是必须基于webRTC和javascript的。但是消息格式不再是HTTP或者SIP格式,而是JSON格式,这样javascript就可以轻松处理。客户端采用无状态方式,呼叫的状态由服务器端来维持。这就是MWP的javascript文件仅仅20KB就ok了的根本原因。

既然客户端采用了JSON格式的消息,因此服务器端也要相应作出设计。主要工作无非就是转码成SIP消息格式并维持websocket连接,其他处理仍然可以沿用目前已有的SIP流程。而我们要做的,仅仅是在客户端和SIP之间做个转换层而已。

访问onedrive

访问onedrive

一个好端端的网站,被莫名其妙地干掉了。经网友介绍,还好只是DNS污染。网友推荐使用DNSCrypt解决这个污染问题。不过有个更简单点的方法,直接将onedrive的IP地址写入hosts即可。

修改C:\Windows\System32\drivers\etc\hosts文件,增加以下两行记录:

134.170.108.26 onedrive.live.com
134.170.108.152 skyapi.onedrive.live.com

只有在天朝才会明目张胆出现这种不要脸的事吧?

安装flash插件

安装flash插件

Debian默认没有安装flash插件,遇到要求flash的网站基本上就是很头疼的一件事。每次都会提示安装flash插件,然后每次都是没有找到,需要手工安装。去到adobe公司的网站,有多种格式的安装包,需要下载tar.gz格式的安装包进行安装。

下载后解压缩,假设解压到/tmp/flash目录下。按照其中readme文件的说明,将.so文件以及/usr目录下的文件拷贝到相应的目录下即可。例如对于firefox,按照以下命令操作即可:

cp libflashplayer.so /usr/lib/mozilla/plugins/
cp -r usr/* /usr

完成后重启firefox即可。

在做梦吗?

在做梦吗?

最近实在是受够了。网络被TM地封得没法用,看看下面随便ping一下的结果:

 数据包: 已发送 = 246,已接收 = 170,丢失 = 76 (30% 丢失),
往返行程的估计时间(以毫秒为单位):
 最短 = 301ms,最长 = 1520ms,平均 = 331ms

纯技术网站都封,创个屁新啊!大家都去做梦好了!!

大户型路由器

大户型路由器

第一次听到这么个说法,感觉很新奇。于是进一步了解了详情。新闻链接请点击这里

所谓大户型路由器就是信号超级强,以至于隔着几层楼都能有极好的信号。周老板兴致勃勃地说:在我家三楼别墅都能收到信号哟!

差点笑喷!大哥,路由器信号加强了,笔记本、手机等终端的信号怎么解决啊?路由器怎么收三层楼上各类终端wifi信号啊?难不成将笔记本或者手机也改成大户型笔记本、大户型手机?

不是周老板忽悠大家,就是有钱任性被人给忽悠了。

XP遗留软件的新选择

XP遗留软件的新选择

收到一位印度朋友的email,特意感谢我们的软件。他是在一个奇怪的场景中运行MSS:系统是Ubuntu14.04,通过Wine运行MSS。我感觉很好奇,因此和这位朋友聊了聊,内心颇为感慨。

这位印度朋友在一家生产工业控制类产品的公司工作(从公司名字看,貌似和西门子有一定联系),他在windows XP上搭建了一系列软件,有自动控制的、有远程访问的、有各类服务器软件,包括PBX软件。不过以前是采用Asterisk Now做PBX。微软不再为XP提供服务后,他们开始寻找替代方案,并着手将上述各类软件转移到Ubuntu系统,通过Wine来运行。

毫无疑问,wine是个活跃的社区,因此基本可以放心在未来的一段时间内能继续使用现有的XP系统的软件。移植过程很顺利,然而在Astersk Now上被卡住了。这个软件居然没法在wine上运行,而且项目本身似乎已经很久没更新了。他们花了很长时间尝试其他各类软件,都有各种各样的问题,直到运行miniSIPServer,一切都很顺利,系统很稳定。因此特意写了email来表示感谢。

首先让我感慨的是,有人因为软件好用写邮件表达感谢。

其次感慨的就是,印度朋友居然都已经非常尊重软件版权以及软件开发者了。我们国家的做法是先臭骂一顿微软垄断,然后屁颠屁颠地装个360,或者下个盗版的win7/8接着用。

印象中,我还没听说国内有谁采用wine来维护遗留系统。这无疑是个很好的想法,非常值得肯定。如果您有类似的遗留系统要维护,不妨也试试wine。同时我也想向wine开发团队致敬!有兴趣的话您可以访问其官方网站进一步了解:

https://www.winehq.org/

统计代码行

统计代码行

在Debian系统中可以很轻松就统计出代码行,无需另外安装软件,默认的就可以。例如,可以使用下述命令统计当前目录及子目录下cpp文件代码行数:

find . -name *.cpp | xargs wc -l

今天稍微统计了一下MSS的cpp代码行,居然已经突破10万行,突然之间有些时光的恍惚感。

Debian7只识别出一个CPU

Debian7只识别出一个CPU

昨天无意间进入T410笔记本的BIOS设置,惊讶地发现居然支持CPU虚拟化,只是默认关闭了。打开设置后启动系统,进入VirtualBox,果然可以对每个实例设置多CPU、PAE以及APIC等。

修改上述设置,增加了一个CPU,启动Debian,居然还是只识别出一个CPU。貌似vbox没有起作用。纳闷之下,同样修改了另一个ubuntu实例的设置,启动后能正常识别两个CPU。因此判断还是Debian实例有问题。简单google了一下,貌似是内核需要启动SMP(Symmetric Multi-Processors)功能。

进入Debian后做了一点检查,原来默认采用的内核是image-486,非常保守。重新安装pae内核,即可启动SMP功能,识别出多个CPU。命令很简单:

apt-get install linux-image-686-pae

安装完后,重启debian实例即可。如果主机是windows系统,则可能还需要重新安装virtualbox-guest-dkms,执行以下命令即可:

apt-get remove virtualbox-guest-dkms
apt-get install linux-headers-686-pae
apt-get install virtualbox-guest-dkms
香港大学生要求重启南京条约?!

香港大学生要求重启南京条约?!

来自新浪的新闻链接,点击此处

让人非常惊讶,甚至震惊。香港大学生对中国的认识和理解偏差实在是到了让人难以理解的地步。对中国和英国关系的理解还停留在清朝?这是脑袋被驴给踢了吗?

新自贸区

新自贸区

早上看新闻,貌似要在深圳前海开新自贸区。这个消息还是比较吸引人,尤其是我离前海还是比较近的。

希望深圳这个自贸区能有些不同,能有些让普通老百姓实实在在感受到的进步。对比之下是上海的自贸区,发展到现在,广而告之的成就似乎是以下几点:

(1)游戏机终于可以进来了。

(2)上海老百姓能在自贸区内买到便宜的海鲜产品。

(3)豪车可以直接进来了。

(4)貌似海淘海外产品要便宜一些了。

然后就没有了。上海自贸区到底是干吗的?当初创立时,香港人很紧张,我觉得现在港胞们可以长舒一口气了。