基于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 相关文章推荐
淘宝网提供的国内NPM镜像简介和使用方法
Apr 17 Javascript
jQuery实现限制textarea文本框输入字符数量的方法
May 28 Javascript
浅谈JavaScript中指针和地址
Jul 26 Javascript
通过正则表达式获取url中参数的简单实现
Jun 07 Javascript
JavaScript生成验证码并实现验证功能
Sep 24 Javascript
AngularJS模仿Form表单提交的实现代码
Dec 08 Javascript
Jquery Easyui进度条组件Progress使用详解(8)
Mar 26 Javascript
JS正则表达式验证密码格式的集中情况总结
Feb 23 Javascript
vue2.0 实现导航守卫(路由守卫)
May 21 Javascript
vue-router+nginx 非根路径配置方法
Jun 30 Javascript
js实现简单的无缝轮播效果
Sep 05 Javascript
vuex的数据渲染与修改浅析
Nov 26 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笔记之:基于面向对象设计的详解
2013/05/14 PHP
PHP实现的QQ空间g_tk加密算法
2015/07/09 PHP
php实现简易聊天室应用代码
2015/09/23 PHP
PHP文件操作详解
2016/12/30 PHP
Laravel使用消息队列需要注意的一些问题
2017/12/13 PHP
thinkphp3.2框架中where条件查询用法总结
2019/08/13 PHP
Thinkphp5框架实现图片、音频和视频文件的上传功能详解
2019/08/27 PHP
JavaScript入门教程 Cookies
2009/01/31 Javascript
Extjs3.0 checkboxGroup 动态添加item实现思路
2013/08/14 Javascript
Jquery中给animation加更多的运作效果实例
2013/09/05 Javascript
javascript里绝对用的上的字符分割函数总结
2014/07/31 Javascript
Javascript基础教程之变量
2015/01/18 Javascript
谈谈JavaScript异步函数发展历程
2015/09/29 Javascript
jQuery时间验证和转换为标准格式的时间格式
2017/03/06 Javascript
JavaScript数据结构之数组的表示方法示例
2017/04/12 Javascript
canvas实现弧形可拖动进度条效果
2017/05/11 Javascript
js定时器+简单的动画效果实例
2017/11/10 Javascript
[03:34]2014DOTA2西雅图国际邀请赛 淘汰赛7月15日TOPPLAY
2014/07/15 DOTA
利用Python脚本在Nginx和uwsgi上部署MoinMoin的教程
2015/05/05 Python
Python+matplotlib绘制不同大小和颜色散点图实例
2018/01/19 Python
详解python读取和输出到txt
2019/03/29 Python
Python发送邮件的实例代码讲解
2019/10/16 Python
Pandas操作CSV文件的读写实现方法
2019/11/13 Python
Numpy之将矩阵拉成向量的实例
2019/11/30 Python
html Table 表头固定的实现
2019/01/22 HTML / CSS
Sephora丝芙兰澳洲官方网站:国际知名化妆品购物
2016/10/27 全球购物
linux面试题参考答案(5)
2016/11/05 面试题
团组织关系介绍信
2014/01/12 职场文书
献爱心捐款倡议书
2014/05/14 职场文书
2014年教师节国旗下讲话稿
2014/09/10 职场文书
公证处委托书
2015/01/28 职场文书
责任书格式
2015/01/29 职场文书
nginx搭建图片服务器的过程详解(root和alias的区别)
2021/03/31 Servers
详解redis分布式锁的这些坑
2021/05/19 Redis
css3带你实现3D转换效果
2022/02/24 HTML / CSS
Docker安装MySql8并远程访问的实现
2022/07/07 Servers