基于egg.js的聊天室后端服务--阿里云性能比赛

简介: 基于eggjs的聊天室服务阿里云ECS Cloudbuild开发者大赛性能挑战赛道

这大概是我写的第一个开源项目:本来是看到了阿里云的服务端性能大赛,就想要去插一脚去试试,结果没想到把程序写好之后卡在了部署上边,正好也有点忙(bushi),就干脆放弃了。所以就在这里把之前写好的代码开源出来,也算是迈出了个人的一小步吧。

主要思路

系统要求

这个聊天室的要求其实很简单: 也就是做一套有bearerAuth token认证的服务系统,可以完成注册账号、登录、登出、创建聊天室、进出聊天室、发言、信息查看等功能就ok。

技术选型

最开始的时候是在java、python、go之间徘徊:

  • java是最熟悉的,但是总感觉spring这一套比较重,不太想搞一套,就放弃了java。
  • python只了解一些django,看了一下新版本的好像变了不少东西··电脑也没有装python环境,索性也就放弃了。
  • go实在是中文资料太少了,想要试一下gin框架感觉指导资料不太多··

正好之前维护了一个组里的nodejs项目,基于阿里的egg.js,维护的时候印象相当好:结构非常明确,有完整的中文文档,调试也非常方便,就干脆用egg.js撸了一套。

数据存储呢用的是mysql,本来想要用mysql + influxdb,感觉influxdb用来存储聊天室的聊天记录非常搭配,一个measurement就是一个聊天室的记录,后来精力有限也就没搞了。

系统架构

在官方给的swagger文档里边,把服务主要分了三块: room、user、message,但是实际写的时候,还是感觉给的 服务 - api的对应关系不太合理,就自己做了重新区分:

  • room
  • creat new room
  • get room information
  • get roo user
  • get room list
  • user
  • enter room
  • leave room
  • create new user
  • login
  • get user by name
  • send message
  • get old message

删掉了message这一块,把一些room的服务移动到了user里边,整体来看更加耦合一些。

数据库构建

构建数据库的时候主要在纠结几点:

  1. 如何将user和他enter的chatRoom对应起来
  2. 聊天信息如何存储

第一个问题就用了一个state表来存储每个user和roomid的对应关系,用userid作为主键,也可以保证每个user只能进入一个room。

第二个问题当前采用的方案是所有的聊天记录都放在一个record表里边,这样确实效率有点低了。我的理想方案是用influxdb来做存储,出于聊天记录持久化的目的,保存策略应该设置为不过期,然后每个roomid都是一个measurement,对应的字段就只有userid和发言内容,时间也可以直接用influxdb自动生成的时间,这样感觉起来就简介了很多。

知识上的薄弱点

对于代理、并发提交这块没研究过,有时间是要学习一下

代码地址

接下来上我的github地址:

nodeChatRoom

相关文章
|
1月前
|
API 数据库 数据安全/隐私保护
利用Django框架构建高效后端API服务
本文将介绍如何利用Django框架构建高效的后端API服务。通过深入分析Django框架的特性和优势,结合实际案例,探讨了如何利用Django提供的强大功能来构建高性能、可扩展的后端服务。同时,还对Django框架在后端开发中的一些常见问题进行了解决方案的探讨,并提出了一些建设性的建议。
52 3
|
1月前
|
Arthas 弹性计算 运维
阿里云ECS监控服务
阿里云ECS监控服务
406 2
|
1月前
|
监控 网络协议 API
阿里云BssOpenAPI是一个基于阿里云开放API的服务
【2月更文挑战第24天】阿里云BssOpenAPI是一个基于阿里云开放API的服务
145 6
|
1月前
|
自然语言处理
阿里云百炼大模型服务--企业知识检索问答指南
阿里云百炼提供的企业知识检索问答应用可以帮助大家实现让大模型瞬间“开挂”的技能。结合上传的知识数据,大模型识别解析学习文档内容,最终给出生成式回复。我们在通义千问-Turbo/Max大模型基础上,将文件上传、读取、切片、向量化等过程都开发好预置在应用中,实现开箱即用,更能满足您的日常需求。
|
1月前
|
弹性计算 前端开发 小程序
微信小程序上传文件至阿里云OSS直传(java后端签名+前端直传)
当前的通用文件上传方式是通过前端上传到服务器,再由服务器转存至对象存储。这种方式在处理小文件时效率尚可,但大文件上传因受限于服务器带宽,速度较慢。例如,一个100MB的文件在5Mbps带宽的阿里云ECS上上传至服务器需160秒。为解决此问题,可以采用后端签名的方式,使微信小程序直接上传文件到阿里云OSS,绕过服务器中转。具体操作包括在JAVA后端引入相关依赖,生成签名,并在微信小程序前端使用这个签名进行文件上传,注意设置正确的请求头和formData参数。这样能提高大文件上传的速度。
|
1月前
|
存储 弹性计算 关系型数据库
阿里云服务器ESSD云盘性能等级PL0、PL1、PL2、PL3区别,云盘性能级别PL知识点参考
在我们选择阿里云服务器系统盘和数据盘时,如果是选择ESSD云盘,还需要选择云盘的云盘性能级别PL,PL性能级别有PL3、PL2、PL1、PL0四个性能级别的云盘规格,如果是通过阿里云的活动来购买云服务器的话,由于系统盘默认一般为20G或40G容量,可选的PL性能级别通常只有PL0(单盘IOPS性能上限1万)和PL1(单盘IOPS性能上限5万)可选择,有的用户肯能并不清楚ESSD云盘的性能等级之间有何区别,单盘IOPS性能指的是什么,本文为大家介绍一下ESSD云盘的云盘性能级别PL3、PL2、PL1、PL0相关知识点。
阿里云服务器ESSD云盘性能等级PL0、PL1、PL2、PL3区别,云盘性能级别PL知识点参考
|
5天前
|
存储 开发工具 对象存储
Javaweb之SpringBootWeb案例之阿里云OSS服务入门的详细解析
Javaweb之SpringBootWeb案例之阿里云OSS服务入门的详细解析
11 0
|
11天前
|
缓存 负载均衡 数据库
优化后端性能:提升Web应用响应速度的关键策略
在当今数字化时代,Web应用的性能对于用户体验至关重要。本文探讨了如何通过优化后端架构和技术手段,提升Web应用的响应速度。从数据库优化、缓存机制到异步处理等多个方面进行了深入分析,并提出了一系列实用的优化策略,以帮助开发者更好地应对日益增长的用户访问量和复杂的业务需求。
16 1
|
15天前
|
网络协议 Java 物联网
阿里云服务器上搭建 MQTT服务
阿里云服务器上搭建 MQTT服务
|
15天前
|
域名解析 网络协议 应用服务中间件
阿里云服务器配置免费https服务
阿里云服务器配置免费https服务

热门文章

最新文章