基于node.js的快速開發(fā)透明代理
更新時間:2010年12月25日 23:05:40 作者:
服務器端js(Server-Side Javascrpt)很早也就有了,JAVA中也有javascript 的script引擎。
但是最近服務器端js的火爆確實因為node.js項目。在velocity china 2010大會Douglas Crockford(Yahoo!)也有一個topic《卷土重來:服務器端JavaScript》提到node.js。關于node.js的詳細資料請google.
var net = require('net');
var proxyhost="127.0.0.1";//被代理的服務的IP
var proxyport=3306;//被代理的端口
var listenport=8124;//代理端口
net.createServer(function (socket) {
socket.on("connect",function(){
console.log('connected');
try{
var db=net.createConnection(proxyport,proxyhost);
db.on("connect",function(){
console.log("server connected");
socket.on("data", function (data) {
db.write(data);
});
db.on("data",function(data){
console.log(data.toString('utf8',0,data.legnth));
//console.log(data);
socket.write(data);
});
socket.on("close",function(){
console.log("server closed");
db.destroy();
});
});
db.on("error",function(data){
console.log("error:\r\n"+data);
});
db.on("end",function(){
console.log("server closed");
socket.destroy();
});
}catch(err){
console.log(err);
}
});
}).listen(listenport, "0.0.0.0");
//用于測試,生產(chǎn)環(huán)境需考慮穩(wěn)定性代碼處理
OK,大功告成,只用了一點點的時間,是的,就是這么簡單。我們把proxyhost,proxyport=3306改成本機的一個數(shù)據(jù)上,啟動后,我用mysql客戶端連8124,就可以連上3306端口的數(shù)據(jù)庫了。
不僅僅是數(shù)據(jù)庫,把proxyhost,proxyport指向到memcached,那么就變成memcached代理了。
通過console.log你可以非常方便的調試協(xié)議。也可以用來監(jiān)視某些不開放的協(xié)議。
使用node.js開發(fā)網(wǎng)絡服務應用程序,比如代理層,httpserver處理非常方便。
剛剛有朋友提出了一個 bug ,謝謝這位朋友。
node.js的非常大的一個特點就是事件驅動,在開發(fā)服務器端服務的時候顯得非常方便。昨晚在新浪的@timYang也提到了node.js,估計新浪微博也注意到了它的優(yōu)點。同時,淘寶最近也表示對node.js有相當?shù)呐d趣。參見:http://www.tbdata.org/archives/1285 http://www.tbdata.org/archives/1292 ,為了體驗一把,就用node.js寫了一個透明的代理服務層,代碼如下:
復制代碼 代碼如下:
var net = require('net');
var proxyhost="127.0.0.1";//被代理的服務的IP
var proxyport=3306;//被代理的端口
var listenport=8124;//代理端口
net.createServer(function (socket) {
socket.on("connect",function(){
console.log('connected');
try{
var db=net.createConnection(proxyport,proxyhost);
db.on("connect",function(){
console.log("server connected");
socket.on("data", function (data) {
db.write(data);
});
db.on("data",function(data){
console.log(data.toString('utf8',0,data.legnth));
//console.log(data);
socket.write(data);
});
socket.on("close",function(){
console.log("server closed");
db.destroy();
});
});
db.on("error",function(data){
console.log("error:\r\n"+data);
});
db.on("end",function(){
console.log("server closed");
socket.destroy();
});
}catch(err){
console.log(err);
}
});
}).listen(listenport, "0.0.0.0");
//用于測試,生產(chǎn)環(huán)境需考慮穩(wěn)定性代碼處理
OK,大功告成,只用了一點點的時間,是的,就是這么簡單。我們把proxyhost,proxyport=3306改成本機的一個數(shù)據(jù)上,啟動后,我用mysql客戶端連8124,就可以連上3306端口的數(shù)據(jù)庫了。
不僅僅是數(shù)據(jù)庫,把proxyhost,proxyport指向到memcached,那么就變成memcached代理了。
通過console.log你可以非常方便的調試協(xié)議。也可以用來監(jiān)視某些不開放的協(xié)議。
使用node.js開發(fā)網(wǎng)絡服務應用程序,比如代理層,httpserver處理非常方便。
剛剛有朋友提出了一個 bug ,謝謝這位朋友。
相關文章
利用prop-types第三方庫對組件的props中的變量進行類型檢測
本篇文章主要介紹了利用prop-types第三方庫對組件的props中的變量進行類型檢測的相關知識,具有很好的參考價值。下面跟著小編一起來看下吧2017-05-05
JavaScript 拾碎[三] 使用className屬性
Javascript 還可以通過className 屬性靈活的更改一個標簽元素的CSS 類選擇器來實現(xiàn)樣式的變化。2010-10-10

