基于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 相关文章推荐
select组合框option的捕捉实例代码
Sep 30 Javascript
javascript中的继承实例代码
Apr 27 Javascript
JS 去前后空格大全(IE9亲测)
Jul 15 Javascript
多种方式实现JS调用后台方法进行数据交互
Aug 20 Javascript
javascript:void(0)的问题使用探讨
Apr 10 Javascript
图片懒加载插件实例分享(含解析)
Jan 09 Javascript
Angularjs中使用轮播图指令swiper
May 30 Javascript
微信小程序之滚动视图容器的实现方法
Sep 26 Javascript
基于Vue SEO的四种方案(小结)
Jul 01 Javascript
微信小程序判断用户是否需要再次授权获取个人信息
Jul 18 Javascript
浅析vue cli3 封装Svgicon组件正确姿势(推荐)
Apr 27 Javascript
vue如何搭建多页面多系统应用
Jun 17 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
DC宇宙的第一个英雄,堪称动漫史鼻祖,如今成为美国文化的象征
2020/04/09 欧美动漫
一个PHP操作Access类(PHP+ODBC+Access)
2007/01/02 PHP
简单介绍下 PHP5 中引入的 MYSQLI的用途
2007/03/19 PHP
PHP mb_convert_encoding 获取字符串编码类型实现代码
2009/04/26 PHP
php array_push()数组函数:将一个或多个单元压入数组的末尾(入栈)
2011/07/12 PHP
yii上传文件或图片实例
2014/04/01 PHP
在html文件中也可以执行php语句的方法
2015/04/09 PHP
php并发加锁示例
2016/10/17 PHP
jQuery 使用手册(三)
2009/09/23 Javascript
JavaScript CSS修改学习第三章 修改样式表
2010/02/19 Javascript
javascript判断ie浏览器6/7版本加载不同样式表的实现代码
2011/12/26 Javascript
简单的Jquery遮罩层代码实例
2013/11/14 Javascript
Angularjs过滤器使用详解
2016/05/25 Javascript
Express+Nodejs 下的登录拦截实现代码
2017/07/01 NodeJs
解决webpack -p压缩打包react报语法错误的方法
2017/07/03 Javascript
Vue.js组件间通信方式总结【推荐】
2018/11/23 Javascript
vue中tab选项卡的实现思路
2018/11/25 Javascript
Weex开发之WEEX-EROS开发踩坑(小结)
2019/10/16 Javascript
Vue页面切换和a链接的本质区别详解
2019/11/12 Javascript
Vue中keep-alive的两种应用方式
2020/07/15 Javascript
js实现盒子滚动动画效果
2020/08/09 Javascript
js实现弹窗猜数字游戏
2020/11/26 Javascript
Python使用Chrome插件实现爬虫过程图解
2020/06/09 Python
Python Socket TCP双端聊天功能实现过程详解
2020/06/15 Python
美国著名的女性内衣零售商:Frederick’s of Hollywood
2018/02/24 全球购物
哄娃神器4moms商店:美国婴童用品品牌
2019/03/07 全球购物
jQuery treeview树形结构应用
2021/03/24 jQuery
预备党员公开承诺书
2014/05/28 职场文书
银行给客户的感谢信
2015/01/23 职场文书
艺术节开幕词
2015/01/28 职场文书
2015年财务个人工作总结范文
2015/05/22 职场文书
2015年青年教师工作总结
2015/05/25 职场文书
党小组考察意见
2015/06/02 职场文书
广播体操比赛主持词
2015/06/29 职场文书
2016年员工政治思想表现评语
2015/12/02 职场文书
MySQL 用 limit 为什么会影响性能
2021/09/15 MySQL