基于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 mapreduce工作原理简析
Nov 25 Javascript
jquery 获取表单元素里面的值示例代码
Jul 28 Javascript
一个JavaScript用逗号分割字符串实例
Sep 22 Javascript
angularjs指令中的compile与link函数详解
Dec 06 Javascript
Jquery+ajax+JAVA(servlet)实现下拉菜单异步取值
Mar 23 Javascript
ReactNative页面跳转实例代码
Sep 27 Javascript
原生和jQuery的ajax用法详解
Jan 23 Javascript
node中的密码安全(加密)
Sep 17 Javascript
javascript实现计算器功能
Mar 30 Javascript
vue过滤器实现日期格式化的案例分析
Jul 02 Javascript
jQuery实现回到顶部效果
Oct 19 jQuery
JSON stringify方法原理及实例解析
Oct 23 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中MVC模式的模板引擎开发经验分享
2011/03/23 PHP
discuz加密解密函数使用方法和中文注释
2014/01/21 PHP
PHP上传文件时自动分配路径的方法
2015/01/09 PHP
php实现上传图片保存到数据库的方法
2015/02/11 PHP
php动态函数调用方法
2015/05/21 PHP
RR vs IO BO3 第一场2.13
2021/03/10 DOTA
JQuery datepicker 使用方法
2011/05/20 Javascript
悬浮广告方法日常收集整理
2016/03/18 Javascript
jQuery实现模糊查询的方法分析
2018/05/10 jQuery
从零开始搭建vue移动端项目到上线的步骤
2018/10/15 Javascript
浅谈HTTP 缓存的那些事儿
2018/10/17 Javascript
30分钟快速实现小程序语音识别功能
2018/11/27 Javascript
Vue和React组件之间的传值方式详解
2019/01/31 Javascript
JavaScript常用工具方法封装
2019/02/12 Javascript
详解VUE中的插值( Interpolation)语法
2020/10/18 Javascript
如何利用nodejs自动定时发送邮件提醒(超实用)
2020/12/01 NodeJs
[02:38]DOTA2英雄基础教程 噬魂鬼
2014/01/03 DOTA
Python函数式编程指南(二):从函数开始
2015/06/24 Python
Python 基于Twisted框架的文件夹网络传输源码
2016/08/28 Python
关于python的list相关知识(推荐)
2017/08/30 Python
python使用正则表达式的search()函数实现指定位置搜索功能
2017/11/10 Python
基于Python log 的正确打开方式
2018/04/28 Python
利用python-pypcap抓取带VLAN标签的数据包方法
2019/07/23 Python
浅谈Python_Openpyxl使用(最全总结)
2019/09/05 Python
python将字母转化为数字实例方法
2019/10/04 Python
Python基于pillow库实现生成图片水印
2020/09/14 Python
Django框架安装及项目创建过程解析
2020/09/14 Python
如何用PyPy让你的Python代码运行得更快
2020/12/02 Python
python实现MySQL指定表增量同步数据到clickhouse的脚本
2021/02/26 Python
使用phonegap获取设备的一些信息方法
2017/03/31 HTML / CSS
祖国在我心中演讲稿
2014/01/15 职场文书
2014年村支部书记四风对照检查材料思想汇报
2014/10/02 职场文书
2015年妇委会工作总结
2015/05/22 职场文书
php中配置文件保存修改操作 如config.php文件的读取修改等操作
2021/05/12 PHP
css3中transform属性实现的4种功能
2021/08/07 HTML / CSS
MySQL批量更新不同表中的数据
2022/05/11 MySQL