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

yizhihongxing

下面是讲解“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后端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 中,访问文件目录是一个常见的操作。本文将介绍如何在 Node.js 中进入文件目录的问题。 获取当前文件目录 要获取当前文件所在的目录,可以使用 __dirname 变量。__dirname 变量包含当前模块文件所在的完整路径。 下面是一个使用 __dirname 变量获取当前目录的示例: co…

    node js 2023年6月8日
    00
  • vue-cli构建vue项目的步骤详解

    下面我就为您详细讲解“vue-cli构建vue项目的步骤详解”的攻略。 步骤一:安装Node.js 要安装Vue CLI,首先需要安装Node.js。可以从官方网站 https://nodejs.org/zh-cn/ 上下载安装。 步骤二:安装Vue CLI 使用npm全局安装Vue CLI: npm install -g @vue/cli 如果您已经安装了…

    node js 2023年6月8日
    00
  • node.js集成百度UE编辑器

    下面是关于“node.js集成百度UE编辑器”的完整攻略。 1. 确认依赖环境 首先,在集成百度UE编辑器前,要先确认环境中是否已经安装: Node.js Express框架 如果没有安装,需要先安装。 2. 安装UEditor 在确认依赖环境安装完毕后,需要安装UEditor。可以按照以下步骤进行安装。 2.1 下载UEditor 在百度UEditor的官…

    node js 2023年6月8日
    00
  • 详解CocosCreator系统事件是怎么产生及触发的

    CocosCreator是一款常用的游戏开发引擎,其中系统事件在游戏开发中起着非常重要的作用。本文将详细讲解CocosCreator系统事件是怎么产生及触发的,帮助开发者更好地理解和掌握CocosCreator的事件系统。 什么是系统事件 在CocosCreator中,事件是指由引擎或用户发起的一种通信方式。当某些事情发生时,可以通过事件来通知其他需要知道的…

    node js 2023年6月8日
    00
  • 基于JavaScript实现树形下拉框

    下面就是基于JavaScript实现树形下拉框的完整攻略。 1.什么是树形下拉框 树形下拉框是一个多级菜单,其中每一个下拉选项都可以展开下级选项,类似于目录结构。它可以有效地帮助用户快速准确地选择他们需要的选项。 2.实现树形下拉框的方法 实现树形下拉框的方法可以进行如下步骤: 2.1 准备数据 首先需要准备好树形结构的数据,数据的格式通常是嵌套数组或嵌套对…

    node js 2023年6月8日
    00
  • nodejs的require模块(文件模块/核心模块)及路径介绍

    当我们在 Node.js 中编写代码时,我们通常需要使用一些外部的模块或者 Node.js 自带的一些模块。在 Node.js 中,我们可以通过使用 require 方法来引入所需要的模块,这个方法接受一个参数,表示要引入的模块的名称或路径。 文件模块 文件模块是我们写的一些自定义的模块,这些模块的代码通常包含在一个 JavaScript 文件中。我们可以通…

    node js 2023年6月8日
    00
  • nodejs中转换URL字符串与查询字符串详解

    当我们使用 Node.js 创建 Web 应用程序时,有时需要处理 URL 字符串和查询字符串。为了方便地解析和操作这些字符串,Node.js 提供了一个内置的模块 url。 解析 URL 字符串 使用 url.parse() 方法可以将一个 URL 字符串解析为一个 URL 对象,URL 对象中包含了协议、主机、路径、查询字符串等信息。 以下是一个示例: …

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