node.js 用socket实现聊天的示例代码

下面是讲解“node.js用socket实现聊天的示例代码的完整攻略”。

1.准备工作

首先,我们需要准备node.js环境。你可以在官网上下载对应的安装包,安装完成后,打开命令行工具,输入命令 node -v,如果命令行中输出你的node.js版本号,则说明你已经成功安装node.js环境。如果没有,则需要重新检查安装。

接下来,我们需要安装socket.io模块,可以使用npm来安装。进入命令行终端,输入命令npm install socket.io --save

2.代码实现

具体实现过程中,首先需要创建一个简单的聊天室页面,然后,通过socket技术将网页与服务端实现双向通信,即服务器可以向客户端发送消息,客户端也可以向服务器发送消息,从而实现聊天室的实时交互。

这里我们先给出服务端的代码。

var app = require('http').createServer(handler)
var io = require('socket.io')(app);
var fs = require('fs');

app.listen(3000);

function handler (req, res) {
  fs.readFile(__dirname + '/index.html',
  function (err, data) {
    if (err) {
      res.writeHead(500);
      return res.end('Error loading index.html');
    }
    res.writeHead(200);
    res.end(data);
  });
}

io.on('connection', function (socket) {
  socket.emit('message', {message: 'Welcome to the chat room!'});
  socket.on('send', function (data) {
    io.sockets.emit('message', data);
  });
});

上面代码是一个非常简单的node.js程序,其中:

  • 引入http、socket.io和fs模块;
  • 创建一个http服务器并将其连接到socket.io上;
  • 设置服务器监听3000端口,启动成功则可打开浏览器访问页面;
  • 如果发现错误,则返回错误信息;
  • 当客户端与服务器建立连接时,发送欢迎消息;
  • 当客户端发送消息时,将消息发送给所有客户端。

客户端的代码可以采用index.html实现,关键代码如下:

<!DOCTYPE html>
<html>
<head>
  <meta charset="utf-8">
  <meta http-equiv="X-UA-Compatible" content="IE=edge">
  <title>Chat Room</title>
  <script src="https://cdn.socket.io/socket.io-1.4.5.js"></script>
</head>
<body>
  <ul id="messages"></ul>
  <div class="chat-box">
    <form id="chatForm" action="">
      <input id="m" autocomplete="off">
      <button>Send</button>
    </form>
  </div>
  <script>
    var socket = io();
    socket.on('message', function (data) {
      var li = document.createElement('li');
      li.innerHTML = data.message;
      document.getElementById("messages").appendChild(li);
    });

    var form = document.getElementById('chatForm');
    var message = document.getElementById('m');
    var messages = document.getElementById('messages');

    form.onsubmit = function() {
      socket.emit('send', { username: 'me', message: message.value });
      message.value = '';
      return false;
    };
  </script>
</body>
</html>

