В этом посте мы создадим и посмотрим, насколько легко создать собственное приложение для чата в реальном времени в консоли. Это чат-приложение состоит из двух частей: одна часть - это сервер, а вторая - клиент.

Что нам понадобится для этого урока

  • Установлены NPM и NodeJS
  • socket.io и socket.io-client модуль

Настройка нашего проекта

Я буду создавать свой сервер и клиент в одном проекте. Если вы хотите развернуть код сервера у своего хостинг-провайдера, вам необходимо создать отдельный проект. Сначала я создал каталог с именем chat-cli и инициализировал проект npm с помощью npm init -y.

Теперь я установил необходимые модули, такие как socket.io и socket.io-client с npm install socket.io socket.io-client. Я создал два файла в нашем проекте index.js (содержит код клиента) и server.js (содержит код сервера). А теперь давайте углубимся в подробности.

Создание сервера Socket.io

Нам нужен сервер socket.io для обработки всех событий и отправки их нашему клиенту. Итак, давайте создадим его.

Откройте ваш server.js файл и давайте напишем код.

// Created a socket.io server
const io = require("socket.io")();
// This should be a free port on our server.
const PORT = process.env.PORT || 3000;
// Created a empty user object, This will store names of our users.
const users = {};
// Listening for a connection event (This event fires when a client is connected to your server)
io.on("connection", (socket) => {
	console.log("New Connection: " + socket.id);
	// If user emitted a `new user` event, This callback will be called with his name.
    socket.on('new user', (name) => {
        // Storing his name
        users[socket.id] = name;
        // Emitting an event to all users except that user.
        socket.broadcast.emit("message", `${name} joined the chat.`)
    });
    // Listening for a `message` event.
    socket.on('message', (text) => {
        // Emitting an event to all users except that user.
        socket.broadcast.emit("message", `${users[socket.id]}> ${text}`);
    });
});
// Starting up server on PORT
io.listen(PORT);

Теперь наш серверный код готов.

Создание клиента для сервера

Нам нужно создать клиента и позволить ему подключиться к нашему серверу.

Откройте index.js файл и давайте напишем код.

// IMPORTING `socket.io-client` module
const io = require('socket.io-client');
// Creating client at the server, you need to pass url of your server where you hosted it.
const socket = io("http://localhost:3000");
// IMPORTING readline module to read from console.
const readline = require('readline');
// Creating an interface to get input from our console.
const rl = readline.createInterface({
  input: process.stdin,
});
// Getting users name.
console.log("What is your name?");
rl.question("What is your name?", (text) => {
    // Sending users name to server
    socket.emit('new user', text.trim());
    console.log("You joined the chat");
    process.stdout.write("> ");
});
// Listening for event `message` from our server (This will fire when server sends `message` event)
socket.on("message", (text) => {
    // Erasing Last line
    process.stdout.write("\r\x1b[K")
    console.log(text);
    process.stdout.write("> ");
});
// Prompting user to enter message.
rl.prompt();
// Fires when we input text from user.
rl.on('line', (text) => {
    // Sending message to our server.
    socket.emit('message', text.trim());
    process.stdout.write("> ");
    rl.prompt();
});

Наш клиентский код готов.

Как бегать

Сначала откройте три терминала или cmd в каталоге вашего проекта. Сначала запустите сервер, набрав node server.js.

Теперь запустите два клиента, с которыми хотите пообщаться, набрав node index.js на двух терминалах или cmd.

Если вы все сделали правильно, то сможете пообщаться.

Ссылка на этот проект, вы можете клонировать и разветвлять этот проект.

Посетите мой сайт, я тоже выкладываю эти вещи там.

Следуй за мной в моих социальных сетях.