node+socket实现简易聊天室功能

yizhihongxing

下面是使用node+socket实现简易聊天室功能的完整攻略:

一、安装Node.js

Node.js是一个JavaScript运行时环境,可以使用JavaScript进行服务器端编程。我们需要在本地先安装Node.js才能进行后续操作。

二、安装Socket.io

Socket.io是一个实现实时双向通信的JavaScript库。我们可以使用Socket.io来构建聊天室程序。安装方法:

npm install socket.io

三、简易聊天程序示例

下面是一个简易聊天程序的示例:

  1. HTML文件
<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <title>Socket.io 聊天室示例</title>
</head>
<body>
    <ul id="messages"></ul>
    <form action="">
        <input id="m" autocomplete="off"/>
        <button>发送</button>
    </form>
    <script src="/socket.io/socket.io.js"></script>
    <script src="https://cdn.bootcss.com/jquery/3.3.1/jquery.min.js"></script>
    <script>
        var socket = io();
        $('form').submit(function(e){
            e.preventDefault();
            socket.emit('chat message', $('#m').val());
            $('#m').val('');
            return false;
        });
        socket.on('chat message', function(msg){
            $('#messages').append($('<li>').text(msg));
        });
    </script>
</body>
</html>
  1. 服务器代码
const express = require('express');
const app = express();

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

app.get('/', function(req, res){
    res.sendFile(__dirname + '/index.html');
});

io.on('connection', function(socket){
    socket.on('chat message', function(msg){
        io.emit('chat message', msg);
    });
});

http.listen(3000, function(){
    console.log('listening on *:3000');
});

这个简单的聊天程序的意思是:当用户在页面上输入消息并点击“发送”按钮时,使用Socket.io客户端将消息发送到服务器,然后服务器会再次使用Socket.io将此消息发送到所有客户端。

四、进阶实例

下面是一个更完整的聊天程序实例,其中包含用户登录、房间选择等功能:

  1. HTML文件
<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <title>Socket.io 聊天室示例</title>
</head>
<body>
    <div id="login">
        <h2>登录</h2>
        <form>
            <div>
                <label>用户名:</label>
                <input type="text" name="username" id="username"/>
            </div>
            <div>
                <label>密码:</label>
                <input type="text" name="password" id="password"/>
            </div>
            <div>
                <button id="loginBtn">登录</button>
            </div>
        </form>
    </div>
    <div id="chat" style="display:none">
        <h2>聊天室</h2>
        <div id="channels">
            <h3>选择一个房间</h3>
            <ul id="channelList"></ul>
        </div>
        <div id="chatBox" style="display:none">
            <ul id="messages"></ul>
            <form>
                <input type="text" name="message" id="message" autocomplete="off"/>
                <button id="sendBtn">发送</button>
            </form>
        </div>
    </div>
    <script src="/socket.io/socket.io.js"></script>
    <script src="https://cdn.bootcss.com/jquery/3.3.1/jquery.min.js"></script>
    <script>
        var socket = io();
        $('#loginBtn').on('click', function(e){
            e.preventDefault();
            var username = $('#username').val();
            var password = $('#password').val();
            socket.emit('login', {username: username, password: password});
        });
        socket.on('login success', function(user){
            $('#login').hide();
            $('#chat').show();
            for(var i = 0; i < user.channels.length; i++) {
                var channel = user.channels[i];
                $('#channelList').append('<li><a href="#" data-channel="' + channel + '">' + channel + '</a></li>');
            }
        });
        $(document).on('click', '#channelList a', function(e){
            e.preventDefault();
            var channel = $(this).data('channel');
            $('#channels').hide();
            $('#chatBox').show();
            $('#messages').empty();
            socket.emit('join channel', channel);
        });
        $('#sendBtn').on('click', function(e){
            e.preventDefault();
            var message = $('#message').val();
            socket.emit('chat message', message);
            $('#message').val('');
        });
        socket.on('chat message', function(data){
            $('#messages').append($('<li>').text(data.username + ': ' + data.message));
        });
    </script>
</body>
</html>
  1. 服务器代码
const express = require('express');
const app = express();

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

const users = [];

app.get('/', function(req, res){
    res.sendFile(__dirname + '/index.html');
});

io.on('connection', function(socket){
    socket.on('login', function(data){
        var user = {username: data.username, channels: ['公共频道']};
        users.push(user);
        socket.emit('login success', user);
    });
    socket.on('join channel', function(channel){
        socket.join(channel);
    });
    socket.on('chat message', function(msg){
        var user = null;
        for(var i = 0; i < users.length; i++) {
            if(users[i].username === socket.client.conn.remoteAddress) {
                user = users[i];
                break;
            }
        }
        if(user === null) {
            throw new Error('无效的用户');
        }
        var message = {username: user.username, message: msg};
        io.emit('chat message', message);
    });
});

