基于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 apply/call/caller/callee/bind使用方法与区别分析
Oct 28 Javascript
两种方法实现在HTML页面加载完毕后运行某个js
Jun 16 Javascript
JavaScript获取某年某月的最后一天附截图
Jun 23 Javascript
jQuery添加options点击事件并传值实例代码
May 18 Javascript
jQuery复制节点用法示例(clone方法)
Sep 08 Javascript
JavaScript仿网易选项卡制作代码
Oct 06 Javascript
详解Angular 4 表单快速入门
Jun 05 Javascript
JS实现的倒计时恢复按钮点击功能【可用于协议阅读倒计时】
Apr 19 Javascript
详解vue项目中使用token的身份验证的简单实践
Mar 08 Javascript
解决Idea、WebStorm下使用Vue cli脚手架项目无法使用Webpack别名的问题
Oct 11 Javascript
vue实现商品列表的添加删除实例讲解
May 14 Javascript
利用js实现简易红绿灯
Oct 15 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环境配置 php5 MySQL5 apache2 phpmyadmin安装与配置图文教程
2007/03/16 PHP
codeigniter教程之上传视频并使用ffmpeg转flv示例
2014/02/13 PHP
深入理解php printf() 输出格式化的字符串
2016/05/23 PHP
PHP使用递归算法无限遍历数组示例
2017/01/13 PHP
thinkPHP实现基于ajax的评论回复功能
2018/06/22 PHP
php生成微信红包数组的方法
2019/09/05 PHP
解决 firefox 不支持 document.all的方法
2007/03/12 Javascript
javascript数组使用调用方法汇总
2007/12/08 Javascript
通过 Dom 方法提高 innerHTML 性能
2008/03/26 Javascript
javascript 通用简单的table选项卡实现
2010/05/07 Javascript
json字符串之间的相互转换示例代码
2014/08/21 Javascript
Node.js的特点和应用场景介绍
2014/11/04 Javascript
jQuery插件Elastislide实现响应式的焦点图无缝滚动切换特效
2015/04/12 Javascript
JavaScript简单修改窗口大小的方法
2015/08/03 Javascript
全面解析Bootstrap图片轮播效果
2015/12/03 Javascript
使用Javascript实现选择下拉菜单互移并排序
2016/02/23 Javascript
使用bootstrap3开发响应式网站
2016/05/12 Javascript
seajs中模块依赖的加载处理实例分析
2017/10/10 Javascript
微信小程序学习笔记之文件上传、下载操作图文详解
2019/03/29 Javascript
JavaScript如何获取一个元素的样式信息
2019/07/29 Javascript
微信小程序之左右布局的实现代码
2019/12/13 Javascript
简单了解常用的JavaScript 库
2020/07/16 Javascript
[01:32]完美世界DOTA2联赛10月29日精彩集锦
2020/10/30 DOTA
编写Python脚本把sqlAlchemy对象转换成dict的教程
2015/05/29 Python
python 换位密码算法的实例详解
2017/07/19 Python
django 多数据库配置教程
2018/05/30 Python
python+Splinter实现12306抢票功能
2018/09/25 Python
Python GUI编程完整示例
2019/04/04 Python
Python操作SQLite/MySQL/LMDB数据库的方法
2019/11/07 Python
Python 私有化操作实例分析
2019/11/21 Python
Python 中的函数装饰器和闭包详解
2021/02/06 Python
大专自我鉴定范文
2013/10/01 职场文书
火锅店营销方案
2014/02/26 职场文书
艺术节主持词
2014/04/02 职场文书
银行爱岗敬业演讲稿
2014/05/05 职场文书
Python 使用dict实现switch的操作
2021/04/07 Python