基于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 相关文章推荐
控制打印时页眉角的代码
Feb 08 Javascript
extjs 3.31 TreeGrid实现静态页面加载json到TreeGrid里面
Apr 02 Javascript
jquery中load方法的用法及注意事项说明
Feb 22 Javascript
页面js遇到乱码问题的解决方法是和无法转码的情况
Apr 30 Javascript
基于jQuery实现网页进度显示插件
Mar 04 Javascript
jQuery中animate用法实例分析
Mar 09 Javascript
在javascript中随机数 math random如何生成指定范围数值的随机数
Oct 21 Javascript
javascript之Boolean类型对象
Jun 07 Javascript
Vue.js每天必学之内部响应式原理探究
Sep 07 Javascript
JS获取多维数组中相同键的值实现方法示例
Jan 06 Javascript
ES6基础之 Promise 对象用法实例详解
Aug 22 Javascript
详解vue父子组件状态同步的最佳方式
Sep 10 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/06/06 PHP
PHP 只允许指定IP访问(允许*号通配符过滤IP)
2014/07/08 PHP
linux下为php添加iconv模块的方法
2016/02/28 PHP
PHP浮点数的一个常见问题
2016/03/10 PHP
Symfony2联合查询实现方法
2016/03/18 PHP
如何直接访问php实例对象中的private属性详解
2017/10/12 PHP
PHP安装BCMath扩展的方法
2019/02/13 PHP
PHP解决高并发的优化方案实例
2020/12/10 PHP
理解Javascript_15_作用域分配与变量访问规则,再送个闭包
2010/10/20 Javascript
JS的事件绑定深入认识
2014/06/26 Javascript
JavaScript基本数据类型及值类型和引用类型
2015/08/25 Javascript
新手学习前端之js模仿淘宝主页网站
2016/10/31 Javascript
JavaScript闭包_动力节点Java学院整理
2017/06/27 Javascript
解决vue组件中使用v-for出现告警问题及v for指令介绍
2017/11/11 Javascript
vue.js中toast用法及使用toast弹框的实例代码
2018/08/27 Javascript
详解JavaScript 为什么要有 Symbol 类型?
2019/04/03 Javascript
vue+element使用动态加载路由方式实现三级菜单页面显示的操作
2020/08/04 Javascript
[01:12](回顾)DOTA2国际邀请赛,全世界DOTAer的盛宴
2014/07/01 DOTA
python获取从命令行输入数字的方法
2015/04/29 Python
python中随机函数random用法实例
2015/04/30 Python
python中WSGI是什么,Python应用WSGI详解
2017/11/24 Python
python集合比较(交集,并集,差集)方法详解
2018/09/13 Python
python3实现指定目录下文件sha256及文件大小统计
2019/02/25 Python
python异步实现定时任务和周期任务的方法
2019/06/29 Python
Django中的用户身份验证示例详解
2019/08/07 Python
Python基于Tensor FLow的图像处理操作详解
2020/01/15 Python
Python递归函数特点及原理解析
2020/03/04 Python
使用数据结构给女朋友写个Html5走迷宫游戏
2019/11/26 HTML / CSS
GNC健安喜美国官网:美国第一营养品牌
2016/07/22 全球购物
Araks官网:纽约内衣品牌
2020/10/15 全球购物
JSP和EJB可以共享HttpSession么?EJB里面可以改变session里面的内容
2013/06/05 面试题
生日寄语大全
2014/04/08 职场文书
入党自传范文2015
2015/06/26 职场文书
大学军训通讯稿
2015/07/18 职场文书
css3新特性的应用示例分析
2022/03/16 HTML / CSS
【海涛DOTA解说】EVE女子战队独家录像加ZSMJ神牛两连发
2022/04/01 DOTA