基于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 相关文章推荐
jQuery 工具函数学习资料
Apr 29 Javascript
基于JQuery的动态删除Table表格的行和列的代码
May 12 Javascript
JavaScript对象之深度克隆介绍
Dec 08 Javascript
JavaScript的事件代理和委托实例分析
Mar 25 Javascript
Angualrjs 表单验证的两种方式(失去焦点验证和点击提交验证)
May 09 Javascript
JS实现按钮控制计时开始和停止功能
Jul 27 Javascript
基于node搭建服务器,写接口,调接口,跨域的实例
May 13 Javascript
用npm-run实现自动化任务的方法示例
Jan 14 Javascript
Node.js系列之安装配置与基本使用(1)
Aug 30 Javascript
Vue执行方法,方法获取data值,设置data值,方法传值操作
Aug 05 Javascript
基于vuex实现购物车功能
Jan 10 Vue.js
vue项目支付功能代码详解
Feb 18 Vue.js
用方法封装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+Html+缓存
2006/11/25 PHP
php生成网页桌面快捷方式
2017/05/05 PHP
浅析php如何实现爬取数据原理
2018/09/27 PHP
jQuery实现的立体文字渐变效果
2010/05/17 Javascript
jQuery实现带滚动线条导航效果的方法
2015/01/30 Javascript
浅谈js中的延迟执行和定时执行
2016/05/31 Javascript
JS制作图形验证码实现代码
2020/10/19 Javascript
js实现右键自定义菜单
2016/12/03 Javascript
JavaScript利用Date实现简单的倒计时实例
2017/01/12 Javascript
不到200行 JavaScript 代码实现富文本编辑器的方法
2018/01/03 Javascript
NodeJs操作MongoDB教程之分页功能以及常见问题
2019/04/09 NodeJs
javascript中undefined的本质解析
2019/07/31 Javascript
原生js+canvas实现下雪效果
2020/08/02 Javascript
vue项目配置同一局域网可使用ip访问的操作
2020/10/23 Javascript
[03:08]迎霜节狂欢!2018年迎霜节珍藏Ⅰ一览
2018/12/25 DOTA
python清除字符串里非字母字符的方法
2015/07/02 Python
浅谈Python类的__getitem__和__setitem__特殊方法
2016/12/25 Python
python实现嵌套列表平铺的两种方法
2018/11/08 Python
Python利用itchat库向好友或者公众号发消息的实例
2019/02/21 Python
如何利用Anaconda配置简单的Python环境
2019/06/24 Python
快速解决jupyter启动卡死的问题
2020/04/10 Python
在ipython notebook中使用argparse方式
2020/04/20 Python
VScode连接远程服务器上的jupyter notebook的实现
2020/04/23 Python
时尚的CSS3进度条效果
2012/02/22 HTML / CSS
PUMA澳大利亚官方网站:德国运动品牌
2018/10/19 全球购物
北卡罗来纳州豪华家具和家居装饰店:Carolina Rustica
2018/10/30 全球购物
LUISAVIAROMA中国官网:时尚奢侈品牌购物网站
2020/11/01 全球购物
养殖行业的创业计划书
2014/01/05 职场文书
母亲节感恩寄语
2014/02/21 职场文书
艾滋病宣传活动总结
2014/05/08 职场文书
汽车检测与维修专业求职信
2014/07/04 职场文书
村级四风对照检查材料
2014/08/24 职场文书
社区务虚会发言材料
2014/10/20 职场文书
六年级语文下册教学计划
2015/01/22 职场文书
学校教师师德师风承诺书
2015/04/28 职场文书
公司开业的祝贺语大全(60条)
2019/07/05 职场文书