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

相关文章
|
20天前
|
弹性计算 监控 负载均衡
|
2月前
|
Web App开发 JavaScript 前端开发
构建高效后端服务:Node.js与Express框架的实战指南
【9月更文挑战第6天】在数字化时代的潮流中,后端开发作为支撑现代Web和移动应用的核心,其重要性不言而喻。本文将深入浅出地介绍如何使用Node.js及其流行的框架Express来搭建一个高效、可扩展的后端服务。通过具体的代码示例和实践技巧,我们将探索如何利用这两个强大的工具提升开发效率和应用性能。无论你是后端开发的新手还是希望提高现有项目质量的老手,这篇文章都将为你提供有价值的见解和指导。
|
3月前
|
JavaScript 前端开发 中间件
构建高效后端服务:Node.js与Express框架的完美搭档
【8月更文挑战第28天】在追求高性能、可扩展和易维护的后端开发领域,Node.js和Express框架的组合提供了一种轻量级且灵活的解决方案。本文将深入探讨如何利用这一组合打造高效的后端服务,并通过实际代码示例展示其实现过程。
|
1月前
|
存储 缓存 持续交付
后端世界的微妙平衡:性能与可维护性的博弈###
【10月更文挑战第15天】 在软件开发的浩瀚宇宙里,后端开发犹如一颗星辰,既需璀璨夺目以支撑业务辉煌,又得稳若磐石确保系统长青。本文探讨了后端开发中性能优化与代码可维护性之间的微妙平衡,通过实例分析与策略建议,揭示了如何在追求极致速度的同时,保持代码的清晰、可读与易于迭代,实现技术与艺术的和谐共生。我们相信,正如印度圣雄甘地所言:“你必须成为你希望在世界上看到的改变。”开发者在面对复杂系统挑战时,也应主动寻求变革,探索更高效的解决方案。 ###
37 3
|
2月前
|
JavaScript 前端开发 数据库
优化后端性能:如何使用异步编程提升系统响应速度
异步编程已成为现代后端系统性能优化的重要策略。通过避免阻塞操作,异步编程可以显著提高系统的响应速度和并发处理能力。本文章深入探讨了异步编程的基本概念,比较了常见的异步编程模型,并通过实际案例演示如何在Node.js和Python中实现异步操作,以提升系统性能。
|
3月前
|
JavaScript 安全 API
构建高效后端服务:RESTful API 设计与实现
【8月更文挑战第31天】在数字化时代,一个清晰、高效且安全的后端服务是应用程序成功的关键。本文将深入探讨如何设计并实现一个遵循REST原则的API,确保服务的可扩展性和维护性。我们将从基础概念出发,逐步引入真实代码示例,展示如何利用现代技术栈创建高性能的后端服务。无论你是初学者还是有经验的开发者,这篇文章都将为你提供新的视角和实用的技巧。
|
3月前
|
存储 SQL 缓存
深入浅出:构建高效后端服务的五大原则
在数字化浪潮中,后端服务作为技术架构的核心,承载着数据处理和业务逻辑的重要任务。本文将深入探讨如何构建一个高效、稳定且可扩展的后端服务,从五个关键原则出发,带领读者一步步理解并实践这些原则,以确保后端系统能够灵活应对各种挑战。
|
3月前
|
JavaScript 前端开发
深入理解Node.js事件循环及其对后端性能的影响
【8月更文挑战第31天】 本文将带你一探Node.js的核心概念—事件循环,揭示其工作原理及如何影响后端应用的性能。我们将从基础的事件驱动模型出发,通过代码示例和性能分析,展示如何有效利用事件循环来提升应用响应速度和处理能力。
|
3月前
|
XML JSON API
打造高效后端服务:RESTful API 设计实践
【8月更文挑战第31天】在数字化浪潮中,后端服务是支撑起整个互联网生态的骨架。本文将带你深入理解RESTful API的设计哲学,通过具体案例学习如何构建清晰、灵活且高效的后端服务接口。我们将一起探索资源定位、接口约束以及状态传输的关键要素,并通过代码示例揭示最佳实践。无论你是初学者还是有经验的开发者,这篇文章都将为你提供宝贵的洞见和实用的技巧。
|
3月前
|
缓存 监控 测试技术
探索后端开发之巅:构建高效、可扩展的API服务
【8月更文挑战第29天】在数字化时代的浪潮中,后端开发如同搭建一座桥梁,连接用户与数据的无限可能。本文将引导你理解后端开发的精髓,从基础架构到高级优化技巧,一步步揭示如何构建一个既高效又可扩展的API服务。通过深入浅出的方式,我们将一起探索后端世界的奥秘,让你的开发之路更加顺畅。
下一篇
无影云桌面