nodejs socket实现的服务端和客户端功能示例

我来为您讲解一下“nodejs socket实现的服务端和客户端功能示例”的完整攻略,希望能对您有所帮助。

简介

Node.js是一种基于Chrome V8引擎的JavaScript运行环境,它是一个开放源代码、跨平台的服务器端运行环境。在Node.js中,socket可以用来实现服务器与客户端之间的数据传输。本文将介绍Node.js中如何使用socket实现服务端和客户端的功能。

安装socket.io

socket.io是Node.js中常用的socket库,用来实现WebSocket通信。可以通过以下命令在项目中安装:

npm install socket.io

服务端

创建服务器

在Node.js中,可以使用http模块来创建一个服务器。使用socket.io需要先创建一个http服务器,然后将其作为参数传递给socket.io的构造函数。示例代码如下:

const http = require('http');
const server = http.createServer((req, res) => {
  res.writeHead(200, {'Content-Type': 'text/html'});
  res.end('<h1>Hello World</h1>');
});

const io = require('socket.io')(server);
server.listen(3000, () => console.log('listening on port 3000'));

监听连接事件和断开事件

在服务端中,我们可以监听客户端的连接和断开事件,使用socket.io的on方法来监听,示例代码如下:

io.on('connection', (socket) => {
  console.log('a user connected');

  socket.on('disconnect', () => {
    console.log('user disconnected');
  });
});

上面的示例代码中,我们使用on方法来监听connection事件,该事件会在有新的客户端连接时触发。同时我们也使用on方法来监听disconnect事件,该事件会在有客户端断开连接时触发。

接收和发送数据

我们可以在服务端中监听客户端发送的消息,并对消息进行处理。在服务端中发送消息也非常简单,只需调用socket.emit方法即可。示例代码如下:

io.on('connection', (socket) => {
  socket.on('chat message', (msg) => {
    console.log('message: ' + msg);
    io.emit('chat message', msg);
  });
});

上面的示例代码中,我们使用on方法来监听客户端发送的chat message消息,对消息进行处理。同时,使用emit方法发送消息给所有客户端。其中,io.emit可以向所有客户端发送消息,可以传递多个参数,第一个参数为事件名。

客户端

连接服务

在客户端中,我们可以使用socket.io来连接服务。示例代码如下:

const socket = io('http://localhost:3000');

发送和接收数据

在客户端中,可以使用socket.emit方法来发送消息给服务器,使用socket.on方法来接收从服务器发送的消息。示例代码如下:

const socket = io();

$('form').submit((e) => {
  e.preventDefault(); // prevents page reloading
  socket.emit('chat message', $('#m').val());
  $('#m').val('');
  return false;
});

socket.on('chat message', (msg) => {
  $('#messages').append($('<li>').text(msg));
});

上面的代码中,使用submit方法来监听表单提交事件。当表单提交时,调用socket.emit方法将输入框的值作为消息发送到服务器。使用socket.on方法监听从服务器发送的chat message消息,并将消息添加到页面中的消息列表中。

示例说明

示例1:实现聊天室

在这个示例中,我们将创建一个基本的聊天室,让多个客户端能够通过一个服务器进行实时通信。

服务端示例代码:

const http = require('http');
const server = http.createServer((req, res) => {
  res.writeHead(200, {'Content-Type': 'text/html'});
  res.end('<h1>Hello World</h1>');
});

const io = require('socket.io')(server);
server.listen(3000, () => console.log('listening on port 3000'));

io.on('connection', (socket) => {
  console.log('a user connected');

  socket.on('chat message', (msg) => {
    console.log('message: ' + msg);
    io.emit('chat message', msg);
  });

  socket.on('disconnect', () => {
    console.log('user disconnected');
  });
});

客户端示例代码:

<!DOCTYPE html>
<html>
<head>
  <title>Chat Example</title>
  <script src="https://cdn.socket.io/socket.io-1.2.0.js"></script>
  <script src="https://code.jquery.com/jquery-1.11.1.js"></script>
  <style>
    #messages { list-style-type: none; margin: 0; padding: 0; }
    #messages li { padding: 5px 10px; }
  </style>
</head>
<body>
  <ul id="messages"></ul>
  <form action="">
    <input id="m" autocomplete="off" /><button>Send</button>
  </form>
  <script>
    const socket = io();

    $('form').submit((e) => {
      e.preventDefault(); // prevents page reloading
      socket.emit('chat message', $('#m').val());
      $('#m').val('');
      return false;
    });

    socket.on('chat message', (msg) => {
      $('#messages').append($('<li>').text(msg));
    });
  </script>
</body>
</html>

在这个示例中,启动服务端并访问聊天室页面,即可在多个客户端之间进行实时通信。

示例2:实现实时数据可视化

在这个示例中,我们将使用socket.io来实现实时数据可视化。当用户在客户端上发送数据时,服务端会实时将数据发送到客户端,客户端会将数据绘制成可视化图形。

服务端示例代码:

const http = require('http');
const server = http.createServer((req, res) => {
  res.writeHead(200, {'Content-Type': 'text/html'});
  res.end('<h1>Hello World</h1>');
});

const io = require('socket.io')(server);
var numClients = 0;
var values = [];
server.listen(3000, () => console.log('listening on port 3000'));

io.on('connection', (socket) => {
  console.log('a user connected');
  numClients++;

  socket.on('disconnect', () => {
    console.log('user disconnected');
    numClients--;
  });

  socket.on('add value', (value) => {
    values.push(parseFloat(value));
    io.emit('add value', value);
  });

  socket.on('get values', () => {
    io.emit('get values', values);
  });

  socket.emit('connected', numClients);
});

客户端示例代码:

