由于公司需要开发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

基于Nodejs开发的web即时聊天工具的更多相关文章

  1. Pilin —— 一个基于Xmpp openfire smack的即时聊天工具

    https://github.com/whfcomm/Pilin

  2. 使用PHP+Swoole实现的网页即时聊天工具:PHPWebIM

    使用PHP+Swoole实现的网页即时聊天工具 全异步非阻塞Server,可以同时支持数百万TCP连接在线 同时支持websocket+comet2种兼容协议,可用于所有种类的浏览器包括IE 拥有完整 ...

  3. 一个基于NodeJS开发的APP管理CMS系统

    花了大概3周独立开发了一个基于NodeJS的CMS系统,用于公司APP的内容管理( **公司APP?广告放在最后 ^_^ ** ,管理员请理解~~~ )晚上看了部电影还不想睡,闲着也是闲着就作下小小总 ...

  4. 3个常用基于Linux系统命令行WEB网站浏览工具(w3m/Links/Lynx)

    一般我们常用的浏览器肯定是基于可视化界面的图文结合的浏览界面效果,比如FireFox.Chrome.Opera等等,但是有些时候折腾和项目 的需要,在Linux环境中需要查看某个页面的文字字符,我们需 ...

  5. (转)3个常用基于Linux系统命令行WEB网站浏览工具(w3m/Links/Lynx)

    一般我们常用的浏览器肯定是基于可视化界面的图文结合的浏览界面效果,比如FireFox.Chrome.Opera等等,但是有些时候折腾和项目 的需要,在Linux环境中需要查看某个页面的文字字符,我们需 ...

  6. C++开发的基于TCP协议的内网聊天工具

    项目相关地址 源码:https://github.com/easonjim/TCPChat bug提交:https://github.com/easonjim/TCPChat/issues

  7. 基于SOUI开发一个简单的小工具

    基于DriectUI有很多库,比如 Duilib (免费) soui (免费) DuiVision (免费) 炫彩 (界面库免费,UI设计器付费,不提供源码) skinui (免费使用,但不开放源码, ...

  8. 在基于WCF开发的Web Service导出WSDL定义问题及自定义wsdl:port 名称

             在契约优先的Web服务开发过程中,往往是先拿到WSDL服务定义,各家开发各自的服务实现或客户端,然后互相调用.          尽管Web Service的标准已经发布很多年,但各 ...

  9. 仿微信 即时聊天工具 - SignalR (一)

    话不多说,先上图 背景: 微信聊天,经常会遇见视频发不了,嗯,还有聊天不方便的问题,于是我就自己买了服务器,部署了一套可以直接在微信打开的网页进行聊天,这样只需要发送个url给朋友,就能聊天了! 由于 ...

随机推荐

  1. 学javascript突发奇想,只用浏览器就能转换进制

    只需要三行就可以了 具体代码如下 <script> document.write(new Number(8).toString(2));//toSting方法可以转换任何进制 </s ...

  2. Boost正则表达式库regex常用search和match示例 - 编程语言 - 开发者第2241727个问答

    Boost正则表达式库regex常用search和match示例 - 编程语言 - 开发者第2241727个问答 Boost正则表达式库regex常用search和match示例 发表回复   Boo ...

  3. Spring、Bean 的作用域

    Singleton作用域(默认) 当一个bean的作用域为singleton,那么Spring Ioc容器中只会存在一个共享的bean实例,并且所有对bean的请求,只要id与该bean定义相匹配,则 ...

  4. Linux是什么

    计算机主要以二进制为单位,而目前常用的磁盘容量单位为B,其单位换算为1B=8bit,其他的以1024为其倍数,如1GB=1024MB等. 操作系统(Operation System)主要用于管理与驱动 ...

  5. hdu 5540 Secrete Master Plan(水)

    Problem Description Master Mind KongMing gave Fei Zhang a secrete master plan stashed × matrix, but ...

  6. Nginx基础教程PPT

    Nginx基础教程PPT By 马冬亮(凝霜  Loki) 一个人的战争(http://blog.csdn.net/MDL13412) pdf版本号下载 watermark/2/text/aHR0cD ...

  7. R语言初涉

    R语言简单的函数的使用: “<-”表示赋值,也可以用“=”. c()为连接函数,连接中间的数据表示向量,连接中间的数据表示向量,X1 <- c()表示用一组数据为变量X1赋值. mean( ...

  8. 在 IIS 中配置 ASP.NET 应用程序

     注意事项: 1.注册.NET 如果先安装.net平台,后安装IIS,那么在IIS中可能就没有出现ASP.NET版本的下拉菜单,就要手动注册: 一般.Net版本都存放在:C:\WINDOWS\Micr ...

  9. javascript中对象的不同创建方法

    javascript中的对象与一般的面向对象的程序设计语言(c++,Java等)不同,甚至很少有人说它是面向对象的程序设计语言,因为它没有类.javaScript只有对象,不是类的实例.javascr ...

  10. php Mysql 和Mysqli数据库函数整合

    PHP Mysql和Mysqli数据库函数整合 服务器如果支持mysqli函数将优先mysqli函数进行数据库操作 否则将调用mysql函数进行数据库操作 用法SQL::connect(host,us ...