基于node.js的快速开发透明代理


Posted in Javascript onDecember 25, 2010

但是最近服务器端js的火爆确实因为node.js项目。在velocity china 2010大会Douglas Crockford(Yahoo!)也有一个topic《卷土重来:服务器端JavaScript》提到node.js。关于node.js的详细资料请google.

      node.js的非常大的一个特点就是事件驱动,在开发服务器端服务的时候显得非常方便。昨晚在新浪的@timYang也提到了node.js,估计新浪微博也注意到了它的优点。同时,淘宝最近也表示对node.js有相当的兴趣。参见: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"); 
//用于测试,生产环境需考虑稳定性代码处理

OK,大功告成,只用了一点点的时间,是的,就是这么简单。我们把proxyhost,proxyport=3306改成本机的一个数据上,启动后,我用mysql客户端连8124,就可以连上3306端口的数据库了。

不仅仅是数据库,把proxyhost,proxyport指向到memcached,那么就变成memcached代理了。

通过console.log你可以非常方便的调试协议。也可以用来监视某些不开放的协议。

使用node.js开发网络服务应用程序,比如代理层,httpserver处理非常方便。

刚刚有朋友提出了一个 bug ,谢谢这位朋友。

Javascript 相关文章推荐
在子窗口中关闭父窗口的一句代码
Oct 21 Javascript
Jquery 监视按键,按下回车键触发某方法的实现代码
May 11 Javascript
详解javascript传统方法实现异步校验
Jan 22 Javascript
深入浅析Extjs中store分组功能的使用方法
Apr 20 Javascript
浅谈AngularJS中ng-class的使用方法
Nov 11 Javascript
JS中事件冒泡和事件捕获介绍
Dec 13 Javascript
详解如何在 vue 项目里正确地引用 jquery 和 jquery-ui的插件
Jun 01 jQuery
node 利用进程通信实现Cluster共享内存
Oct 27 Javascript
Javascript实现购物车功能的详细代码
May 08 Javascript
jQuery实现的隔行变色功能【案例】
Feb 18 jQuery
javascript的delete运算符知识点总结
Nov 19 Javascript
React如何创建组件
Jun 27 Javascript
用方法封装javascript的new操作符(一)
Dec 25 #Javascript
一些javascript一些题目的解析
Dec 25 #Javascript
javascript字符串拼接的效率问题
Dec 25 #Javascript
原生javascript获取元素样式属性值的方法
Dec 25 #Javascript
javascript中使用replaceAll()函数实现字符替换的方法
Dec 25 #Javascript
Javascript动态绑定事件的简单实现代码
Dec 25 #Javascript
浅析javascript闭包 实例分析
Dec 25 #Javascript
You might like
PHP实现加强版加密解密类实例
2015/07/29 PHP
php实现word转html的方法
2016/01/22 PHP
PHP单链表的实现代码
2016/07/05 PHP
yii2控制器Controller Ajax操作示例
2016/07/23 PHP
php使用curl详细解析及问题汇总
2016/08/11 PHP
PHP实现链表的定义与反转功能示例
2018/06/09 PHP
JavaScript 对Cookie 操作的封装小结
2009/12/31 Javascript
IE之动态添加DOM节点触发window.resize事件
2010/07/27 Javascript
动感效果的TAB选项卡jquery 插件
2011/07/09 Javascript
jquery ajax同步异步的执行最终解决方案
2013/04/26 Javascript
javascript正则表达式基础知识入门
2015/04/20 Javascript
JavaScript中的bold()方法使用详解
2015/06/08 Javascript
JS拖拽插件实现步骤
2015/08/03 Javascript
node.js入门实例helloworld详解
2015/12/23 Javascript
JSONP和批量操作功能的实现方法
2016/08/21 Javascript
BootStrap 超链接变按钮的实现方法
2016/09/25 Javascript
Angular 常用指令实例总结整理
2016/12/13 Javascript
Js利用console计算代码运行时间的方法示例
2017/09/24 Javascript
AngularJS中控制器函数的定义与使用方法示例
2017/10/10 Javascript
详解使用jest对vue项目进行单元测试
2018/09/07 Javascript
js计算两个日期间的天数月的实例代码
2018/09/20 Javascript
jQuery实现动态添加和删除input框实例代码
2019/03/26 jQuery
js cavans实现静态滚动弹幕
2020/05/21 Javascript
[41:08]2014 DOTA2国际邀请赛中国区预选赛 HGT VS NE
2014/05/22 DOTA
python如何读写json数据
2018/03/21 Python
Python基于win32ui模块创建弹出式菜单示例
2018/05/09 Python
英国运动风奢侈品购物网站:Maison De Fashion
2020/08/28 全球购物
2014年乡镇植树节活动方案
2014/02/28 职场文书
个人廉洁自律承诺书
2014/03/27 职场文书
租车协议书范本
2014/04/22 职场文书
活着观后感
2015/06/03 职场文书
课改心得体会范文
2016/01/25 职场文书
《槐乡的孩子》教学反思
2016/02/20 职场文书
总结Python常用的魔法方法
2021/05/25 Python
python 实现体质指数BMI计算
2021/05/26 Python
Python可视化学习之seaborn绘制矩阵图详解
2022/02/24 Python