文档章节

Node.js+Socket.IO实现的WebSocket群聊天室源码

小柒2012
 小柒2012
发布于 2016/07/13 21:04
字数 1380
阅读 276
收藏 3

首先上图上实例




聊天室地址:http://chat.52itstyle.com


WebSocket简介

谈到Web实时推送,就不得不说WebSocket。在WebSocket出现之前,很多网站为了实现实时推送技术,通常采用的方案是轮询 (Polling)和Comet技术,Comet又可细分为两种实现方式,一种是长轮询机制,一种称为流技术,这两种方式实际上是对轮询技术的改进,这些 方案带来很明显的缺点,需要由浏览器对服务器发出HTTP request,大量消耗服务器带宽和资源。面对这种状况,HTML5定义了WebSocket协议,能更好的节省服务器资源和带宽并实现真正意义上的实 时推送。

WebSocket协议本质上是一个基于TCP的协议,它由通信协议和编程API组成,WebSocket能够在浏览器和服务器之间建立双向连接, 以基于事件的方式,赋予浏览器实时通信能力。既然是双向通信,就意味着服务器端和客户端可以同时发送并响应请求,而不再像HTTP的请求和响应。

为了建立一个WebSocket连接,客户端浏览器首先要向服务器发起一个HTTP请求,这个请求和通常的HTTP请求不同,包含了一些附加头信 息,其中附加头信息”Upgrade: WebSocket”表明这是一个申请协议升级的HTTP请求,服务器端解析这些附加的头信息然后产生应答信息返回给客户端,客户端和服务器端的 WebSocket连接就建立起来了,双方就可以通过这个连接通道自由的传递信息,并且这个连接会持续存在直到客户端或者服务器端的某一方主动的关闭连 接。

项目功能分析:

1、兼容不支持WebSocket的低版本浏览器。
2、允许客户端有相同的用户名。
3、进入聊天室后可以看到当前在线的用户和在线人数。
4、用户上线或退出,所有在线的客户端应该实时更新。
5、用户发送消息,所有客户端实时收取。

在实际的开发过程中,为了使用WebSocket接口构建Web应用,我们首先需要构建一个实现了 WebSocket规范的服务端,服务端的实现不受平台和开发语言的限制,只需要遵从WebSocket规范即可,目前已经出现了一些比较成熟的 WebSocket服务端实现,比如本文使用的Node.js+Socket.IO。为什么选用这个方案呢?先来简单介绍下他们两。

Node.js
Node.js采用C++语言编写而成,它不是javascript应用,而是一个Javascript的运行环境,据Node.js创始人 Ryan Dahl回忆,他最初希望采用Ruby来写Node.js,但是后来发现Ruby虚拟机的性能不能满足他的要求,后来他尝试采用V8引擎,所以选择了 C++语言。

Node.js支持的系统包括*nux、Windows,这意味着程序员可以编写系统级或者服务器端的Javascript代码,交给 Node.js来解释执行。Node.js的Web开发框架Express,可以帮助程序员快速建立web站点,从2009年诞生至今,Node.js的 成长的速度有目共睹,其发展前景获得了技术社区的充分肯定。

Socket.IO
Socket.IO是一个开源的WebSocket库,它通过Node.js实现WebSocket服务端,同时也提供客户端JS库。Socket.IO支持以事件为基础的实时双向通讯,它可以工作在任何平台、浏览器或移动设备。

Socket.IO支持4种协议:WebSocket、htmlfile、xhr-polling、jsonp-polling,它会自动根据浏览 器选择适合的通讯方式,从而让开发者可以聚焦到功能的实现而不是平台的兼容性,同时Socket.IO具有不错的稳定性和性能。


如何安装Node.js

http://www.52itstyle.com/thread-21549-1-1.html

本实例采用nodejs-socketio-chat,地址为https://github.com/plhwin/nodejs-socketio-chat
解压后目录中会有一个服务端和客户端,如图:
 

搭建WebSocket服务端

服务器环境 centos6.5,Nginx,Node.js

一、首先下载文件并解压
二、切换到server目录下执行一下操作
npm install --save express
npm install --save socket.io

执行成功后,会在server目录下生成了一个名为node_modules的文件夹,里面分别是express和socket.io。
三、启动服务端
node index.js& 后台运行。