签到我们的文本区域,还有一个很重要的点,就是md格式的代码块引用需要使用 ``` (也就是键盘的数字1左边那个键)来进行引用,建议注意一下。

3.详细说明

以上两段代码分别对应的是服务端和客户端的代码,实现一个简单的聊天,其实核心内容就是要实现双向socket通信,在这个之前我们可以先了解一下socket。

  • 什么是socket
    Socket是一种特殊的文件,一个进程可以打开该文件,并和其他进程交换数据,WinSock保留了UNIX中关于socket的概念和函数,实现跨越网络通信,被列入IETF文档(RFC 793)。

简单来说,Socket就是任意两个程序间的通讯渠道。

对于 node.js来说,socket.io是一个非常便捷的开发库,它可在webSocket没有得到广泛支持的时代,提供浏览器和服务器之间实时双向通信的功能。它既可以在客户端也可以在服务器端运行,基于socket.io,可以轻松实现客户端和服务端之间的socket通信。

  • socket.io 的流程

使用socket.io实现聊天的最重要的一点是要理解它的通信流程,即如何通过socket.io实现客户端和服务端之间的双向通信。

首先是建立连接

进入一个页面后客户端通过 io() 连接到Websocket服务器上;
创建一个WebSocket连接,这个连接是HTTP的一个握手过程,交由HTTP协议进行,HTTP协议过程中会在客户端和服务端之间进行一次握手过程,从而形成一个持久的连接。

客户端和服务端分别对应处理

每个socket维护了一个客户端(浏览器)和服务器之间的连接
服务端监听所有的socket连接,客户端监听特定的socket连接;
通信只能通过这个socket进行,即初始sessionId已经确定,直接通过sessionId就可以完成消息的推送。

然后就是处理交互

socket.on(): 监听客户端事件
sock.emit(): 触发服务器事件
sock.broadcast.emit(): 广播(除自己以外的客户端都可以收到)。
io.sockets.socket(clientid).emit(): 指定用户发送消息。
io.sockets.emit() : 全局广播,从而实现实时性的聊天通信。

最后就是断开连接

客户端断开连接后,服务器监听到disconnect事件,进行后续的处理。
根据 socket.io api 提供的 socket.disconnect([close]) ,服务端可以关闭当前的 socket 连接。

以上就是socket.io的通信流程和方法,动手实现一下这个小小的聊天室也是很有意思的。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:node.js 用socket实现聊天的示例代码 - Python技术站

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

相关文章

  • Node.js HTTP服务器中的文件、图片上传的方法

    Node.js提供了http模块作为内置的HTTP服务器,在其中可以实现文件上传和图片上传的功能。以下是完整攻略: 文件上传 前置条件 在实现文件上传之前,需要安装formidable模块。可以通过运行以下命令安装: npm install formidable 代码示例 const http = require(‘http’); const fs = re…

    node js 2023年6月8日
    00
  • Nodejs Sequelize手册学习快速入门到应用

    Node.js 是一种流行的服务器端 JavaScript 运行环境,而 Sequelize 是一款基于 Node.js 的ORM 库,其可以支持多种数据库,如MySQL、PostgreSQL、SQLite 和 Microsoft SQL Server。Sequelize具有易学易用的特点,从 Sequelize的官方文档开始入手,可以快速学习和开发 Seq…

    node js 2023年6月8日
    00
  • 使用ngrok+express解决本地环境中微信接口调试问题

    下面是使用ngrok+express解决本地环境中微信接口调试问题的完整攻略: 1. 什么是ngrok ngrok是一款基于Go语言开发的反向代理应用程序,可以将本地服务映射到公网访问地址,支持http、https、tcp等多种协议。即使是在家里或者公司网络环境下,使用ngrok也可以让外部计算机通过Internet访问本地的应用程序。 2. 安装和配置ng…

    node js 2023年6月8日
    00
  • 解决Nodejs全局安装模块后找不到命令的问题

    当我们使用npm全局安装某个模块时,有时候我们会遇到找不到命令的问题。这是由于Node.js全局安装路径未在系统PATH环境变量中设置的缘故。我们可以按照以下步骤来解决这个问题: 1.找到全局安装路径 使用以下命令可以查看当前Node.js全局安装的路径: npm root -g 该命令会输出Node.js全局安装路径,例如: /usr/local/lib/…

    node js 2023年6月8日
    00
  • Node.JS中快速扫描端口并发现局域网内的Web服务器地址(80)

    完成该任务需要涉及到以下几个步骤: 导入相关模块 获取本机IP地址及子网掩码 构建IP地址范围 扫描IP地址范围 发现Web服务器并输出地址 具体实现情况如下: 导入相关模块 在开始之前,需要导入以下几个Node.js核心模块: const os = require(‘os’); const net = require(‘net’); const {work…

    node js 2023年6月8日
    00
  • 如何在Express4.x中愉快地使用async的方法

    下面是“如何在Express4.x中愉快地使用async的方法”的完整攻略: 1. 安装async 在使用async之前,需要先在项目中安装: npm install async –save 2. 使用async 2.1 async.series async.series可以让我们按顺序执行一组任务,每个任务完成后再执行下一个任务,直到所有任务全部完成。 …

    node js 2023年6月8日
    00
  • 开发Node CLI构建微信小程序脚手架的示例

    下面是完整的攻略: 开发Node CLI构建微信小程序脚手架的示例 1. 确定开发工具和技术栈 作为一名网站开发者,我们需要使用一些工具来开发Node CLI。这里我们推荐使用Node.js作为开发环境,并借助yargs和fs-extra这两个依赖库进行开发。 2. 创建项目和安装依赖 首先,我们需要在本地创建一个新的Node.js项目,并安装yargs和f…

    node js 2023年6月8日
    00
  • JavaScript数据结构与算法之二叉树实现查找最小值、最大值、给定值算法示例

    JavaScript数据结构与算法之二叉树实现查找最小值、最大值、给定值算法示例 二叉树简介 二叉树是一种非常重要的数据结构,它可以给我们提供高效的算法实现,如查找、插入、删除等。二叉树是由节点(node)构成的,每个节点最多只有两个子节点。在 JavaScript 中,我们可以用对象的形式来表示一个二叉树节点,如下: class Node { constr…

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