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

相关文章
|
3月前
|
弹性计算 监控 负载均衡
|
3月前
|
Web App开发 JavaScript 前端开发
深入浅出Node.js: 打造高效后端服务
【10月更文挑战第39天】在数字化浪潮中,后端开发作为支撑现代Web应用的骨架,扮演着不可或缺的角色。Node.js,作为一种流行的服务器端JavaScript运行环境,因其非阻塞I/O和事件驱动的特性,被广泛应用于构建轻量且高效的后端服务。本文旨在通过浅显易懂的语言,结合生动的比喻和实际代码案例,带领读者深入理解Node.js的核心概念、架构设计及其在后端开发中的应用,进而掌握如何使用Node.js搭建稳定、可扩展的后端服务。无论你是初探后端开发的新手,还是寻求进阶的开发者,这篇文章都将为你提供有价值的指导和启示。
|
3月前
|
Web App开发 JavaScript 前端开发
深入浅出Node.js:从零开始构建后端服务
【10月更文挑战第42天】在数字时代的浪潮中,掌握一门后端技术对于开发者来说至关重要。Node.js,作为一种基于Chrome V8引擎的JavaScript运行环境,允许开发者使用JavaScript编写服务器端代码,极大地拓宽了前端开发者的技能边界。本文将从Node.js的基础概念讲起,逐步引导读者理解其事件驱动、非阻塞I/O模型的核心原理,并指导如何在实战中应用这些知识构建高效、可扩展的后端服务。通过深入浅出的方式,我们将一起探索Node.js的魅力和潜力,解锁更多可能。
|
3月前
|
Web App开发 JavaScript 前端开发
Node.js 是一种基于 Chrome V8 引擎的后端开发技术,以其高效、灵活著称。本文将介绍 Node.js 的基础概念
Node.js 是一种基于 Chrome V8 引擎的后端开发技术,以其高效、灵活著称。本文将介绍 Node.js 的基础概念,包括事件驱动、单线程模型和模块系统;探讨其安装配置、核心模块使用、实战应用如搭建 Web 服务器、文件操作及实时通信;分析项目结构与开发流程,讨论其优势与挑战,并通过案例展示 Node.js 在实际项目中的应用,旨在帮助开发者更好地掌握这一强大工具。
64 1
|
3月前
|
Web App开发 JavaScript 前端开发
深入浅出Node.js后端框架
【10月更文挑战第34天】在数字化时代,后端开发如同一座桥梁,连接着用户界面与数据处理的两端。本文将通过Node.js这一轻量级、高效的平台,带领读者领略后端框架的魅力。我们将从基础概念出发,逐步深入到实战应用,最后探讨如何通过代码示例来巩固学习成果,使读者能够在理论与实践之间架起自己的桥梁。
|
3月前
|
存储 JavaScript 前端开发
深入浅出Node.js后端开发
在数字化时代的浪潮中,后端开发作为连接用户与数据的桥梁,扮演着至关重要的角色。本文将以Node.js为例,深入探讨其背后的哲学思想、核心特性以及在实际项目中的应用,旨在为读者揭示Node.js如何优雅地处理高并发请求,并通过实践案例加深理解。无论你是初学者还是有一定经验的开发者,这篇文章都将为你提供新的视角和思考。
|
3月前
|
Web App开发 开发框架 JavaScript
深入浅出Node.js后端开发
本文将带你领略Node.js的魅力,从基础概念到实践应用,一步步深入理解并掌握Node.js在后端开发中的运用。我们将通过实例学习如何搭建一个基本的Web服务,探讨Node.js的事件驱动和非阻塞I/O模型,以及如何利用其强大的生态系统进行高效的后端开发。无论你是前端开发者还是后端新手,这篇文章都会为你打开一扇通往全栈开发的大门。
|
3月前
|
Web App开发 开发框架 JavaScript
深入浅出Node.js后端开发
在这篇文章中,我们将一起探索Node.js的奇妙世界。无论你是刚接触后端开发的新手,还是希望深化理解的老手,这篇文章都适合你。我们将从基础概念开始,逐步深入到实际应用,最后通过一个代码示例来巩固所学知识。让我们一起开启这段旅程吧!
|
2月前
|
Web App开发 JavaScript 前端开发
深入浅出Node.js后端开发
本文将带领读者从零基础开始,一步步深入到Node.js后端开发的精髓。我们将通过通俗易懂的语言和实际代码示例,探索Node.js的强大功能及其在现代Web开发中的应用。无论你是初学者还是有一定经验的开发者,这篇文章都将为你提供新的见解和技巧,让你的后端开发技能更上一层楼。
|
3月前
|
JavaScript 前端开发 API
深入理解Node.js事件循环及其在后端开发中的应用
本文旨在揭示Node.js的核心特性之一——事件循环,并探讨其对后端开发实践的深远影响。通过剖析事件循环的工作原理和关键组件,我们不仅能够更好地理解Node.js的非阻塞I/O模型,还能学会如何优化我们的后端应用以提高性能和响应能力。文章将结合实例分析事件循环在处理大量并发请求时的优势,以及如何避免常见的编程陷阱,从而为读者提供从理论到实践的全面指导。