基于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 相关文章推荐
你的编程语言可以这样做吗?
Sep 07 Javascript
Js 获取当前日期时间及其它操作实现代码
Mar 04 Javascript
javascript appendChild,innerHTML,join性能比较代码
Aug 29 Javascript
jQuery根据纬度经度查看地图处理程序
May 08 Javascript
当鼠标移动到图片上时跟随鼠标显示放大的图片效果
Jun 06 Javascript
js保留两位小数使用toFixed实现
Jul 29 Javascript
常见的javascript跨域通信方法
Dec 31 Javascript
基于JavaScript实现简单的随机抽奖小程序
Jan 05 Javascript
JS正则表达式修饰符中multiline(/m)用法分析
Dec 27 Javascript
vue 内置过滤器的使用总结(附加自定义过滤器)
Dec 11 Javascript
three.js 利用uv和ThreeBSP制作一个快递柜功能
Aug 18 Javascript
vue+elementUI动态增加表单项并添加验证的代码详解
Dec 17 Vue.js
用方法封装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代码
2008/09/10 PHP
对squid中refresh_pattern的一些理解和建议
2009/04/17 PHP
PHP数学运算函数大汇总(经典值得收藏)
2016/04/01 PHP
永不消失的title提示代码
2007/02/15 Javascript
给超链接添加特效鼠标移动展示提示信息且随鼠标移动
2013/10/17 Javascript
js函数内变量的作用域分析
2015/01/12 Javascript
javascript性能优化之DOM交互操作实例分析
2015/12/12 Javascript
Angularjs 实现一个幻灯片示例代码
2016/09/08 Javascript
JavaScript实现汉字转换为拼音的库文件示例
2016/12/22 Javascript
javascript阻止事件冒泡和浏览器的默认行为
2017/01/21 Javascript
Vuejs 用$emit与$on来进行兄弟组件之间的数据传输通信
2017/02/23 Javascript
angular 用拦截器统一处理http请求和响应的方法
2017/06/08 Javascript
Node.js环境下Koa2添加travis ci持续集成工具的方法
2017/06/19 Javascript
vue之数据交互实例代码
2017/06/20 Javascript
JQuery判断正整数整理小结
2017/08/21 jQuery
three.js中3D视野的缩放实现代码
2017/11/16 Javascript
javaScript实现鼠标在文字上悬浮时弹出悬浮层效果
2020/04/12 Javascript
浅谈Vue路由快照实现思路及其问题
2018/06/07 Javascript
解决Vue.js由于延时显示了{{message}}引用界面的问题
2018/08/25 Javascript
jquery多级树形下拉菜单的实例代码
2019/07/09 jQuery
JavaScript实现简单验证码
2020/08/24 Javascript
VUE中setTimeout和setInterval自动销毁案例
2020/09/07 Javascript
js实现贪吃蛇游戏 canvas绘制地图
2020/09/09 Javascript
javascript中call,apply,bind的区别详解
2020/12/11 Javascript
Django中对数据查询结果进行排序的方法
2015/07/17 Python
python numpy 一维数组转变为多维数组的实例
2018/07/02 Python
python 去除txt文本中的空格、数字、特定字母等方法
2018/07/24 Python
Python 获取中文字拼音首个字母的方法
2018/11/28 Python
python 搜索大文件的实例代码
2019/07/08 Python
matlab、python中矩阵的互相导入导出方式
2020/06/01 Python
贝尔帐篷精品店:Bell Tent Boutique
2019/06/12 全球购物
代领毕业证委托书
2014/08/02 职场文书
群众路线个人自我剖析材料
2014/10/07 职场文书
初中班主任工作总结2015
2015/05/13 职场文书
2015年新农村建设指导员工作总结
2015/07/24 职场文书
python 管理系统实现mysql交互的示例代码
2021/12/06 Python