基于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 相关文章推荐
javascript编程起步(第四课)
Feb 27 Javascript
关于JAVASCRIPT urldecode URL解码的问题
Jan 08 Javascript
jquery插件开发注意事项小结
Jun 04 Javascript
js 自动播放的实例代码
Nov 19 Javascript
Javascript排序算法之计数排序的实例
Apr 05 Javascript
javascript中定义类的方法详解
Feb 10 Javascript
javascript框架设计之种子模块
Jun 23 Javascript
jquery获取所有选中的checkbox实现代码
May 26 Javascript
js自制图片放大镜功能
Jan 24 Javascript
elemetUi 组件--el-upload实现上传Excel文件的实例
Oct 27 Javascript
JS通过识别id、value值对checkbox设置选中状态
Feb 19 Javascript
解决vue打包 npm run build-test突然不动了的问题
Nov 13 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中常量,变量的作用域和生存周期
2013/08/10 PHP
PHP PDO fetch 模式各种参数的输出结果一览
2015/01/07 PHP
最新制作ThinkPHP3.2.3完全开发手册
2015/11/23 PHP
PHP文件上传之多文件上传的实现思路
2016/01/27 PHP
ThinkPHP中Widget扩展的两种写法及调用方法详解
2017/05/04 PHP
PHP中md5()函数的用法讲解
2019/03/30 PHP
基于Jquery的$.cookie()实现跨越页面tabs导航实现代码
2011/03/03 Javascript
jquery下checked取值问题的解决方法
2012/08/09 Javascript
javascript替换已有元素replaceChild()使用介绍
2014/04/03 Javascript
Javascript中浮点数相乘的一个解决方法
2014/06/03 Javascript
Javascript常用字符串判断函数代码分享
2014/12/08 Javascript
jQuery选择器源码解读(五):tokenize的解析过程
2015/03/31 Javascript
jQuery+JSON实现AJAX二级联动实例分析
2015/12/18 Javascript
AngularJS ng-bind-template 指令详解
2016/07/30 Javascript
Angular 4.X开发实践中的踩坑小结
2017/07/04 Javascript
浅谈一个webpack构建速度优化误区
2019/06/24 Javascript
vue计算属性+vue中class与style绑定(推荐)
2020/03/30 Javascript
python统计文本字符串里单词出现频率的方法
2015/05/26 Python
python中实现精确的浮点数运算详解
2017/11/02 Python
详解python项目实战:模拟登陆CSDN
2019/04/04 Python
python 3.7.4 安装 opencv的教程
2019/10/10 Python
Python使用Opencv实现图像特征检测与匹配的方法
2019/10/30 Python
使用IDLE的Python shell窗口实例详解
2019/11/19 Python
Python使用graphviz画流程图过程解析
2020/03/31 Python
Django如何在不停机的情况下创建索引
2020/08/02 Python
利用python 读写csv文件
2020/09/10 Python
python3中布局背景颜色代码分析
2020/12/01 Python
全球知名的珠宝首饰品牌:Kay Jewelers
2018/02/11 全球购物
中班下学期个人工作总结
2015/02/12 职场文书
2015年销售部工作总结范文
2015/04/27 职场文书
月考总结与反思
2015/10/22 职场文书
详解CocosCreator项目结构机制
2021/04/14 Javascript
PostgreSQL通过oracle_fdw访问Oracle数据的实现步骤
2021/05/21 PostgreSQL
pandas中DataFrame重置索引的几种方法
2021/05/24 Python
Opencv中cv2.floodFill算法的使用
2021/06/18 Python
SpringBoot+VUE实现数据表格的实战
2021/08/02 Java/Android