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日

相关文章

  • nodeJs事件循环运行代码解析

    Node.js 中的事件循环是它最核心的功能之一,也是理解 Node.js 架构和异步编程的关键所在。下面我将为您详细讲解“nodeJs事件循环运行代码解析”的完整攻略。 什么是事件循环 事件循环是一种特殊的程序运行机制,用于处理事件和调度回调函数的顺序。在 Node.js 中,事件循环被称作“Event Loop”,是整个执行机制的核心。Node.js 中…

    node js 2023年6月8日
    00
  • node.js快速部署vue代码详细步骤

    下面是“node.js快速部署vue代码详细步骤”的完整攻略: 前置条件 在进行本攻略之前必须确保你已经满足以下条件: 已经安装了Node.js。 已经安装了Vue CLI(可通过运行npm install -g @vue/cli安装)。 对于第二个示例,必须拥有一台可以访问公网的服务器。 步骤 第一步:创建Vue项目 在命令行中运行以下命令: vue cr…

    node js 2023年6月8日
    00
  • NodeJs实现简易WEB上传下载服务器

    下面我将详细讲解“NodeJs实现简易WEB上传下载服务器”的完整攻略。 简介 本攻略介绍如何使用Node.js实现一个简单的WEB上传下载服务器。 准备工作 在开始实现本题之前,需要确保你已经安装了Node.js和npm。 创建项目并添加依赖 首先,创建一个文件夹作为你的工作目录,进入该文件夹,打开命令行工具,输入以下命令: npm init 按照提示,完…

    node js 2023年6月8日
    00
  • Node.js的包详细介绍

    对于“Node.js的包详细介绍”,以下是一份完整攻略。 什么是Node.js的包? Node.js的包(也称为模块)是由NPM(Node Package Manager)或者Yarn进行管理的一组代码集合,它们可以被轻松地安装、升级、删除同时使用。它们是由JavaScript编写的、被分层组织、并且容易复用。 Node.js的包在Node.js应用程序中广…

    node js 2023年6月8日
    00
  • JavaScript树结构深度优先算法

    让我来为你详细讲解JavaScript的树结构深度优先算法,树结构深度优先算法又被称为DFS算法。 什么是树结构深度优先算法? 树结构深度优先算法指的是通过优先遍历一棵树或图的深层次节点来查找目标值的一种算法。这种算法主要基于递归的方式,遍历整棵树并递归进入每一个子节点。如果找到目标值,则停止搜索并返回结果,否则递归回溯到上一层节点继续搜索。 实现步骤 创建…

    node js 2023年6月8日
    00
  • 详解JWT与Token的应用与原理

    详解JWT与Token的应用与原理 什么是JWT JWT(JSON Web Token)是一种用于网络通信的协议,主要用来在网络应用之间传递认证及授权数据。JWT 将用户信息进行编码,形成一个字符串并将其发送到客户端,在客户端需要访问受保护的资源时,将其发送回服务器进行验证。JWT 是有状态的,因为其中包含了用户的信息,而服务器在解析 Token 时,会将其…

    node js 2023年6月8日
    00
  • nodejs npm install全局安装和本地安装的区别

    nodejs是一款非常流行的服务器端JavaScript运行环境,npm是随之而来的nodejs的官方软件包管理器。npm提供了全局安装和本地安装两种方式,它们的区别如下。 全局安装 全局安装是指在全局环境下安装指定的软件包,这样该软件包就可以被任何项目所调用。全局安装是通过在命令行中使用-g选项进行安装的。例如: npm install -g 包名 全局安…

    node js 2023年6月8日
    00
  • 一个简单的node.js界面实现方法

    好的!下面是针对“一个简单的node.js界面实现方法”的完整攻略。 什么是Node.js? Node.js是一种服务器端运行时环境,它基于V8引擎,它的特点是轻量、高效、支持事件驱动、非阻塞IO等特性。开发者可以用Node.js快速地开发出高性能的网络应用程序。 如何搭建Node.js环境? 前往Node.js官网(https://nodejs.org/)…

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