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

yizhihongxing

我来为您讲解一下“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日

相关文章

  • Express连接MySQL及数据库连接池技术实例

    下面是关于“Express连接MySQL及数据库连接池技术实例”的完整攻略。 简介 在 Express 应用中,我们经常需要使用 MySQL 数据库来存储数据。本文将介绍如何使用 Node.js 的 mysql 模块连接 MySQL 数据库,并使用连接池技术实现高效的数据库连接。 步骤 1. 安装 mysql 模块 在使用 mysql 模块连接 MySQL …

    node js 2023年6月8日
    00
  • 详解如何使用Node.js编写命令工具——以vue-cli为例

    详解如何使用Node.js编写命令工具——以vue-cli为例 什么是Node.js命令行工具 Node.js是一个基于Chrome V8引擎的JavaScript运行环境,让JavaScript可以脱离浏览器作为一个独立的应用程序运行。在Node.js中,我们可以通过Node.js命令行工具来执行一些特定的任务,例如初始化一个项目、创建文件、打包编译等操作…

    node js 2023年6月8日
    00
  • nodeJs实现基于连接池连接mysql的方法示例

    接下来我会为您详细讲解“Node.js实现基于连接池连接MySql的方法示例”的攻略。 步骤一:安装mysql模块 在开始使用Node.js连接MySQL数据库之前,需要先安装Node.js的MySQL模块。可以使用npm包管理器进行安装,具体命令如下: npm install mysql –save 安装完成后,可以使用以下代码测试是否成功安装: con…

    node js 2023年6月9日
    00
  • node 命令方式启动修改端口的方法

    当我们使用Node.js开发Web应用程序时,常常需要在本地电脑启动一个Web服务器。在启动Web服务器时,我们需要指定Web服务器监听的端口号。通常,我们可以通过命令行运行如下命令,来启动Web服务器并指定端口号: node index.js 3000 上述命令会启动一个名为 index.js 的 Node.js 应用程序,并且指定该应用程序监听3000端…

    node js 2023年6月8日
    00
  • 利用forever和pm2部署node.js项目过程

    下面是详细的“利用forever和pm2部署node.js项目过程”的攻略。 概述 在使用Node.js开发Web项目时,我们需要将我们的Node.js应用程序部署到服务器上,然后运行该程序。常用的Node.js应用程序部署工具有forever和pm2。 无论你选择哪个工具,它们都能够确保你的Node.js应用程序在服务器上长时间稳定的运行。同时,它们还可以…

    node js 2023年6月8日
    00
  • Node.js的npm包管理器基础使用教程

    那么我们就开始来详细讲解一下“Node.js的npm包管理器基础使用教程”的完整攻略。 什么是npm包管理器? npm是Node.js的包管理器,可以通过npm来安装、升级、卸载与管理Node.js模块和包。npm是随同Node.js一起安装的,当你安装Node.js之后,npm就已经安装好了。 如何使用npm包管理器? 1. 初始化项目 在一个项目文件夹内…

    node js 2023年6月8日
    00
  • 整理 node-sass 安装失败的原因及解决办法(小结)

    整理 node-sass 安装失败的原因及解决办法(小结) 问题描述 在使用npm安装node-sass时,可能会遇到以下错误: gyp ERR! configure error gyp ERR! stack Error: Can’t find Python executable "python", you can set the PYT…

    node js 2023年6月8日
    00
  • nodejs微信公众号支付开发

    Node.js 微信公众号支付开发的完整攻略包括以下几个步骤: 创建微信支付账号 首先需要注册一个微信支付账号,并完成身份验证。在微信公众平台中,可以进入“设置-商户信息”页面,完成相关信息的填写和提交。 获取微信支付API密钥 在微信支付账号中,可以进入“设置-API安全”页面,生成一个32位的API密钥。这个密钥用于后面的签名校验和数据通信。 配置开发环…

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