基于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

相关文章
|
14天前
|
Web App开发 JavaScript 前端开发
构建高效后端服务:Node.js与Express框架的实战指南
【9月更文挑战第6天】在数字化时代的潮流中,后端开发作为支撑现代Web和移动应用的核心,其重要性不言而喻。本文将深入浅出地介绍如何使用Node.js及其流行的框架Express来搭建一个高效、可扩展的后端服务。通过具体的代码示例和实践技巧,我们将探索如何利用这两个强大的工具提升开发效率和应用性能。无论你是后端开发的新手还是希望提高现有项目质量的老手,这篇文章都将为你提供有价值的见解和指导。
|
2天前
|
缓存 监控 JavaScript
构建高效后端服务:Node.js与Express框架的完美结合
【9月更文挑战第18天】在数字化时代的浪潮中,后端服务的效率和稳定性成为了企业竞争力的关键。本文将深入探讨如何使用Node.js和Express框架来构建一个既高效又稳定的后端服务,同时通过实际代码示例,展示如何优化性能并确保服务的高可用性。
|
3天前
|
JavaScript 前端开发 数据库
优化后端性能:如何使用异步编程提升系统响应速度
异步编程已成为现代后端系统性能优化的重要策略。通过避免阻塞操作,异步编程可以显著提高系统的响应速度和并发处理能力。本文章深入探讨了异步编程的基本概念,比较了常见的异步编程模型,并通过实际案例演示如何在Node.js和Python中实现异步操作,以提升系统性能。
|
5天前
|
Web App开发 存储 JavaScript
深入浅出Node.js后端开发
【9月更文挑战第15天】在数字化浪潮中,Node.js作为一颗耀眼的星辰,为后端开发领域注入了活力与创新。本文将带你领略Node.js的魅力所在,探索其架构设计、性能优化及实战应用,让你在轻松愉快的氛围中掌握Node.js后端开发的精髓。
|
8天前
|
缓存 JavaScript 中间件
优化Express.js应用程序性能:缓存策略、请求压缩和路由匹配
在开发Express.js应用时,采用合理的缓存策略、请求压缩及优化路由匹配可大幅提升性能。本文介绍如何利用`express.static`实现缓存、`compression`中间件压缩响应数据,并通过精确匹配、模块化路由及参数化路由提高路由处理效率,从而打造高效应用。
29 5
|
9天前
|
Web App开发 JavaScript 前端开发
深入浅出Node.js后端开发
【9月更文挑战第11天】本文将带你走进Node.js的世界,了解其背后的运行机制和实际应用。我们将从基础概念出发,逐步深入到实战应用,最后通过代码示例巩固学习成果。无论你是初学者还是有一定经验的开发者,这篇文章都将为你提供新的视角和思考。
|
7天前
|
JavaScript 前端开发 API
深入浅出Node.js后端开发
【9月更文挑战第13天】本文将带你进入Node.js的世界,从基础概念到实际案例,深入浅出地探讨如何利用Node.js进行后端开发。通过本文的学习,你将了解Node.js的工作原理、核心模块、以及如何构建一个简单的Web应用。无论你是初学者还是有一定经验的开发者,这篇文章都将为你提供有价值的见解和技巧。
|
9天前
|
缓存 JavaScript 前端开发
深入浅出Node.js后端开发
【9月更文挑战第11天】本文将带你进入Node.js的世界,探索其背后的哲学、核心概念以及如何利用它来构建高效、可扩展的后端服务。无论你是前端开发者寻求全栈技能,还是后端开发者希望拓宽技术栈,这篇文章都将为你提供价值。我们将从基础讲起,逐步深入到实战应用,让你对Node.js有一个全面而深刻的理解。
19 2
|
9天前
|
Web App开发 JavaScript NoSQL
深入浅出Node.js后端开发
在数字化时代的浪潮中,后端开发作为技术支柱之一,承载着数据处理和业务逻辑实现的重要任务。本文将通过浅显易懂的方式,带你走进Node.js的世界,从基础概念到实战应用,逐步揭开后端开发的神秘面纱。无论你是编程新手还是希望扩展技术栈的开发者,这篇文章都将为你提供有价值的指导和启示。让我们一起探索如何在不断变化的技术环境中,保持初心,寻找属于自己的方向,并成为希望在世界上看到的改变。
20 1
|
9天前
|
Web App开发 缓存 JavaScript
构建高效后端服务:Node.js与Express框架的完美结合
【9月更文挑战第11天】本文将引导开发者探索如何利用Node.js和Express框架搭建一个高效的后端服务。文章不仅深入讲解了这两个工具的核心概念,还通过实际示例展示了它们的强大功能和易用性。读者将学会如何处理HTTP请求、设计RESTful API以及优化应用性能。无论你是初学者还是有经验的开发者,这篇文章都将为你提供宝贵的知识,帮助你在后端开发领域更进一步。