http.listen(3000, function(){
    console.log('listening on *:3000');
});

这个聊天程序包含了用户登录和房间选择的功能。当用户点击“登录”按钮时,客户端将用户名和密码发送到服务器进行验证。如果验证成功,服务器会将用户添加到用户列表中,并向客户端发送“login success”消息。然后,客户端会显示一个包含各种房间的列表,用户可以选择其中的一个。客户端将所选频道名称发送到服务器,并加入该频道。在聊天室中,当用户提交表单发送消息时,客户端会向服务器发送“chat message”消息,同时将消息显示在页面上。服务器再将此消息广播到所有客户端。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:node+socket实现简易聊天室功能 - Python技术站

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

相关文章

  • 使用node.JS中的url模块解析URL信息

    使用node.js中的url模块可以方便地解析URL信息,以下是解析URL信息的完整攻略: 引入url模块 要使用url模块,首先需要在代码中引入该模块,可以使用require函数来实现: const url = require(‘url’); 使用url.parse()方法解析URL url模块提供了url.parse()方法,该方法可以接收一个URL字符…

    node js 2023年6月8日
    00
  • 如何使用Node写静态文件服务器

    下面是详细的Node静态文件服务器搭建攻略。 1. 安装Node.js 在开始之前,你需要先安装Node.js。如果你还没有安装,请到 Node.js官网 下载合适的版本并安装。 2. 创建项目文件夹并初始化 我们首先需要在本地创建一个项目文件夹,并在其中初始化一个Node.js的项目。 创建项目文件夹(例如,在桌面上创建一个名为 node-server 的…

    node js 2023年6月8日
    00
  • nodejs中使用archive压缩文件的实现代码

    要在 Node.js 中使用 Archive 压缩文件,我们可以使用 node-archiver 库。该库提供了一组简单的 API,可以方便地进行压缩文件操作。 以下是使用 node-archiver 压缩文件的步骤: 步骤 1:安装 node-archiver 库 在终端或命令提示符中,使用以下命令安装 node-archiver: npm install…

    node js 2023年6月8日
    00
  • 详解Node.js 中使用 ECDSA 签名遇到的坑

    详解Node.js 中使用 ECDSA 签名遇到的坑 什么是ECDSA ECDSA,全称椭圆曲线数字签名算法(Elliptic Curve Digital Signature Algorithm),是一种基于椭圆曲线密码学的签名算法。与传统的RSA、DSA等算法相比,ECDSA在强度和速度方面都有很大的优势。 Node.js中使用ECDSA签名 在Node.…

    node js 2023年6月8日
    00
  • javascript中的107个基础知识收集整理 推荐

    JavaScript基础知识收集整理攻略 概述 近年来,JavaScript在Web领域的应用越来越广泛,成为Web开发人员必备技能之一。为了帮助大家更好地学习JavaScript,本攻略汇总总结了107个JavaScript基础知识,包括变量、数据类型、数组、函数、对象等,从而帮助初学者更好地掌握JavaScript编程。 变量 变量的定义 变量是存储数据…

    node js 2023年6月8日
    00
  • node.js三个步骤实现一个服务器及Express包使用

    下面我来详细讲解“node.js三个步骤实现一个服务器及Express包使用”的完整攻略: 第一步:创建服务器 在node.js中创建一个服务器,可以使用内置模块http,具体步骤如下: 1.引入http模块 const http = require(‘http’); 2.创建服务器实例 const server = http.createServer((r…

    node js 2023年6月8日
    00
  • Javascript模块化机制实现原理详解

    关于“Javascript模块化机制实现原理详解”的攻略,我将分为以下几个部分逐一详细讲解。 什么是Javascript模块化 Javascript模块化就是将一个复杂的程序按照一定规则封装成一个或若干个块,每个块都有明确的接口,依赖关系明确,可以方便地进行组合、编写、调试和维护。目前主流的Javascript模块化规范有CommonJS、AMD、CMD以及…

    node js 2023年6月8日
    00
  • node以及npm版本不对应出错的完美解决方法

    当我们在使用npm安装依赖或者使用node运行程序的时候,可能会遇到版本不对应的问题,导致程序无法正常运行。这时候我们需要解决版本不对应的问题,下面我将为大家介绍一种完美解决方法。 问题 在使用npm安装依赖或者使用node运行程序的时候,可能会遇到以下错误提示: Error: Unsupported Node.js version FATAL ERROR:…

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