基于Socket.io和Node.js搭建即时通信系统

作者:星河时间:2026-10-28 13:03:10浏览:516

本文详细介绍如何利用Node.js和Socket.io搭建WebSocket即时通信服务器。内容涵盖Node.js环境配置、npm模块管理、Socket.io服务端与客户端代码实现,以及常见错误排查,帮助开发者快速构建实时双向通信应用。

环境搭建与配置

利用Socket.io与Node.js构建WebSocket服务器端。

Socket.io不仅支持客户端WebSocket服务,同时也兼容Node.js服务器端的WebSocket功能。

接下来介绍Node.js的安装与配置步骤。

访问http://nodejs.org/#download下载msi安装包,连续点击“Next”完成安装,文件默认安装在C:\nodejs目录下。

安装完成后系统会自动配置环境变量。若未自动配置,需手动在Path变量中添加;C:\nodejs\。

安装完毕后,需配置npm以管理Node.js模块。

在Windows环境下安装npm前,需先安装Git。

安装Git后,打开Git Bash执行以下步骤:


git config --system http.sslcainfo /bin/curl-ca-bundle.crt

git clone --recursive git://github.com/isaacs/npm.git

cd npm

node cli.js install npm -gf

首先设置不显示提示,第二步从GitHub下载npm并显示进度,第四步将npm安装至Node.js,复制cmd文件和node_modules文件夹到nodejs目录。

至此npm配置完成。

若需安装其他模块,直接输入npm install ***命令即可。

若无npm或为Windows用户,可从GitHub下载socket.io并放入node_modules文件夹,具体配置可参考文章:《nodejs教程:配置nodejs.exe的windows目录结构》。

在Node.js中安装Socket.io。

使用Node插件包管理器,运行以下命令即可成功安装Socket.io。


npm install socket.io

Socket.io即时通信实现

使用Socket.io实现的示例。

客户端代码部分。


<html> 

<head> 

  <title></title> 

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

  <script type="text/javascript"> 

    function doit() { 

      var socket = io.connect('http://localhost'); 

      socket.on('news', function (data) {//接收到服务器发送过来的名为'new'的数据 

        console.log(data.hello);//data为应服务器发送过来的数据。 

        socket.emit('my new event', { my:'new data' });//向服务器发送数据,实现双向数据传输 

      }); 

      socket.on('other', function (data) {//接收另一个名为'other'数据, 

        console.log(data.hello); 

        socket.emit('event1', { my:'other data' }); 

      }); 

    } 

  </script> 

</head> 

<body> 

<button id='btn' onclick="doit()">click me</button> 

</body> 

</html> 

socket.io.client.js可从https://github.com/LearnBoost/socket.io-client下载到本地,并在<script src="..">中指向本机的js库。

服务器端使用Node.js实现。

server2.js文件内容。


var http= require('http'), io= require('socket.io'), express= require('express'); 

var app = express.createServer(), io = io.listen(app); 

app.listen(80); 

io.sockets.on('connection', function (socket) { 

 socket.emit('news', { hello: 'world' });//监听,一旦客户端连接上,即发送数据,第一个参数'new'为数据名,第二个参数既为数据 

 socket.on('my other event', function (data) {//捕获客户端发送名为'my other event'的数据 

  console.log(data.my); 

 }); 

 socket.emit('other', { hello: 'other world' });//发送另一个数据 

 socket.on('evnet1', function (data) {//捕获另外一个数据 

  console.log(data.my); 

 }); 

}); 

测试结果:客户端可正常显示。

服务器端显示结果如下。

C:\java\Nodejs>node server2.js

注意:代码文件需与npm_module位于同一目录下,否则会出现找不到socket.io模块的错误。

作者最新文章