基于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 相关文章推荐
Google Map API更新实现用户自定义标注坐标
Jul 29 Javascript
jqPlot 基于jquery的画图插件
Apr 26 Javascript
原生js ActiveXObject获取execl里面的值
Nov 01 Javascript
JSON与String互转的实现方法(Javascript)
Sep 27 Javascript
BootStrap的select2既可以查询又可以输入的实现代码
Feb 17 Javascript
用JavaScript和jQuery实现瀑布流
Mar 19 Javascript
cocos creator Touch事件应用(触控选择多个子节点的实例)
Sep 10 Javascript
微信小程序实现列表下拉刷新上拉加载
Jul 29 Javascript
使用Vue制作图片轮播组件思路详解
Mar 21 Javascript
JavaScript之Blob对象类型的具体使用方法
Nov 29 Javascript
vue项目中监听手机物理返回键的实现
Jan 18 Javascript
TypeScript魔法堂之枚举的超实用手册
Oct 29 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在window iis的莫名问题的测试方法
2013/05/14 PHP
php源代码安装常见错误与解决办法分享
2013/05/28 PHP
你可能不知道PHP get_meta_tags()函数
2014/05/12 PHP
Yii获取当前url和域名的方法
2015/06/08 PHP
JavaScript delete 属性的使用
2009/10/08 Javascript
JS实现将人民币金额转换为大写的示例代码
2014/02/13 Javascript
jQuery实现Div拖动+键盘控制综合效果的方法
2015/03/10 Javascript
jQuery寻找n以内完全数的方法
2015/06/24 Javascript
利用imgareaselect辅助后台实现图片上传裁剪
2017/03/02 Javascript
JS和canvas实现俄罗斯方块
2017/03/14 Javascript
angular中实现控制器之间传递参数的方式
2017/04/24 Javascript
Vue组件开发技巧总结
2018/03/04 Javascript
Vue2.0 实现移动端图片上传功能
2018/05/30 Javascript
微信小程序局部刷新触发整页刷新效果的实现代码
2018/11/21 Javascript
35个最好用的Vue开源库(史上最全)
2019/01/03 Javascript
详解JavaScript作用域和作用域链
2019/03/19 Javascript
微信小程序-form表单提交代码实例
2019/04/29 Javascript
[07:43]《辉夜杯》公开赛晋级外卡赛战队—TRG训练生活探秘
2015/12/11 DOTA
[02:09]2018DOTA2亚洲邀请赛TNC赛前采访
2018/04/04 DOTA
Python数据拟合与广义线性回归算法学习
2017/12/22 Python
python 实时得到cpu和内存的使用情况方法
2018/06/11 Python
django用户登录和注销的实现方法
2018/07/16 Python
Python设计模式之模板方法模式实例详解
2019/01/17 Python
pandas DataFrame创建方法的方式
2019/08/02 Python
使用tensorflow DataSet实现高效加载变长文本输入
2020/01/20 Python
10个python3常用排序算法详细说明与实例(快速排序,冒泡排序,桶排序,基数排序,堆排序,希尔排序,归并排序,计数排序)
2020/03/17 Python
python实现手势识别的示例(入门)
2020/04/15 Python
用ldap作为django后端用户登录验证的实现
2020/12/07 Python
用python对excel查重
2020/12/07 Python
阿里巴巴的Oracle DBA笔试题答案-SQL tuning类
2016/04/03 面试题
精通CAD能手自荐书
2014/01/31 职场文书
C++程序员求职信
2014/05/07 职场文书
大三学生学年自我鉴定
2014/09/12 职场文书
建筑安全员岗位职责
2015/02/15 职场文书
2015年九一八事变纪念活动实施方案
2015/05/06 职场文书
庆祝教师节新闻稿
2015/07/17 职场文书