Hallo Habr. Konsolen-Chat ist eine großartige Sache, aber für das Front-End, was ist, wenn Sie dasselbe wollen, aber für das Backend. Wenn ja, dann ist dieser Artikel für Sie. Aber welches Tool wird im Backend oft verwendet? Das ist richtig, ssh, also vertrete ich sshchat.
Wie wird es aussehen?
Irgendwo auf dem Server dreht sich das Programm auf dem Knoten.
Sobald jemand eine Verbindung zum Chat herstellen möchte, gibt er Folgendes ein:
ssh server -p 8022
Danach fragt das System nach einem Passwort und überprüft es mit dem Passwort in einer speziellen Datei. Wenn das Passwort übereinstimmt, stellen wir eine Verbindung zum Chat her (der Benutzer erhält 100 vorherige Nachrichten und alle anderen sehen, dass er verbunden ist).
Dann empfängt er die Nachrichten anderer und kann seine eigenen schreiben.
Hier mit interessanteren Nachrichten:
@box{@color(red){Red text in box}}
Senden Sie roten Text in Feld.
Fangen wir an
Um mit ssh zu arbeiten, verwenden wir https://www.npmjs.com/package/ssh2 .
Für die Formatierung verwenden wir Kreide und Boxen.
Also installiere sie:
npm i ssh2 chalk boxen
Jetzt ist der Code selbst einer der wichtigsten Teile dieses Nachrichtenparsers ( GitHub ):
Formatierung ( GitHub ):
const chalk = require('chalk'); const { parseAndExecute } = require('./parserExec')
Methoden zum Senden einer Nachricht an alle Benutzer und zum Speichern von 100 Nachrichten ( GitHub ):
let listeners = [];
Lobby, Servererstellung und Autorisierung ( GitHub ):
const { Server } = require('ssh2'); const { readFileSync } = require('fs'); const hostKey = readFileSync('./ssh');
Verschiedene Methoden ( GitHub ):
const { createInterface } = require('readline'); module.exports.getStream = function(client, onStream, onEnd){ client
Jetzt kombiniere ( GitHub ):
const { createServer, setConnectCallback } = require('./lobby'); const { getStream, getCommunicator } = require('./utils'); const { addListener, delListener, broadcast, getCache } = require('./broadcaster'); const { format, getNick } = require('./format');
Und der letzte Schritt ist ein Beispielserver:
const chat = require('.') chat({})
Die Datei users.json beschreibt auch Benutzer und ihre Kennwörter.
Schlussfolgerungen
So kann man nicht den einfachsten Chat in ssh schreiben.
Für einen solchen Chat muss der Client nicht schreiben, er verfügt über die Entwurfsfunktionen und jeder kann ihn bereitstellen.
Was kann man noch tun:
- Fügen Sie die Möglichkeit hinzu, eigene Designmerkmale zu erstellen
- Markdown-Unterstützung hinzufügen
- Bot-Unterstützung hinzufügen
- Erhöhen Sie die Passwortsicherheit (Hash und Salt)
Endgültiges Repository