基于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 解析多维的Json数据格式
Nov 02 Javascript
不用构造函数(Constructor)new关键字也能实现JavaScript的面向对象
Jan 11 Javascript
jQuery替换textarea中换行的方法
Jun 10 Javascript
轻松掌握JavaScript策略模式
Aug 25 Javascript
利用n工具轻松管理Node.js的版本
Apr 21 Javascript
AugularJS从入门到实践(必看篇)
Jul 10 Javascript
bootstrap时间插件daterangepicker使用详解
Oct 19 Javascript
微信小程序实现跑马灯效果完整代码(附效果图)
May 30 Javascript
深入理解JavaScript的async/await
Aug 05 Javascript
vue实现键盘输入支付密码功能
Aug 18 Javascript
详解JavaScript添加给定的标签选项
Sep 17 Javascript
微信小程序使用前置摄像头拍照
Oct 22 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新增记录ID值的3种方法
2014/06/24 PHP
Yii使用find findAll查找出指定字段的实现方法
2014/09/05 PHP
php+mysqli使用预处理技术进行数据库查询的方法
2015/01/28 PHP
thinkphp 字母函数详解T/I/N/D/M/A/R/U
2017/04/03 PHP
用javascript实现的图片马赛克后显示并切换加文字功能
2007/04/21 Javascript
jQuery 方法大全方便学习参考
2010/02/25 Javascript
改进UCHOME的记录发布,增强可访问性用户体验
2011/01/17 Javascript
jquery中文乱码的多种解决方法
2013/06/21 Javascript
js判断元素是否隐藏的方法
2014/06/09 Javascript
javascript数据类型示例分享
2015/01/19 Javascript
jQuery拖拽插件gridster使用指南
2015/04/21 Javascript
JS实现一个简单的日历
2017/02/22 Javascript
nodejs接入阿里大鱼短信验证码的方法
2017/07/10 NodeJs
Bootstrap导航菜单点击后无法自动添加active的处理方法
2018/08/10 Javascript
微信小程序用户位置权限的获取方法(拒绝后提醒)
2018/11/15 Javascript
JavaScript HTML DOM元素 节点操作汇总
2019/07/29 Javascript
jQuery实现日历效果
2020/09/11 jQuery
[02:29]DOTA2英雄基础教程 陈
2013/12/17 DOTA
[36:37]2014 DOTA2华西杯精英邀请赛5 24 VG VS iG
2014/05/25 DOTA
Windows系统下多版本pip的共存问题详解
2017/10/10 Python
flask + pymysql操作Mysql数据库的实例
2017/11/13 Python
python交互式图形编程实例(一)
2017/11/17 Python
django2+uwsgi+nginx上线部署到服务器Ubuntu16.04
2018/06/26 Python
Python 生成 -1~1 之间的随机数矩阵方法
2018/08/04 Python
实例讲解Python脚本成为Windows中运行的exe文件
2019/01/24 Python
python求最大值,不使用内置函数的实现方法
2019/07/09 Python
Python人工智能之路 之PyAudio 实现录音 自动化交互实现问答
2019/08/13 Python
Python实现代码块儿折叠
2020/04/15 Python
matplotlib之多边形选区(PolygonSelector)的使用
2021/02/24 Python
HTML5+CSS3实例 :canvas 模拟实现电子彩票刮刮乐代码
2016/12/30 HTML / CSS
什么是TCP/IP
2014/07/27 面试题
大学生职业生涯设计书
2014/01/02 职场文书
2014年幼儿园元旦活动方案
2014/02/13 职场文书
高三学习决心书
2014/03/11 职场文书
旅游专业毕业生自荐书
2014/06/30 职场文书
致毕业季:你如何做好自己的职业生涯规划书?
2019/07/01 职场文书