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
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/