nodejs结合Socket.IO实现websocket即时通讯

下面是“nodejs结合Socket.IO实现websocket即时通讯”的完整攻略。

一、什么是WebSocket

WebSocket是HTML5开始提供的一种在单个TCP连接上进行全双工通讯的协议。WebSocket协议在浏览器和服务器之间建立全双工通讯,使得浏览器可以实时向服务器推送数据。相比于传统的HTTP协议,WebSocket在实现实时通讯方面有很大的优势。

二、使用Socket.IO实现WebSocket通讯

Socket.IO是一种基于事件的实时双向通讯引擎,可以在浏览器和服务器间发送任何事件,包括附加数据。它是一个跨平台、跨浏览器的实时通讯协议,可以在node.js和浏览器之间建立稳定、实时、低延迟的通讯。

1. 安装Socket.IO

在node.js中,可以通过npm来安装Socket.IO,执行如下命令:

npm install socket.io

2. 创建WebSocket服务器

为了处理WebSocket请求,我们需要创建一个WebSocket服务器。只需要几行简单的代码就可以完成:

const app = require('http').createServer(handler);
const io = require('socket.io')(app);

app.listen(3000);

function handler(req, res) {
  res.writeHead(200);
  res.end("Welcome to my WebSocket server");
}

这段代码会创建一个HTTP服务器,然后通过socket.io将其升级为WebSocket服务器。handler函数用于处理请求,并返回欢迎信息。

3. 客户端连接WebSocket服务器

我们利用socket.io客户端库在浏览器中连接WebSocket服务器,代码如下:

<script src="/socket.io/socket.io.js"></script>
<script>
  var socket = io.connect('http://localhost:3000');
  socket.on('connect', function(){
    console.log('连接成功');
  });
  socket.on('message', function(msg){
    console.log(msg);
  });
</script>

这段代码通过io.connect函数连接WebSocket服务器,并在连接建立和接收到消息时,输出相应的信息。

4. 服务器端发送消息到客户端

在服务器端,我们可以通过io对象,发送消息到客户端。代码如下:

setInterval(function(){
  io.emit('message', '这是一条广播消息');
}, 5000);

这段代码每隔5秒钟将一条广播消息发送到所有客户端。

示例一

下面是一个完整的实例,代码中包括了客户端和服务端的代码:

  • server.js
const app = require('http').createServer(handler);
const io = require('socket.io')(app);

app.listen(3000);

function handler(req, res) {
  res.writeHead(200);
  res.end("Welcome to my WebSocket server");
}

setInterval(function(){
  io.emit('message', '这是一条广播消息');
}, 5000);
  • client.html
<!DOCTYPE html>
<html>
<head>
  <script src="/socket.io/socket.io.js"></script>
</head>
<body>
  <script>
    var socket = io.connect('http://localhost:3000');
    socket.on('connect', function(){
      console.log('连接成功');
    });
    socket.on('message', function(msg){
      console.log(msg);
    });
  </script>
</body>
</html>

在命令行中执行node server.js命令启动WebSocket服务器,然后在浏览器中打开client.html页面,就可以看到客户端连接服务器并输出接收到的广播消息的信息。

示例二

下面是另一个简单的示例,代码中展示了如何将客户端向服务器发起的请求,广播给所有的客户端:

  • server.js
const app = require('http').createServer(handler);
const io = require('socket.io')(app);

app.listen(3000);

function handler(req, res) {
  res.writeHead(200);
  res.end("Welcome to my WebSocket server");
}

io.on('connection', function(socket) {
  console.log('有新客户端连接:' + socket.id);
  socket.on('request', function(msg) {
    console.log('收到客户端的请求:' + msg);
    io.emit('response', msg);
  });
});
  • client.html
<!DOCTYPE html>
<html>
<head>
  <script src="/socket.io/socket.io.js"></script>
</head>
<body>
  <input type="text" id="input">
  <button onclick="sendRequest()">发起请求</button>
  <br>
  <br>
  <ul id="messages"></ul>
  <script>
    var socket = io.connect('http://localhost:3000');
    socket.on('connect', function(){
      console.log('连接成功');
    });
    socket.on('response', function(msg){
      var li = document.createElement('li');
      li.innerText = msg;
      document.getElementById('messages').appendChild(li);
    });

    function sendRequest() {
      var request = document.getElementById('input').value;
      socket.emit('request', request);
    }
  </script>
