从零开始写一个 即时通讯程序

news2024/12/23 17:48:21

即时通信(IM)是指能够即时发送和接收互联网消息等的业务。自1998年面世以来,特别是近几年的迅速发展,即时通信的功能日益丰富,逐渐集成了电子邮件、博客、音乐、电视、游戏和搜索等多种功能。即时通信不再是一个单纯的聊天工具,它已经发展成集交流、资讯、娱乐、搜索、电子商务、办公协作和企业客户服务等为一体的综合化信息平台。

如何在 Web 实现?

WebSocket协议是基于TCP的一种新的网络协议。它实现了浏览器与服务器全双工(Full-duplex)通信,即允许服务器主动发送信息给客户端。因此,在WebSocket中,浏览器和服务器只需要完成一次握手,两者之间就直接可以创建持久性的连接,并进行双向数据传输,客户端和服务器之间的数据交换变得更加简单。即时通讯聊天软件app开发可以加小蓝豆咨询

WebSocket 的优缺点

  • 优点:支持服务器推送消息,支持多个请求
  • 缺点:浏览器支持程度不一

开始

安装 Express

已经安装可以跳过

npm install -g express-generator
#或
yarn global add express-generator

建议使用yarn,速度更快

创建一个新项目

express -e "项目名称"

安装需要的依赖

cd "项目名称"
npm install
#或
yarn install

启动项目

yarn start
#或
npm start

编辑后自动重启项目

安装nodemon

yarn add nodemon
#或
npm install --save nodemon

package.json里修改相关配置

"scripts": {
    "start": "node ./bin/www.js",
    "dev": "nodemon ./bin/www.js"
 }

重命名文件 bin/www 重命名成 bin/www.js才能自动重启

重新启动项目

基本实现

接下来安装需要的模块

yarn add socket.io

创建一个文件夹sockets,专门用来写socket服务端 在sockets文件夹中创建app.js 具体内容如下

const app = function(server) {
  var io = require('socket.io')(server);
  io.on('connection',function(socket){
    socket.on('login',function(res){ /* 登录 */
      io.emit("登录成功");
    });
  });
}
module.exports = app; /* 导出 */

bin/www.js中注册socket.io服务

目前已实现功能

前端:ejs模板

1. 多频道(聊天室)

2. 通过QQ获取昵称和头像

3. 通过 Gravatar / Cravatar 获取头像

4. 聊天Emoji表情、上传图片

5. Markdown / HTML 消息支持

6. 频道成员退出提醒

7. 频道之间不互通

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/455299.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

谁说不能用中文写代码?

