由于公司需要开发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. Windows下让Git记住用户名密码(https)

    最近开始跟老板共同维护公司的框架代码,于是毫不犹豫地选择了Git这个驰名的版本控制系统(公司使用的是TFS,但外网访问老是断线). 选择的托管平台是OSChina,原因是其可以新建私有项目. 在拉取和 ...

  2. naive bayes

    场景:垃圾邮件预测 目标: $p(y|w) = \frac{p(w|y)p(y)}{p(w)}$ 对于一封邮件来说,它的单词相同,所以$p(w)$可以不关心,计算得到分子就能知道更属于哪一类 所以,关 ...

  3. MD5加密算法原理及实现

    MD5消息摘要算法,属Hash算法一类.MD5算法对输入任意长度的消息进行运行,产生一个128位的消息摘要. 以下所描述的消息长度.填充数据都以位(Bit)为单位,字节序为小端字节. 算法原理 1.数 ...

  4. 实现多文件上传在iOS开发中

    该功能实现了实现多文件上传在iOS开发中,喜欢的朋友可以研究一下吧. NSURL* url = [NSURL URLWithString:@"xxx"]; ASIFormDataR ...

  5. Android UI ActionBar功能-启动ActionBar

    官方帮助文档:http://wear.techbrood.com/training/basics/actionbar/index.html ------------------------------ ...

  6. 在spring中进行基于Executor的任务调度

    Executor java.util.concurrent.Executor接口的主要目的是要将“任务提交”和“任务执行”两者分离解耦.该接口定义了任务提交的方法,实现者可以提供不同的任务运行机制,解 ...

  7. MSSQL查询连接数

    SELECT * FROM [Master].[dbo].[SYSPROCESSES] WHERE [DBID] IN ( SELECT [DBID] FROM [Master].[dbo].[SYS ...

  8. 浅谈Oracle数据库性能优化的目标

    Oracle性能优化保证了Oracle数据库的健壮性,为了保证Oracle数据库运行在最佳的性能状态下,在信息系统开发之前就应该考虑数据库的优化策略.从数据库性能优化的场景来区分,可以将性能优化分为如 ...

  9. C++中引用用于结构

    正确 void change(test &target) { target.name = "aaa"; } 错误 void change(const test &t ...

  10. python3--(变量)

    变量: Python 是动态类型语言, 也就是说不需要预先声明变量的类型.变量是对象的引用,变量只是将指针指向了对象所在的内存地址.变量的类型和值在赋值那一刻被初始化. 变量起名: 1.显式--> ...