记录下http的缓存策略

相信很多做过前端或者后台性能优化的童鞋对http缓存机制都有过了解,今天准备复习下这部分的知识。

首先开篇有两个问题抛出,即是,1.什么时候客户端需要使用缓存?2.使用缓存的规则是什么?

第一个问题,客户端请求一个文件,服务器返回的响应头会有两种方式可以判断,首先是cache-control属性值,它除了no-store之外,浏览器都会缓存文件数据,供下次使用。

Read More

应用于广播的解决方案

以前android终端连接服务器的地址都是写在了代码里(不可取)或者配置文件中,当然在平日开发中为了方便,问题当然不大,主要是我们的局域网中服务器的IP地址基本不会改变,要么都是手动设置了IP。但是如果一旦作为产品卖给客户,问题就凸显出来了,因为我们到时候是不清楚客户方的网络情况,不可能到一个地方都去改代码然后打包,这显然是不现实的。

Read More

TCP的粘包问题

TCP粘包这似乎是个老生长谈的问题,想不到还是在项目中给我遇到了。

服务器本来每次收取的就是客户端发送的简短的消息,即发送一次收一次,客户端也并没有频繁请求。不过却在有一次的测试中给报错了,看日志是解析数据出错,我想客户端发送的消息还是以前的,怎么到我这里来就解析出错了呢?不可能是掉包呀!再看解析错误的是什么数据,噢!原来是在后来的程序中我们服务器加上了与客户端的保活连接模块,然而我们在解析的代码里面并没有进一步的判断,而这次收到的数据却是既包含了正常请求数据+keepalive数据,于是就报异常了(话说以前我赶时间,这程序写的真渣…)。

Read More

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