TCP的半开连接

项目里面要测试平板终端的关机功能,所以需要我服务器接收发送端的关机命令,然后转发至接收端。因为考虑到方便测试,所以平板发过来的命令是‘重启’,不然每一台都要人工去开机很麻烦,重启之后各终端再连接服务器,进入app主界面。很简单的一个逻辑,可是在实际测试的时候,却出现了问题,影响了后面程序的逻辑,后来仔细分析原来是TCP的半开连接所导致!以此记录。

Read More

好久不见,mqtt

公司新项目可能会用到推送,于是又重拾了有近1年时间没碰过的mqtt。而对于‘推送’本身,当初在选择实现的时候也是作了几番比较,现简要回顾一下。

一般此类的解决方案网上分为了几类(这里就忽略了pull):

  1. C2DM云端推送功能;
  2. MQTT协议实现Android推送功能;
  3. XMPP协议实现Android推送功能;
  4. 第三方推送平台。

对于第一种,C2DM需要依赖于Google官方提供的C2DM服务器,在国内这个基本不靠谱,放弃。MQTT是一个轻量级的消息发布/订阅协议,也是后来我准备采用的解决方案,实现它的客户端和服务器又丰富。接着是xmpp,该协议较复杂、冗余(基于XML)、费流量、费电,放弃。最后是第三方平台,确实,优点很明显(人家专门做这个,稳定先进),也符合了当前大环境下的web serivce的思想,把不是自己产品的核心功能,靠第三方完成,比如多说。但是,使用第三方会使用人家的服务器,感觉有些地方会受限,而且万一哪天就不免费了呢?

Read More

解决spydroid-ipcamera视频串流的问题

根据项目需求,要实现android端推送视频流,然后在客户端(这里是浏览器)里播放。后面选取的方案是采用Google Code上的一个开源项目:spydroid-ipcamera,它能在Android手机中建立一个精简的HTTP Server和RTSP Server。这跟以往的如需要类似red5流媒体服务器中转的解决方案不一样,它是在推送端直接建立服务器,让需要显示的客户端(浏览器)去连接它。

Read More

判断对象内容是否为空

如题所说的判断对象为空指的是其里面是否有其属性和对应的值,而不是像以前普通的判断非空方法,如下:

1
2
3
4
5
6
7
8
var x;
if (typeOf(x) == "undefined")
if (typeOf(x) != "object")
if (!x)

//亦或是下面这种
if(x === null)
if(x === '')

现在的情况是x是一个已经定义了的对象,但里面没有任何属性,所以如果再向上面的那些判断方式的话,是会出问题的,可以参考下面的方式:

1
2
3
4
5
6
7
8
9
10
11
12
13
var voteObject = {"ds":1};
//var voteObject = {};
var hasProp;

for (var prop in voteObject){
hasProp = true;
break;
}
if (hasProp){
console.log('对象里有属性');
}else{
console.error('对象里面为空');
}

Read More