Firefox OS上实现HTTP Web Server

mozilla期望Firefox OS未来可以更多地支持P2P,在offline P2P研究中,蓝牙,NFC或WIFI这些技术仅仅提供了手机连接的方法,实际上还要在APP上制定协议进行数据的收发。然后自然而然想到用HTTP。实现offline P2P连接,client端收发数据需要的条件目前已经都具备了,还需要的就是web server。而且这个HTTP server最好能作为标准的WebAPI,直接连接Gecko。

navigator.mozTCPSocket
APP有访问TCP或UDP socket的接口, 因为只处理HTTP,所以需要用TCP sockets,通过navigator.mozTCPSocket调用TCPSocket API的方式目前还只适用于“privileged”类型的APP,APP的tcp-socket permission定义如下:
"type": "privileged",
"permissions": {
  "tcp-socket": {}
},

为响应HTTP请求,创建一个TCPSocket监听已知端口,例如8080
var socket = navigator.mozTCPSocket.listen(8080);
接受到HTTP请求后,通过onconnect handler处理接收的TCPSocket对象,之后收到HTTP请求的data,可以调用ondata handler处理。
socket.onconnect = function(connection) {
  connection.ondata = function(evt) {
    console.log(evt.data);
  };
};
通常每个HTTP request都会引起一个单独的ondata handler调用,但有时HTTP request负载非常大,比如文件上传,每次只有buffer填充完毕才能触发ondata handler。
为了回应HTTP request,从onconnect handler收到数据,需要发送响应给TCPSocket。
connection.ondata = function(evt) {
  var response = 'HTTP/1.1 200 OK\r\n';    //对Hello world的回应,应该包含符合HTTP/1.1的状态行
  var body = 'Hello World!';        
 
  response += 'Content-Length: ' + body.length + '\r\n';
  response += '\r\n';
  response += body;
 
  connection.send(response);
  connection.close();
};

  Firefox Web Server
只需对上例里的static “Hello World!” response进行一下扩展,比如解析一下URL从HTTP request提取参数,从而对dynamic content作出响应,上面已经实现了基本的HTTP server功能,直接在Firefox OS app使用即可。
FxOS Web Server可以解析HTTP request的所有内容,处理不同的content types,比如application/x-www-form-urlencoded,multipart/form-data。也可以处理文件上传,图片和视频等二进制数据。

可以在GitHub上下载FxOS Web Server相关的源码,或者直接在浏览器下载最新版本。
bower install justindarc/fxos-web-server --save

下载之后,使用时可以在app中用<script>标签或类似RequireJS的module loader包含这个dist/fxos-web-server.js。


来源:https://hacks.mozilla.org/2015/02/embedding-an-http-web-server-in-firefox-os/


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值