/ Javascript

Développement d'un chat avec Node.js, Socket.io, Redis et Mithril

Depuis un peu plus d'un mois maintenant, avec l'équipe de Mondedie.fr (@Magicalex, @hydrog3n et moi même), nous avons commencé le développement d'un chat pour le nouveau forum qui est en train d'être mis en place flarum.mondedie.fr, FluxBB commençant à se faire vieux, on voulait quelque chose d'un peu plus neuf.

Pourquoi ne pas avoir choisi IRC ou solution déjà existante ?

IRC est une solution largement éprouvée depuis longtemps mais que je trouve moins accessible pour certaines personnes, on voulait quelque chose qui soit facile d'accès, intégré à notre infra, aux couleurs du forum :)

De plus, en tant que développeur, j'aime bien mener ce genre de petit projet, on apprend toujours des choses (surtout quand on est plusieurs dessus) et on est complètement libre en terme de personnalisation du design, d'ajout de fonctionnalités et sur l'évolution de l'application.

On a pu mettre en place quelque chose qui correspond à 100% à nos besoins.

Front-end

L'interface est pour le moment très simple et assez sobre :

screen-chat

Et en mode responsive :

screen-chat-responsive

Côté technologies front-end, nous utilisons :

C'était l'occasion d'apprendre un nouveau framework javascript côté client. J'ai choisi Mithril pour sa légèreté et parce qu'il est très simple à appréhender et facile d'utilisation contrairement à angular qui est bien plus complexe mais forcément plus puissant. Mithril est largement suffisant pour ce type de projet, l'api convenait parfaitement pour l'usage qu'on devait en faire.

Backend

Côté backend on est resté sur quelque chose de classique mais parfaitement adapté pour une application de chat :

  • Node.js :love:
  • Express.js - Framework backend
  • Socket.io - Pour la communication en temps réel
  • Redis - Base de données NoSQL
  • Jade - Moteur de template
  • Bluebird - Pour la gestion des promises
  • Gulp - Pour la gestion du projet et des assets

Hébergement

Pour le moment l'application est hébergée sur Heroku, je connais cette plateforme depuis quelques années et ça fonctionne plutôt bien. L'offre gratuite permet de monter jusqu'à 20 connexions maximum avec Redis, ce qui est suffisant. Pour info, le chat ouvre 4 connexions constantes à la bdd (on pourrait réduire ce nombre) + 2 connexions de maintenance (Amazon EC2 + redsmin).

Le nombre de connexions à la bdd ne dépend pas du nombre d'utilisateur, ce nombre est fixe en temps normal mais peut varier selon les actions qui sont faites sur Redis. J'ai pas fait de test de charge mais avec l'offre gratuite d'Heroku, je pense qu'on peut monter à une centaines d'utilisateurs de façon simultanée, node.js + express restent de base plutôt léger en charge cpu. De plus, une fois le client initialisé, tout ce fait par les sockets.

A l'avenir, on déploiera l'application sur un VPS avec docker ou peut-être même Otto, on ne s'est pas encore décidé.

02/2016 - Le chat est maintenant hébergé sur un VPS avec docker, la méthode de déploiement est détaillée dans le readme du projet.

Fonctionnalités

  • Communication temps réel via socket ou long-polling
  • Connexion via l'API de Flarum
  • Messages privés
  • Liste des utilisateurs connectés
  • Auto-complétion des pseudos et des smileys
  • Kick/ban
  • Syntaxe markdown (avec GitHub Flavored Markdown + coloration syntaxique)
  • Pleins d'emoticônes
  • Notifications sur le bureau
  • Mode AFK
  • Poke @user avec notification
  • Lancé de dés (+ un roll spécial)
  • Indication lorsqu'une personne écrit sur le chat
  • Suppression des messages
  • Gestion des problèmes réseau (déconnexion/reconnexion)
  • Fonctionne avec Chrome, Firefox, IE11/Edge, Opera, Safari
  • Un chatbot intelligent (157 de Qi)

Fonctionnalités à venir

  • Ignorer une personne
  • Canaux privés
  • Augmenter encore plus le Qi de chatbot
  • Des tests unitaires

Développement

Bon il est où le code qu'on regarde un peu ?!

04/11 - Le code est maintenant disponible sur Github

L'application sera rendue open-source un peu plus tard (fin d'année), on a encore quelques détails à régler et des fonctionnalités à ajouter mais le socle qu'on a mis en place est stable et facilement maintenable à l'avenir.

N'hésitez pas à vous incrire sur le forum de mondedie.fr, le chat est disponible à l'adresse suivante : chat.mondedie.fr

Développement d'un chat avec Node.js, Socket.io, Redis et Mithril
Share this