基于Nodejs开发的web即时聊天工具

由于公司需要开发web即时聊天的功能,开始时我们主要的实施方法是用jquery的ajax定时(10秒)轮询向服务器请求,由于是轮询请求,对 服务器的压力比较大。我们网站上线的时间不长,访问量不是很大,但就是在这样的情况下,服务器日志显示每天轮询的请求大约在7000条左右,所以公司决定 放弃ajax轮询请求的方式,改用Nodejs.

Nodejs现在炒得很火,但是国内真正用其做项目的公司还是很少,网上大部分是一些简单 的基础例子,找些相关资料比较困难,遇到问题也是没个头绪,不得不去国外的一些网站找资料、找问题的答案,主要去的还是github和 stackoverflow。nodejs是基于事件驱动的,单线程高效率的完美体现,用的nodejs给我最大的感觉就是要用到各种回调,请求函数不出 意外都要加上回调函数,经过了半个多月的研究和摸索,web即时聊天的基本功能已经实现了,当然还有很多未知的问题,需要在运行中逐渐升级和完善,感兴趣 的朋友可以去glojobs.com注册个账户体验一下。

我分享一下具体的实施方法吧。

服务器端:

需要架设Nodejs、安装Express框架、Mysql模块、Socket.io模块以及Forever模块,这些模块安装起来都比较简单,直接用npm install 安装即可。

客户端:

主要用的了js的jquery框架

核心片段:

1 需要调用服务端的socket

<<span>script src="socket.io/socket.io.js"></<span>script>

2 socket链接片段 socket = io.connect("url",{"connect_timeout":120000});

3 socket.on(\'online\',function(user){}); 事假注册

socket.emit(\'online\', uname); 向请求服务端发出请求

4 连接mysql数据库

var mysql = require(\'mysql\');

var db = mysql.createConnection({

host : \'localhost\',

user : \'root\',

password : \'111\',

database : \'dbname\',

charset : \'UTF8_GENERAL_CI\',

});

连接数据库需要处理一个问题就是,mysql连接超时的问题,这个写个定时重连的程序给予解决,如下:

var reconnect= function(err) {

console.log(err.code,\'Trying to connect in 5 secs\'+new Date());

setTimeout(function (){

db = mysql.createConnection(db.config);

db.on(\'error\',reconnect);

db.connect();

},5000);

};

db.on(\'error\',reconnect);

5 其余的就是逻辑处理了,export各种方法,用emit各种去调用。

web即时聊天工具我们会继续完善和添加新功能,有兴趣的朋友可以一起探讨,qq:359513995

------------------------------------

千万不要忽略基础知识,以下HTML和HTML5 测试低于90分的同学都需要回炉学习:

HTML测试:http://www.w3xuexi.com/quiztest/index?qtest=HTML

HTML5测试:http://www.w3xuexi.com/quiztest/index?qtest=HTML5