博客
关于我
node.js 简易聊天室
阅读量:791 次
发布时间:2023-02-16

本文共 3622 字,大约阅读时间需要 12 分钟。

终端聊天室开发实例

项目概述

本项目旨在开发一个简易的终端聊天室系统,支持用户注册、发送广播消息以及点对点私信功能。以下将详细介绍系统的实现过程及相关技术细节。

服务器端配置

  • 目录结构
    要实现该功能,首先需要创建一个名为chatroom的目录,项目结构如下:
  • chatroom/├── config├── client.js├── server.js├── p2p.js├── broadcast.js├── signup.js└── package.json
    1. 配置文件
      config目录下创建一个config.js文件,内容如下:
    2. module.exports = {    port: 3000,    host: "127.0.0.1"}

      客户端实现

    3. 客户端连接
      客户端使用net库连接到服务器,具体实现如下:
    4. var net = require('net');var config = require('./config');var client = net.createConnection({    port: config.port,    host: config.host});// 用户注册处理client.on('connect', function() {    console.log('请输入用户名:');    process.stdin.on('data', function(data) {        data = data.trim();        if (!username) {            var send = {                protocol: 'signup',                username: data            };            client.write(JSON.stringify(send));            return;        }        // 消息处理逻辑        // ...    });});
      1. 消息发送与处理
        客户端支持两种消息类型:广播消息和点对点消息。具体实现如下:
      2. client.on('data', function(data) {    data = JSON.parse(data);    switch(data.protocol) {        case 'broadcast':            console.log(data.message);            break;        case 'p2p':            // 处理点对点消息            // ...            break;        default:            break;    }});

        服务器端实现

      3. 连接监听
        服务器监听客户端连接,处理不同类型的消息:
      4. var server = net.createServer();var users = {};server.on('connection', function(socket) {    socket.on('data', function(data) {        data = JSON.parse(data);        switch(data.protocol) {            case 'signup':                signup.handle(socket, data, users);                break;            case 'broadcast':                broadcast.handle(data, users);                break;            case 'p2p':                p2p.handle(socket, data, users);                break;            default:                break;        }    });    socket.on('error', function() {        console.log('客户端异常退出');    });});server.listen(config.port, config.host, function() {    console.log('服务器正在监听端口' + config.port);});

        消息处理模块

      5. 注册模块
        处理用户注册请求:
      6. exports.handle = function(socket, data, users) {    var username = data.username;    if (!users[username]) {        users[username] = socket;        socket.write(JSON.stringify({            protocol: 'signup',            code: 1000,            username: username,            message: '注册成功'        }));    } else {        socket.write(JSON.stringify({            protocol: 'signup',            code: 1001,            message: '用户名已存在,请重新输入'        }));    }};
        1. 广播模块
          广播消息至所有在线用户:
        2. exports.handle = function(data, users) {    var from = data.from;    var message = data.message;    message = from + ' 说:' + message;    var send = {        protocol: 'broadcast',        message: message    };    send = Buffer.from(JSON.stringify(send));    for (var username in users) {        var socket = users[username];        socket.write(send);    }};
          1. 点对点模块
            处理点对点消息:
          2. exports.handle = function(socket, data, users) {    var from = data.from;    var to = data.to;    var message = data.message;    var receiver = users[to];    if (!receiver) {        socket.write(JSON.stringify({            protocol: 'p2p',            code: 2001,            message: '用户不存在'        }));    } else {        socket.write(JSON.stringify({            protocol: 'p2p',            code: 2000,            from: data.from,            message: message        }));    }};

            项目部署

          3. 依赖安装
            首先安装必要的依赖:
          4. npm install net
            1. 运行说明
              在终端中执行以下命令:
              node server.js

              打开另一个终端窗口,执行:

              node client.js

              按照提示输入用户名即可开始使用聊天室系统。

            2. 系统功能

            3. 用户注册

              输入用户名后,系统会返回注册结果。

            4. 发送广播消息

              输入广播消息后,消息将实时发送至所有在线用户。

            5. 发送私信

              输入格式为<收件人>: 内容,将消息直接发送给指定用户。

            6. 接收消息

              系统会实时显示收到的消息,支持广播消息和私信。

            7. 总结

              通过以上实现,可以轻松创建一个功能齐全的终端聊天室系统。系统支持用户注册、发送广播消息和点对点私信,适合用于需要简单即时通信的场景。

    转载地址:http://jpjfk.baihongyu.com/

    你可能感兴趣的文章
    node, nvm, npm,pnpm,以前简单的前端环境为什么越来越复杂
    查看>>
    Node-RED中Button按钮组件和TextInput文字输入组件的使用
    查看>>
    vue3+Ts 项目打包时报错 ‘reactive‘is declared but its value is never read.及解决方法
    查看>>
    Node-RED中Switch开关和Dropdown选择组件的使用
    查看>>
    Node-RED中使用exec节点实现调用外部exe程序
    查看>>
    Node-RED中使用function函式节点实现数值计算(相加计算)
    查看>>
    Node-RED中使用html节点爬取HTML网页资料之爬取Node-RED的最新版本
    查看>>
    Node-RED中使用JSON数据建立web网站
    查看>>
    Node-RED中使用json节点解析JSON数据
    查看>>
    Node-RED中使用node-random节点来实现随机数在折线图中显示
    查看>>
    Node-RED中使用node-red-browser-utils节点实现选择Windows操作系统中的文件并实现图片预览
    查看>>
    Node-RED中使用node-red-contrib-image-output节点实现图片预览
    查看>>
    Node-RED中使用node-red-node-ui-iframe节点实现内嵌iframe访问其他网站的效果
    查看>>
    Node-RED中使用Notification元件显示警告讯息框(温度过高提示)
    查看>>
    Node-RED中使用range范围节点实现从一个范围对应至另一个范围
    查看>>
    Node-RED中实现HTML表单提交和获取提交的内容
    查看>>
    Vue3+elementplus实现图片上传下载(最强实践)
    查看>>
    Node-RED中将CSV数据写入txt文件并从文件中读取解析数据
    查看>>
    Node-RED中建立TCP服务端和客户端
    查看>>
    Node-RED中建立Websocket客户端连接
    查看>>