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

yizhihongxing

下面是“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学习笔记之Global Objects全局对象

    下面详细讲解一下“Nodejs学习笔记之Global Objects全局对象”的攻略。 1. 什么是Global Objects? 在Node.js的全局作用域中,存在一些对象,这些对象可以在任何地方访问,被称作全局对象,其中包括: global对象:它是一个全局对象,可以在任何地方访问,如果一个变量在所有模块中都是全局变量,它就是global对象的属性之一…

    node js 2023年6月8日
    00
  • JS获取元素多层嵌套思路详解

    JS获取元素多层嵌套思路详解 在JavaScript中,获取页面上的DOM元素是一个非常基础但也非常重要的操作。当DOM元素在HTML中嵌套多层时,获取该元素就需要考虑层级关系。下面是详细的操作步骤。 步骤一:查找最外层DOM元素 首先,需要确定最外层的DOM元素。一般情况下,可以通过 document.getElementById() 方法获取该元素,该方…

    node js 2023年6月8日
    00
  • 基于Node.js实现nodemailer邮件发送

    当我们开发网站或者应用时,常常需要通过邮件来发送验证码、通知或者其他信息。Node.js提供了nodemailer模块来方便地实现邮件发送功能。 以下是实现nodemailer邮件发送的攻略: 1. 安装nodemailer npm install nodemailer –save 2. 引入模块 const nodemailer = require(‘n…

    node js 2023年6月8日
    00
  • JavaScript中使用Async实现异步控制

    下面是详细的讲解「JavaScript中使用Async实现异步控制」的完整攻略。 异步编程 在JavaScript中,异步编程是相当重要的,它涉及到不少实际开发场景下的问题,如网络请求、文件读写等等。如果不掌握异步编程,会导致代码的执行顺序不如预期,引起各种奇怪的问题。 异步编程有许多解决方案,其中之一是异步函数(Async Functions),也叫做As…

    node js 2023年6月8日
    00
  • js代码运行报错Warning:To load an ES module, set “type”:”module”in the package.json or use the .mjs

    这个错误提示是出现在使用ES模块时,但是没有指定项目为ES模块的情况下所出现的。 ES模块需要指定在package.json文件中指定type字段为module或使用.mjs文件扩展名。下面是两个示例: 示例一:使用package.json配置 在package.json文件中添加type为module字段即可: { "type": &q…

    node js 2023年6月8日
    00
  • Nodejs + Websocket 指定发送及群聊的实现

    下面是针对“Nodejs + WebSocket 指定发送及群聊的实现”的完整攻略: 1. 基本概念 什么是 WebSocket? WebSocket 是一种 HTML5 中的新技术,它允许客户端和服务器之间建立一个双向的、基于浏览器的实时通信通道。通俗地说,WebSocket 就是可以在浏览器和服务器之间实现双向通信的技术。 什么是 Node.js? No…

    node js 2023年6月8日
    00
  • Vue报错error:0308010C:digital envelope routines::unsupported的解决方法

    “Vue报错error:0308010C:digital envelope routines::unsupported” 错误通常是由于 OpenSSL 版本不兼容引起的。如果使用的是较早的 OpenSSL 版本,会出现无法支持某些加密算法的情况。 为了解决这个问题,我们需要更新 OpenSSL 版本或指定网络请求中支持的加密算法。下面是两种解决方法: 解决…

    node js 2023年6月8日
    00
  • nodejs如何在package.json中设置多条启动命令

    要在package.json中设置多条启动命令,可以使用”scripts”字段。在此字段中,可以定义多个命令,并且可以通过npm run命令调用这些命令。下面是设置多条启动命令的详细攻略: 步骤1:创建package.json文件 如果尚未创建package.json文件,请运行以下命令: npm init 按照提示输入相应信息,创建一个新的package.…

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