基于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 鼠标点击事件及其它捕获
Jun 04 Javascript
javascrpt绑定事件之匿名函数无法解除绑定问题
Dec 06 Javascript
jQuery中DOM操作实例分析
Jan 23 Javascript
JavaScript判断一个字符串是否包含指定子字符串的方法
Mar 18 Javascript
基于js实现微信发送好友如何分享到朋友圈、微博
Nov 30 Javascript
使用DeviceOne实现微信小程序功能
Dec 29 Javascript
BootstrapTable refresh 方法使用实例简单介绍
Feb 20 Javascript
Vue.js实现输入框绑定的实例代码
Aug 24 Javascript
浅谈angular4实际项目搭建总结
Dec 01 Javascript
微信小程序基于slider组件动态修改标签透明度的方法示例
Dec 04 Javascript
vue 实现axios拦截、页面跳转和token 验证
Jul 17 Javascript
node-red File读取好保存实例讲解
Sep 11 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(一)
2012/03/21 PHP
详解WordPress中用于更新和获取用户选项数据的PHP函数
2016/03/08 PHP
PHP实现基本留言板功能原理与步骤详解
2020/03/26 PHP
php中加密解密DES类的简单使用方法示例
2020/03/26 PHP
PHP设计模式之命令模式示例详解
2020/12/20 PHP
javascript 函数式编程
2007/08/16 Javascript
中文字符串截取的js函数代码
2013/04/17 Javascript
javascript 上下banner替换具体实现
2013/11/14 Javascript
Javascript原型链的原理详解
2016/01/05 Javascript
JavaScript+html5 canvas绘制的小人效果
2016/01/27 Javascript
AngularJS入门教程之双向绑定详解
2016/08/18 Javascript
微信小程序  自定义创建详细介绍
2016/10/27 Javascript
BootStrap Table 获取同行不同列元素的方法
2016/12/19 Javascript
Node.js复制文件的方法示例
2016/12/29 Javascript
JavaScript简单计算人的年龄示例
2017/04/15 Javascript
解决vue项目运行npm run serve报错的问题
2020/10/26 Javascript
NodeJS模块Buffer原理及使用方法解析
2020/11/11 NodeJs
[54:43]DOTA2-DPC中国联赛 正赛 CDEC vs Dynasty BO3 第一场 2月22日
2021/03/11 DOTA
python实现zencart产品数据导入到magento(python导入数据)
2014/04/03 Python
Python编程中的文件读写及相关的文件对象方法讲解
2016/01/19 Python
Python探索之pLSA实现代码
2017/10/25 Python
Python Nose框架编写测试用例方法
2017/10/26 Python
python 3.6.5 安装配置方法图文教程
2018/09/18 Python
Django框架创建项目的方法入门教程
2019/11/04 Python
将pymysql获取到的数据类型是tuple转化为pandas方式
2020/05/15 Python
python进度条显示-tqmd模块的实现示例
2020/08/23 Python
python爬虫scrapy图书分类实例讲解
2020/11/23 Python
戴尔美国官网:Dell
2016/08/31 全球购物
设计师家具购买和委托在线市场:Viyet
2016/11/16 全球购物
美国批发供应商:Kole Imports
2019/04/10 全球购物
手工社团活动方案
2014/02/17 职场文书
自我鉴定总结
2014/03/24 职场文书
《北大荒的秋天》教学反思
2014/04/14 职场文书
小学一年级评语大全
2014/04/22 职场文书
爱情保证书大全
2014/04/29 职场文书
Go gorilla/sessions库安装使用
2022/08/14 Golang