入门教程、案例源码、学习资料、读者群 请访问: python666.cn 大家好,欢迎来到 Crossin的编程教室 ! 现代计算机和编程的起源和推动力量主要源自美国,再加上26个字母很便于表示(算上大小写,6位bit就够了&am…

32岁阿里P7,把简历改成不知名小公司,学历改成普通本科,工作内容不变,投简历全挂!...

hr靠什么来招人? 一位猎头讲述了自己和朋友打赌的故事: 朋友在阿里云,32岁,P7,他把简历上的公司改成不知名,学历改成普通本科,工作内容不变,结果投其他公司(比如京东&…

ThinkPHP6之数据库操作下

ThinkPHP6之数据库操作下 前言一,查询表达式1.1 where1.2table和name1.3field1.4limit1.5page1.6 order 二, 聚合查询三,分页查询总结 前言 数据库操作除了增,删,查,改,这四个基本操作外&#x…

【C++】二叉搜索树(概念、实现、应用以及OJ题详解)

前言: 此前我们在C语言实现数据结构的时候学习过二叉树,但是那个时候我们没有深入学习二叉搜索树。本章重提二叉树并详解二叉搜索树有下面两个原因: 1、为我们下一章学习set和map做准备;2、详解我们进阶一点的二叉树的面试OJ题&a…

120名顶级技术专家用GPT-4搞出的脑洞发明大赏

文 | 智商掉了一地 黑客松(Hackathon)是一种聚集程序员、设计师等技术人才,共同在短短几天的时间内合作进行软件开发、解决问题的活动。参与者可分为个人和团队形式参与,他们将利用这段时间内的集中创作和多学科合作,迅…

Java网络编程系列之NIO

Java网络编程系列之NIO 1.Java NIO概述1.1 阻塞IO1.2 非阻塞IO1.3 NIO概述1.3.1 Channels1.3.2 Buffer1.3.3 Selector 2.Java NIO(Channel)2.1Channel概述2.2 Channel实现2.3 FileChannel 介绍与示例2.4 FileChannel 操作详解2.4.1 打开FileChannel2.4.2 从FileChannel读取数据…

带你一步步实现代码开发平台——概述、实现模式、整体框架

概述 低代码开发平台是一种开发工具,它允许用户使用图形界面和少量编码来创建应用程序。这种平台的目的是加快应用程序开发速度,减少开发成本和技能门槛。目前,市场上有许多低代码开发平台可供选择,包括Microsoft Power Apps、Ou…

学系统集成项目管理工程师(中项)系列11a_沟通管理(上)

1. 基本概念 1.1. 构成 1.1.1. 接收者和发送者 1.1.1.1. 参与者既发送信息,又接收反馈,是一体的 1.1.2. 信息(Message) 1.1.2.1. 多个参与者之间需要分享的信息,表达思想和情感的组成物 1.1.2.2. 信息的存在方式…

虚拟化技术 — Libvirt 异构虚拟化管理组件

目录 文章目录 目录Libvirtlibvirt API 函数库libvirtd Daemon软件架构权限模式运行模式XML 格式 virsh CLI Libvirt QEMU-KVM 环境部署HostOS 配置优化(可选的)开启 KVM Nested 嵌套虚拟化安装 CentOS GNOME 图形界面安装 Libvirt QEMU-KVM Libvirt 的…

C语言ctype.h头文件中2类好用的库函数

本篇博客会讲解C语言ctype.h这个头文件中的2类好用的库函数,分别是字符分类函数和字符转换函数。 字符分类函数 字符分类函数,指的是判断一个字符是不是属于某个类别,如果属于这个类别,返回非0数;如果不属于这个类别…

性能测试工具 IxChariot:Tcl脚本调用方法介绍

ixChariot是一款功能强大的性能测试软件,可用来测试有线和无线性能,可以模拟真实应用程序流量,并提供关键性能指标,包括吞吐量、丢包、抖动、延迟、MOS等。本文简单介绍如何使用IxChariot Tcl API来实现自动化跑流。 目录 IxChari…

RK3399平台开发系列讲解(调试篇)断言的使用

🚀返回专栏总目录 文章目录 一、什么是断言二、静态断言三、运行时断言沉淀、分享、成长,让自己和他人都能有所收获!😄 📢断言为我们提供了一种可以静态或动态地检查程序在目标平台上整体状态的能力,与它相关的接口由头文件 assert.h 提供。 一、什么是断言 在编程中…

浏览器状态同步和路由-SSR和单页面应用的分析 【单页面应用和服务端渲染】

目录 单页面应用(优缺点)(Single Page Application) 优点: SPA的缺点: 服务端渲染(Server Side Rendering) SSR示例(一个ssr小引擎) SSR优缺点分析 总结…

Opencv+Python笔记(八)轮廓检测

目录 一、轮廓的检测和绘制1.读入图像2.将读入图像转化为灰度图3.对灰度图进行二值化 [图像的阈值化处理](https://blog.csdn.net/Ggs5s_/article/details/130301816?spm1001.2014.3001.5501)4.进行轮廓检测5.在原图中显示轮廓 二、轮廓层级关系1.RET_LIST2.RETR_EXTERNAL3. R…

座椅内饰如何「跟上」智能电动?这款智能概念座舱看到未来

进入智能电动汽车时代,理想的车内空间应该是怎样的?作为“内饰空间创造者”、全球三大汽车座椅及内饰厂商之一,丰田纺织在2023上海车展上给出了一系列解决方案。 4月19日,丰田纺织携诸多产品亮相本次上海车展,包括面向…

【速卖通】 AliExpress(速卖通)关键词搜索结果采集

采集场景 在AliExpress(速卖通) 首页中 http://www.aliexpress.com 中输入关键词,采集关键词搜索后得到的商品列表信息。 采集字段 关键词、标题、商品id、商品图片地址、商品详情链接、价格、免费退送货、星级、已出售数量、店铺名 采集结果 采集结果可导出为E…

C语言入门篇——函数篇

1、什么是函数 首先,什么是函数?函数(function)是完成特定任务的独立程序代码。单元语法规则定义了函数的结构和使用方式。虽然C中的函数和其他语言中的函数、子程序、过程作用相同,但是细节上略有不同。 为什么使用函数? 首先…

刷题训练2之AcWing第 96 场周赛

竞赛 - AcWing 一、完美数 4876. 完美数 - AcWing题库 1、题目 如果一个正整数能够被 2520 整除,则称该数为完美数。 给定一个正整数 n,请你计算 [1,n]范围内有多少个完美数。 输入格式 一个整数 n。 输出格式 一个整数,表示 [1,n] 范…

【社区图书馆】操作系统的经典书籍

操作系统的经典书籍 一、引言二、书籍的选择三、优缺点3.1、《操作系统》3.2、《计算机操作系统》 小结 一、引言 《操作系统》罗宇和《计算机操作系统》汤小丹这两本书都是关于操作系统的经典书籍,各有优势。 二、书籍的选择 首先,从内容深度上&…

倾斜摄影超大场景的三维模型的顶层合并常见的问题分析

倾斜摄影超大场景的三维模型的顶层合并常见的问题分析 倾斜摄影超大场景的三维模型顶层合并是将多个局部区域的点云或网格数据进行融合,生成一个整体的三维模型的过程。在这个过程中,常见的问题包括: 1、数据不一致。由于数据采集时间、空间…