由于公司需要开发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. mongodb与mysql相比的优缺点

    与关系型数据库相比,MongoDB的优点:①弱一致性(最终一致),更能保证用户的访问速度:举例来说,在传统的关系型数据库中,一个COUNT类型的操作会锁定数据集,这样可以保证得到“当前”情况下的精确值 ...

  2. Android 弹出通知Toast的使用

    //官方帮助文档:http://wear.techbrood.com/guide/topics/ui/notifiers/toasts.html <LinearLayout xmlns:andr ...

  3. 网易云课堂_程序设计入门-C语言_第三周:循环_2数字特征值

    2 数字特征值(5分) 题目内容: 对数字求特征值是常用的编码算法,奇偶特征是一种简单的特征值.对于一个整数,从个位开始对每一位数字编号,个位是1号,十位是2号,以此类推.这个整数在第n位上的数字记作 ...

  4. magento 获取attribute的所有option

    $attribute = Mage::getSingleton('eav/config')->getAttribute('catalog_product', 'color');if ($attr ...

  5. Android创建启动画面[转]

    每个Android应用启动之后都会出现一个Splash启动界面,显示产品的LOGO.公司的LOGO或者开发者信息.如果应用程序启动时间比较长,那么启动界面就是一个很好的东西,可以让用户耐心等待这段枯燥 ...

  6. devexpress中用ChartControl生成柱状图

    在界面中拖入一个ChartControl控件,然后添加一个simplebutton控件.在simplebutton控件的click事件中加入如下代码: private void button1_Cli ...

  7. MOSS2010部署解决方案失败是可以尝试更新

    update-spsolution -identity XXX.wsp -literalpath D:\SPS2010Setup\XXX.wsp -gacdeployment

  8. 图片的像素和Android的dp值之间的关系。

    这是一个困扰我很就得问题.今天在我的反复摸索下,总结出了一些个规律. 以下测试以魅族mx5为例. 手机参数:5.5英寸:高:1920:宽1080. /** * 获得屏幕的宽度 * * @param c ...

  9. OC语法8——@class关键字

    @class关键字: 在当前类中若要引用其他类的对象作成员变量(Book  *book),我们以前采用的方式是 #import "Book.h" 但 #import "B ...

  10. Eclipse 打包过滤 Log.e

    我们在开发时,经常会输出各种日志来debug代码.但是等到应用发布的apk运行时不希望它输出日志. 关闭输出日志Log.v(),Log.i(),Log.w(),Log.v(),Log.e()等 原理: ...