搭建WebSocket客户端

使用Ngin部署客户端并绑定域名

  1. server {
  2.         listen       80;
  3.         server_name   chat.52itstyle.com;
  4.         location / {
  5.    index  index.html index.htm;
  6.    root  /home/chat/52chat/client;
  7.         }
  8.         error_page   500 502 503 504  /50x.html;
  9.         location = /50x.html {
  10.     root   html;
  11.         }
  12.     }

复制代码



启动Nginx,现在就可以访问客户端了:http://chat.52itstyle.com

© 著作权归作者所有

共有 人打赏支持
小柒2012
粉丝 122
博文 28
码字总数 30355
作品 0
青岛
程序员
私信 提问
加载中

评论(1)

m
miaomiaogong1
web实时推送技术使用越来越广泛,但是自己开发又太麻烦了,我觉得没有那个必要,GoEasy就挺不错的,服务器稳定,代码简洁易懂;官网: https://goeasy.io/
【求助】谁知道 node-websocket-server 框架怎么用,麻烦帮忙看一下

本人是名在校大三学生,刚接触nodejs不到一个星期,看了node入门 然后主要是想用nodejs结合websocket和WebGL搞一个小开发,正好在本站和其他地方都有许多讲nodejs与websocket结合的文章,其中在w...

冯焰
2012/02/04
1K
2
以中间件,路由,跨进程事件的姿势使用WebSocket--Node.js篇

上一篇文章介绍了在浏览器端以中间件,路由,跨进程事件的姿势使用原生WebSocket。这篇文章将介绍如何使用Node.js以相同的编程模式来实现WebSocket服务端。 Node.js中比较流行的两个WebSock...

若邪
11/09
0
0
转发:websocket 通信协议介绍

websocket通信协议实现的是基于浏览器的原生socket,在客户端用JS即可轻松完成,前些 天都在学习websocket 协议(但实际上websocket 协议甚为简约),并且粗略的思考过websocket的对于下一代...

红薯
2010/06/02
4.6K
7
使用 Go 语言和 HTML5 WebSocket 构建一个 Web 聊天室

这个应用演示如何使用 Google Go 语言和 HTML5 的 WebSocket 来实现一个简单的基于 Web 的聊天程序。 下图是聊天应用的截图: 你可输入 email 来加入聊天室,我们将从 Gravatar 上获取对应的...

红薯
2012/08/04
23.2K
21
使用 Go 语言和 HTML5 WebSocket 构建一个 Web 聊天室

这个应用演示如何使用 Google Go 语言和 HTML5 的 WebSocket 来实现一个简单的基于 Web 的聊天程序。 下图是聊天应用的截图: 你可输入 email 来加入聊天室,我们将从 Gravatar 上获取对应的...

曾沙
2012/11/27
623
2

没有更多内容

加载失败,请刷新页面

加载更多

Kubernetes 1.13.0的快速升级

Kubernetes 1.13.0已经正式发布,快速升级(含国内镜像快速下载链接)包括升级kubeadm/kubectl/kubelet版本、拉取镜像、升级Kubernetes集群三个主要步骤。注意Kubernetes 1.13.0版本暂时不支...

openthings
11分钟前
0
0
go的卸载和环境变量配个人.bashrc

若是用安装包直接解压 http://download.csdn.net/detail/u010026901/7592581 cd /usr/local tar -zxvf go1.1.2.linux-386.tar.gz(先把安装包移到这个目录) 3.安装 $ cd go/src,$ ./all.b......

dragon_tech
16分钟前
0
0
区块链安全 - 以太坊短地址攻击

1 基础知识 EVM虚拟机在解析合约的字节码时,依赖的是ABI的定义,从而去识别各个字段位于字节码的什么地方。关于ABI,可以阅读这个文档: https://github.com/ethereum/wiki/wiki/Ethereum-C...

HiBlock
27分钟前
1
0
自定义函数及内部函数

变量的作用域 局部变量 global $Global及其他超全局数组 静态变量 仅初始化赋值 保留于内存直到response才销毁 global和static变量的区别 global:局部变量全局话 static:定义静态局部变量 函...

关元
28分钟前
1
0

中国龙-扬科
40分钟前
1
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部