基于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 相关文章推荐
js类中的公有变量和私有变量
Jul 24 Javascript
js 巧妙去除数组中的重复项
Jan 25 Javascript
js处理自己不能定义二维数组的方法详解
Mar 03 Javascript
jquery分页插件jpaginate在IE中不兼容问题
Apr 22 Javascript
js简单的弹出框有关闭按钮
May 05 Javascript
AngularJS的脏检查深入分析
Apr 22 Javascript
vue检测对象和数组的变化分析
Jun 30 Javascript
vue 2.1.3 实时显示当前时间,每秒更新的方法
Sep 16 Javascript
angularJs中json数据转换与本地存储的实例
Oct 08 Javascript
element-ui 的el-button组件中添加自定义颜色和图标的实现方法
Oct 26 Javascript
创建Vue项目以及引入Iview的方法示例
Dec 03 Javascript
微信小程序实现时间戳格式转换
Jul 20 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+MySql编写聊天室
2006/10/09 PHP
PHP数组传递是值传递而非引用传递概念纠正
2013/01/31 PHP
php使浏览器直接下载pdf文件的方法
2013/11/15 PHP
PHP实现图片压缩的两则实例
2014/07/19 PHP
thinkPHP分组后模板无法加载问题解决方法
2016/07/12 PHP
PHP实现数据库的增删查改功能及完整代码
2018/04/18 PHP
PHP7 foreach() 函数修改
2021/03/09 PHP
js 模拟实现类似c#下的hashtable的简单功能代码
2010/01/24 Javascript
js动态给table添加/删除tr的方法
2013/08/02 Javascript
js动态创建、删除表格示例代码
2013/08/07 Javascript
JavaScript中prototype为对象添加属性的误区介绍
2013/10/15 Javascript
JS(JQuery)操作Array的相关方法介绍
2014/02/11 Javascript
JavaScript DOM事件(笔记)
2015/04/08 Javascript
在Node.js应用中读写Redis数据库的简单方法
2015/06/30 Javascript
JS控制表单提交的方法
2015/07/09 Javascript
jQuery实现的漂亮表单效果代码
2015/08/18 Javascript
vue组件父子间通信之综合练习(聊天室)
2017/11/07 Javascript
jQuery中ajax请求后台返回json数据并渲染HTML的方法
2018/08/08 jQuery
vue 实现左右拖拽元素并且不超过他的父元素的宽度
2018/11/30 Javascript
微信小程序结合mock.js实现后台模拟及调试
2019/03/28 Javascript
uploadify插件实现多个图片上传并预览
2019/09/30 Javascript
微信sdk实现禁止微信分享(使用原生php实现)
2019/11/15 Javascript
纯js实现无缝滚动功能代码实例
2020/02/21 Javascript
angular组件间传值测试的方法详解
2020/05/07 Javascript
Nuxt.js 静态资源和打包的操作
2020/11/06 Javascript
Python绘制3d螺旋曲线图实例代码
2017/12/20 Python
火车票抢票python代码公开揭秘!
2018/03/08 Python
关于PyTorch源码解读之torchvision.models
2019/08/17 Python
Python开发企业微信机器人每天定时发消息实例
2020/03/17 Python
捷克家居装饰及图书音像购物网站:Velký košík
2018/04/16 全球购物
Ajax的优点和缺点
2014/11/21 面试题
个人简历自我评价八例
2013/10/31 职场文书
安全施工标语
2014/06/07 职场文书
2014年作风建设心得体会
2014/10/22 职场文书
银行自荐信范文
2015/03/25 职场文书
入党群众意见范文
2015/06/02 职场文书