nodejs结合Socket.IO实现的即时通讯功能详解

yizhihongxing

Node.js结合Socket.IO实现的即时通讯功能详解

什么是Socket.IO

Socket.IO 是一个 JavaScript 库,用于实现实时、双向、基于事件的通信。它可在不同的浏览器和操作系统下使用,并与任何服务端 -- 不论它是基于 Node.js 的还是不是 -- 兼容。它主要用于实现即时通讯功能,例如聊天室、弹幕等。

实现 Socket.IO

安装依赖

我们可以使用 npm(Node.js 自带的包管理器)来安装 Socket.IO。

npm install socket.io

服务端代码

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

// 监听端口
http.listen(3000, () => {
  console.log('listening on *: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>Socket.IO chat</title>
  <script src="/socket.io/socket.io.js"></script>
  <script src="https://code.jquery.com/jquery-1.11.1.js"></script>
  <style>
    * { margin: 0; padding: 0; box-sizing: border-box; }
    body { font: 13px Helvetica, Arial; }
    form { background: #000; padding: 3px; position: fixed; bottom: 0; width: 100%; }
    form input { border: 0; padding: 10px; width: 90%; margin-right: .5%; }
    form button { width: 9%; background: rgb(130, 224, 255); border: none; padding: 10px; }
    #messages { list-style-type: none; margin: 0; padding: 0; }
    #messages li { padding: 5px 10px; }
    #messages li:nth-child(odd) { background: #eee; }
  </style>
</head>
<body>
  <ul id="messages"></ul>
  <form action="">
    <input id="m" autocomplete="off" /><button>Send</button>
  </form>
  <script>
    const socket = io();
    // 监听聊天消息事件
    socket.on('chat message', (msg) => {
      console.log('message: ' + msg);
      // 插入消息到页面
      $('#messages').append($('<li>').text(msg));
      // 滚动显示
      window.scrollTo(0, document.body.scrollHeight);
    });
    // 发送消息
    $('form').submit(() => {
      // 发送消息事件
      socket.emit('chat message', $('#m').val());
      $('#m').val('');
      return false;
    });
  </script>
</body>
</html>

示例说明

示例一

我们可以使用 Node.js 和 Socket.IO 实现一个简单的聊天室。

首先,我们需要建立服务端和客户端的连接。在服务端,我们监听 connection 事件,获取客户端的连接。在客户端,我们使用 io() 方法创建连接。

// 服务端
const io = require('socket.io')(http);
io.on('connection', (socket) => {
  console.log('a user connected');
});

// 客户端
const socket = io();

然后,我们需要监听客户端发送的消息,和向客户端发送消息。在服务端,我们监听 chat message 事件,获取消息内容并广播给连接的其他客户端。在客户端,我们监听 chat message 事件,向页面插入消息。

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

// 客户端
socket.on('chat message', (msg) => {
  $('#messages').append($('<li>').text(msg));
  window.scrollTo(0, document.body.scrollHeight);
});

示例二

我们可以使用 Node.js 和 Socket.IO 实现一个多人弹幕功能。

首先,我们需要建立服务端和客户端的连接。同样地,在服务端,我们监听 connection 事件,获取客户端的连接。在客户端,我们使用 io() 方法创建连接。

// 服务端
const io = require('socket.io')(http);
io.on('connection', (socket) => {
  console.log('a user connected');
});

// 客户端
const socket = io();

然后,我们需要监听客户端发送的弹幕消息,和向客户端发送弹幕。在服务端,我们监听 bullet 事件,获取弹幕内容并广播给连接的其他客户端。在客户端,我们向服务端发送弹幕消息,并将其显示在页面上。

// 服务端
socket.on('bullet', (msg) => {
  console.log('bullet: ' + msg);
  io.emit('bullet', msg);
});

// 客户端
socket.emit('bullet', message);
$('<p>', {
  text: message,
  style: `top: ${position}px; color: ${color}; font-size: ${size}px;`
}).appendTo('#bullet-container');

注意,我们需要给每一个弹幕一个随机的显示颜色、字体大小和显示位置。这可以使用 JavaScript 生成随机数来实现。

const color = getRandomColor();
const size = getRandomSize();
const position = getRandomPosition();

完整的示例代码可以在这里找到:Node.js 和 Socket.IO 实现的多人弹幕

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

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

相关文章

  • 如何用nodejs搭建代理服务器

    下面是关于如何用Node.js搭建代理服务器的攻略。 简介 代理服务器是一种位于客户端与目标服务器之间的服务器,用于转发客户端请求,使得客户端能够通过代理服务器与目标服务器进行数据通信。通常代理服务器可以提供更快的速度、更高的安全性、过滤内容、缓存静态内容等诸多功能。Node.js作为目前最为流行的后端JavaScript技术,也可以利用其强大的网络库和Ja…

    node js 2023年6月8日
    00
  • 浅析Node.js的Stream模块中的Readable对象

    浅析Node.js的Stream模块中的Readable对象 前言 在Node.js中,Stream是一个基础模块之一,负责处理数据流。它主要分为可写流(Writable)、可读流(Readable)以及双工流(Duplex)和转换流(Transform)四种类型。其中,我们今天将会重点探讨可读流(Readable)的属性和方法,以及如何使用它从流中读取数据…

    node js 2023年6月8日
    00
  • Node后端Express框架安装及应用

    安装Express框架: 1.首先需要安装Node.js,可以前往Node.js官网下载相应版本的安装包并完成安装。 2.打开命令行工具,输入以下命令安装Express框架: npm install express –save 其中,–save选项将安装的内容添加进package.json文件中,方便后续依赖管理。 3.在项目目录下创建app.js文件,…

    node js 2023年6月8日
    00
  • Node.js的基本应用你知道多少

    Node.js的基本应用攻略 Node.js是一种基于Chrome V8引擎的JavaScript运行环境,它能使JavaScript代码运行在服务器端。下面将介绍使用Node.js的基本应用。 安装Node.js 要使用Node.js,需要首先在计算机上安装它。可以在官网https://nodejs.org/上下载相关的安装程序。安装完成后,可以通过以下命…

    node js 2023年6月8日
    00
  • nodejs npm包管理的配置方法及常用命令介绍

    Node.js npm包管理的配置方法及常用命令介绍 配置方法 安装 Node.js Node.js官网上提供了常规的安装方式,具体可见https://nodejs.org/zh-cn/download/。不过由于 Node.js 需要依赖于系统的 C++ 编译环境,如果你在安装过程中遇到问题,可以考虑使用编译好的二进制程序安装 Node.js,例如 nvm…

    node js 2023年6月8日
    00
  • 基于JS实现一个小型编译器

    以下是基于JS实现一个小型编译器的完整攻略,主要分为以下几个步骤: 1. 定义语法规则 在实现编译器前,我们需要定义一套自己的语法规则。在本次示例中,我们定义一个类似于计算器的语法规则,包含四则运算、括号和变量赋值等功能。 program ::= statement* statement ::= expression | assignment express…

    node js 2023年6月8日
    00
  • Node.js+Express配置入门教程

    对于“Node.js+Express配置入门教程”的详细讲解,我将分为以下几个部分: Node.js简介 Express框架介绍 Node.js+Express项目搭建 配置路由及返回数据 示例说明1:返回JSON格式数据 示例说明2:返回静态HTML页面 接下来,我将对每个部分进行详细的讲解。 1. Node.js简介 Node.js是一个基于Chrome…

    node js 2023年6月8日
    00
  • node.js中事件触发器events的使用方法实例分析

    我们就来详细讲解一下“node.js中事件触发器events的使用方法实例分析”。 什么是Events? Events是 Node.js 的内置模块,用于实现异步事件驱动的架构。在node.js中,很多函数都支持事件回调的方式进行使用,例如HTTP服务的request事件、file模块的readfile事件等。 Node.js 中的许多对象都会分发事件:一个…

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