This commit is contained in:
welefen 2014-03-12 11:28:19 +08:00
parent 3e06e97669
commit aeb2dd4800
6 changed files with 82 additions and 38 deletions

View File

@ -18,4 +18,5 @@ module.exports = {
Think: THINK_LIB_PATH + "/Core/Think.js",
Valid: THINK_LIB_PATH + "/Core/Valid.js",
View: THINK_LIB_PATH + "/Core/View.js",
WebSocket: THINK_LIB_PATH + "/Core/WebSocket.js",
}

View File

@ -33,6 +33,7 @@ module.exports = {
error_tpl_path: THINK_PATH + "/View/error.html", //错误页模版
error_no_key: "errno", //错误number的key
error_msg_key: "errmsg", //错误消息的key
use_websocket: false, //是否使用websocket
deny_ip: [], //阻止的ip
@ -43,7 +44,7 @@ module.exports = {
session_auto_start: false, //自动启动session
session_id: "thinkjs", //session id
session_type: "File", //session存储类型
session_type: "", //session存储类型, 空为内存还可以为File, Db
session_options: {}, //session的一些选项
session_cookie_sign: "", //session对应的cookie使用签名,如果使用这里填密钥

View File

@ -4,6 +4,7 @@
*/
var cluster = require("cluster");
var fs = require("fs");
var thinkHttp = thinkRequire("Http");
var App = module.exports = Class(function(){
//controller和action的校验正则
@ -142,10 +143,12 @@ App.run = function(){
* @type {Object}
*/
App.mode = {
//命令行模式
cli: function(){
var http = thinkRequire("Http")[APP_MODE](APP_MODE_DATA);
return App.listener(http);
var defaultHttp = thinkHttp.getDefaultHttp(APP_MODE_DATA);
thinkHttp(defaultHttp.req, defaultHttp.res).run(App.listener);
},
//默认模式
_default: function(){
var clusterNums = C('use_cluster');
//不使用cluster
@ -176,15 +179,41 @@ App.mode = {
*/
App.createServer = function(){
var server = require("http").createServer(function (req, res) {
thinkRequire("Http")(req, res).run(App.listener);
thinkHttp(req, res).run(App.listener);
});
var params = [C('port')];
//禁止外网直接通过IP访问
if (C('deny_remote_access_by_ip')) {
params.push("127.0.0.1");
};
App.websocket(server);
server.listen.apply(server, params);
};
/**
* 监听websocket
* @param {[type]} server [description]
* @return {[type]} [description]
*/
App.websocket = function(server){
if (C('use_websocket')) {
//暂时使用该库
var websocket = require('websocket-driver');
server.on("upgrade", function(request, socket, body){
if (!websocket.isWebSocket(request)){
return false;
};
var driver = websocket.http(request);
driver.io.write(body);
socket.pipe(driver.io).pipe(socket);
driver.messages.on('data', function(message) {
message = JSON.parse(message || "{}");
var defaultHttp = thinkRequire("Http").getDefaultHttp();
});
driver.start();
})
};
}
/**
* 监听回调函数
* @param {[type]} http [description]

View File

@ -25,7 +25,7 @@ module.exports = Class(function(){
var method = this.req.method.toLowerCase();
var methods = ["post", "put", "patch"];
if (methods.indexOf(method) > -1) {
this.getData(callback);
this.getPostData(callback);
}else{
callback && callback(this.http);
}
@ -45,7 +45,7 @@ module.exports = Class(function(){
* @param {Function} callback [description]
* @return {[type]} [description]
*/
getData: function(callback){
getPostData: function(callback){
//没有post数据直接回调
if (!this.hasPostData()) {
return callback && callback(this.http);
@ -115,7 +115,7 @@ module.exports = Class(function(){
extend(this.http, req);
//解析url中的参数
var urlInfo = url.parse("//" + req.headers.host + this.req.url, true, true);
var urlInfo = url.parse("//" + (req.headers.host || "127.0.0.1") + this.req.url, true, true);
this.http.pathname = urlInfo.pathname;
//query只记录?后面的参数
this.http.query = urlInfo.query;
@ -232,37 +232,30 @@ module.exports = Class(function(){
}
});
/**
* 命令行下的简易http对象
* @param {[type]} url [description]
* @return {[type]} [description]
* 获取默认的http信息
* @param {[type]} data [description]
* @return {[type]} [description]
*/
module.exports.cli = function(data){
data = data.indexOf('=') > -1 ? querystring.parse(data) : {url: data};
if (data.url.indexOf("/") !== 0) {
data.url = "/" + data.url;
module.exports.getDefaultHttp = function(data){
data = data || {};
if (isString(data)) {
data = data.indexOf('=') > -1 ? querystring.parse(data) : {url: data};
};
//解析url中的参数
var urlInfo = url.parse("//" + (data.host || "127.0.0.1") + data.url, true, true);
var fn = function(){ return ""};
return {
method: data.method || "get",
ip: function(){
return data.ip || "127.0.0.1"
req: {
httpVersion: "1.1",
method: data.method || "GET",
url: data.url || "",
headers: data.headers || {},
connection: {
remoteAddress: data.ip || "127.0.0.1"
}
},
pathname: urlInfo.pathname,
query: urlInfo.query,
get: extend({}, urlInfo.query),
host: urlInfo.host,
hostname: urlInfo.hostname,
getHeader: fn,
setHeader: fn,
post: {},
file: {},
cookie: {},
setCookie: fn,
echo: fn,
end: fn,
sendTime: fn,
redirect: fn
res: {
end: fn,
write: fn,
setHeader: fn
}
}
}

View File

@ -34,8 +34,8 @@ var cookie_unsign = function(val, secret){
}
module.exports = Class(function(){
var data = {};
return {
key: "",
cookie: null,
init: function(http){
this.http = http;
@ -69,7 +69,7 @@ module.exports = Class(function(){
* 刷新session
* @return {[type]} [description]
*/
flush: function(){
save: function(){
}
}
@ -100,9 +100,8 @@ module.exports.start = function(http){
http.session_cookie = session_cookie;
var name = C('session_type') + "Session";
var cls = thinkRequire(name)(http);
//session类
http.session = cls;
http.session = thinkRequire(name)(http);
return cookie;
};

21
lib/Lib/Core/WebSocket.js Normal file
View File

@ -0,0 +1,21 @@
var WebSocket = Class(function(){
return {
init: function(request){
this.request = request;
}
}
})
/**
* 是否是websocket请求
* @param {[type]} req [description]
* @return {Boolean} [description]
*/
WebSocket.isWebSocket = function(request){
if (request.method !== 'GET') {
return false;
};
var connection = request.headers.connection || "";
var upgrade = request.headers.upgrade;
return connection.toLowerCase().indexOf('upgrade') > -1 && upgrade.toLowerCase() === 'websocket';
}
module.exports = WebSocket;