</body>
</html>

启动WebSocket服务器,然后在浏览器中打开client.html,并在文本框中输入请求,点击发起请求按钮,就可以看到服务器返回的响应广播给了所有客户端。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:nodejs结合Socket.IO实现websocket即时通讯 - Python技术站

(0)
上一篇 2023年6月8日
下一篇 2023年6月8日

相关文章

  • nodejs 如何手动实现服务器

    首先,我们需要了解一些基础知识,包括Node.js和HTTP协议的基本原理。 Node.js是一个使用JavaScript构建应用程序的平台。它使用事件驱动、非阻塞I/O模型,可以快速、高效地处理大量的并发连接。HTTP是一种基于请求和响应模式的协议,用于从web服务器传输超文本。 为了手动实现一个服务器,我们需要完成以下步骤: 引入http模块 我们使用N…

    node js 2023年6月8日
    00
  • 详解JS前端使用迭代器和生成器原理及示例

    标题:详解JS前端使用迭代器和生成器原理及示例 什么是迭代器 迭代器是一种设计模式,它提供了一种顺序访问聚合对象元素的方法,而不需要暴露对象的内部表示。迭代器可以分为内部迭代器和外部迭代器。在JavaScript中,数组就是一个内部迭代器。 内部迭代器: 它的迭代规则已经被提前规定,对于每一次迭代,外界没有任何变量参与。这样做的优点是内部迭代器的调用非常简单…

    node js 2023年6月8日
    00
  • 基于微信签名signature获取(实例讲解)

    下面我将详细讲解“基于微信签名signature获取(实例讲解)”的完整攻略。 什么是微信签名signature 微信签名signature 是一种防止恶意攻击的验证方式。在微信公众号应用中,验证请求来源的正确性是至关重要的。签名signature是由公众号Token、时间戳timestamp和随机字符串noncestr三个参数按照字典序排序后通过SHA1加…

    node js 2023年6月8日
    00
  • 详解Node.js包的工程目录与NPM包管理器的使用

    非常感谢您对Node.js包的工程目录和NPM包管理器的关注。下面我将为您详细介绍相关知识。 1. Node.js包的工程目录 Node.js包的工程目录包含以下文件和目录: . ├── bin/ │ └── your-cli.js ├── lib/ │ ├── your-library.js │ ├── submodule1.js │ ├── submod…

    node js 2023年6月8日
    00
  • 抛弃Nginx使用nodejs做反向代理服务器

    要抛弃Nginx使用Node.js做反向代理服务器,可以按照以下攻略进行操作: 1. 安装Node.js 在开始使用Node.js作为反向代理的服务前,你需要确保你的系统已经安装了Node.js。如果未安装,可以在Node.js的官方网站上下载并安装。 2. 编写反向代理服务 在Node.js中编写反向代理服务器,需要使用http-proxy模块。你可以在终…

    node js 2023年6月8日
    00
  • node.js实现登录注册页面

    下面是详细讲解“node.js实现登录注册页面”的完整攻略。 1. 环境搭建 首先需要安装Node.js运行环境和npm包管理器,可以到Node.js官网下载并安装。 安装完成后,进入命令行工具,使用npm安装Express框架和相关的模块: npm install express express-session express-validator body…

    node js 2023年6月8日
    00
  • nodejs中使用HTTP分块响应和定时器示例代码

    关于“nodejs中使用HTTP分块响应和定时器”,我们可以分三步来描述。 第一步:创建HTTP服务器 在Node.js中创建HTTP服务器,我们需要用到内置模块http,代码如下: const http = require(‘http’); // 创建服务器 const server = http.createServer((req, res) =>…

    node js 2023年6月8日
    00
  • nodejs实现一个word文档解析器思路详解

    下面是“nodejs实现一个word文档解析器思路详解”的完整攻略: 1. 了解Word文档格式 要实现一个Word文档解析器,首先要了解Word文档的格式。Word使用的是二进制文件格式(.doc),这种格式非常复杂,需要逐个字节地解析文件内容。我们可以使用第三方库docx来进行解析,这个库会将Word文档转为XML格式,方便我们进行解析。 2. 安装No…

    node js 2023年6月8日
    00
合作推广
合作推广
分享本页
返回顶部