<!DOCTYPE html>
<html>
<head>
  <title>Real-time Chart Example</title>
  <script src="https://cdn.socket.io/socket.io-1.2.0.js"></script>
  <script src="https://code.jquery.com/jquery-1.11.1.js"></script>
  <script src="https://cdnjs.cloudflare.com/ajax/libs/Chart.js/2.7.3/Chart.bundle.min.js"></script>
</head>
<body>
  <canvas id="chart"></canvas>
  <form action="">
    <input id="input" type="number" step="0.01" /><button>Add Value</button>
  </form>
  <script>
    const socket = io();
    var chartData = [];
    var chart;

    socket.on('connected', (numClients) => {
      console.log('Connected clients: ', numClients);
    });

    socket.on('add value', (value) => {
      console.log('New value: ', value);
      chartData.push({x: chartData.length + 1, y: parseFloat(value)});
      chart.update();
    });

    socket.on('get values', (values) => {
      console.log('Values: ', values);
      chartData = values.map((v, i) => ({ x: i + 1, y: v }));
      chart.update();
    });

    $('form').submit((e) => {
      e.preventDefault(); // prevents page reloading
      socket.emit('add value', $('#input').val());
      $('#input').val('');
      return false;
    });

    chart = new Chart(document.getElementById('chart').getContext('2d'), {
      type: 'line',
      data: {
        datasets: [{
          data: chartData,
          borderColor: 'blue',
          fill: false
        }]
      },
      options: {
        scales: {
          xAxes: [{
            type: 'linear',
            position: 'bottom'
          }]
        }
      }
    });

    socket.emit('get values');
  </script>
</body>
</html>

在这个示例中,启动服务端并访问数据可视化页面,即可实时显示从客户端发送的数据,以及服务端发送的聚合数据。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:nodejs socket实现的服务端和客户端功能示例 - Python技术站

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

相关文章

  • 基于Nuxt.js项目的服务端性能优化与错误检测(容错处理)

    下面我会详细讲解“基于Nuxt.js项目的服务端性能优化与错误检测(容错处理)”的完整攻略。 1. 为什么要进行服务端性能优化与错误检测 在一个网站或应用的开发中,服务端的性能和稳定性都是非常重要的因素。特别是在高并发的情况下,服务端的性能问题和错误处理能力的不足,往往会导致用户体验不佳,甚至会对业务造成较大的影响。 基于Nuxt.js的项目,作为一个基于V…

    node js 2023年6月8日
    00
  • Node.js系列之安装配置与基本使用(1)

    以下是“Node.js系列之安装配置与基本使用(1)”完整攻略: Node.js系列之安装配置与基本使用(1) 安装Node.js 在官网上下载对应的安装程序进行安装,安装成功后,可以在终端上输入下面的命令行来检查是否安装成功: node -v npm -v 如果成功安装,就可以看到相应的版本号信息。 配置Node.js 我们可以使用npm安装一些第三方模块…

    node js 2023年6月8日
    00
  • npm报错:无法将”npm”项识别为cmdlet、函数、脚本文件或可运行程序的名称

    当我们在使用npm命令时,有时可能会遇到以下报错: 无法将"npm"项识别为 cmdlet、函数、脚本文件或可运行程序的名称。请检查名称的拼写,如果包括路径,请确保路径正确,然后再试一次。 这个错误是因为电脑没有安装npm或npm没有配置到环境变量中所致。 以下是解决这个问题的方法: 方法一:安装Node.js npm是随Node.js一…

    node js 2023年6月8日
    00
  • JavaScript内存泄漏的处理方式

    请您先了解JavaScript内存泄漏的概念: JavaScript是一种自动内存管理语言,这意味着开发人员不需要手动分配和释放内存。相反,JavaScript解释器在运行时会自动跟踪和管理内存。然而,JavaScript程序员仍然需要避免内存泄漏。 内存泄漏指的是不再有用的内存一直保留在内存中,不能被垃圾回收机制回收,最终会导致内存耗尽。一旦内存耗尽,应用…

    node js 2023年6月8日
    00
  • node.js部署之启动后台运行forever的方法

    让我为您提供一个基本的步骤来启动Node.js应用程序并在后台运行forever。 步骤1:安装forever 首先,您需要在您的计算机上安装forever模块。您可以使用以下命令进行安装: npm install forever -g 步骤2:启动Node.js应用程序 您需要使用以下命令在终端中启动您的Node.js应用程序: forever start…

    node js 2023年6月8日
    00
  • Vue3+Element-plus项目自动导入报错的解决方案

    下面我就为您详细讲解“Vue3+Element-plus项目自动导入报错的解决方案”的完整攻略。 问题描述 在使用Vue3+Element-plus项目进行开发时,如果使用自动导入方式(通过Babel插件或Webpack插件)进行引入组件,则可能会出现报错(如“Cannot read properties of undefined (reading ‘pro…

    node js 2023年6月8日
    00
  • Node.js数据流Stream之Readable流和Writable流用法

    Node.js数据流Stream之Readable流和Writable流用法 引言 在Node.js中,数据流(Stream)是一种处理数据的抽象接口,可以将数据读入或写出到内存,文件或网络等多种数据源和目标。Stream接口的主要好处是可以分块处理大量的数据,避免一次性将整个数据读入或写出而导致的内存占用和性能问题。其中Readable流和Writable…

    node js 2023年6月8日
    00
  • js中AppendChild与insertBefore的用法详细解析

    关于“js中AppendChild与insertBefore的用法详细解析”,我将会为您提供完整的攻略。 简介 在JavaScript中,我们经常需要操作HTML文档的节点来实现一些动态效果,而在节点操作中,appendChild()和insertBefore()是两个常用的方法。它们可以实现对节点的添加或移动,但用法稍有不同。在本文中,我们将会详细解析这两…

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