Анонімний приватний чат на (використовуючи express і), shpirat

Всім привіт! Давненько тут нічого ми не публікували, то часу не було, то не було чим ділитися просто. Але тепер все змінилося! Вирішив недавно я випробувати Node.JS. І за своїм звичаєм вирішив зробити чат.

В результаті вийшов цілком функціональний розрахований на багато користувачів чат.

Відразу скажу, він ще сируватий. Спілкуватися можна, але його потрібно ще пиляти і пиляти, просто часу на нього не особливо багато є, та й не потрібно в принципі це все. Головне, що чат виконує свою головну функцію чату!

Анонімність і приватність. На сервері не зберігається листування, навіть ніякі логи не будуть збережені. Всі повідомлення і інші події (хтось прийшов або вийшов з чату) відразу ж розсилаються всім користувачам кімнати, в якій відбулися ці події. І ніяк не можна подивитися список підключених користувачів. Один і той же користувач може підключитися до різних кімнатах, вибрати собі різні ники в тих кімнатах, і ніхто навіть не дізнається, що це один і той же користувач. Тому чат можна назвати приватним і навіть анонімним. Анонімним тому, що якщо посилання дати не певній людині, а викласти десь, або якщо просто хтось буде перебирати поспіль номери кімнат і потрапить в Вашу, то ніяк і не впізнати, що це за людина буде. Але взагалі чат розрахований на те, що певний людина дає посилання на свою кімнату саме за потрібне йому людям, що б поспілкуватися приватно, без зайвих очей і без збереження історії та логів. Я хотів прикрутити ще й HTTPS до сервера, це теж було в планах, але потім ось закинув і все ... До того ж, немає у мене сертифіката нормального, і при підключенні браузер б говорив, що як-то не хоче довіряти цьому сайту.

А якщо хтось і хоче когось прослухати, то він знайде спосіб все одно, і ніякої чат не врятує ...) Так що це вже на совісті кожного)

UserList. Справа відображається список учасників чату. Колір ника поточного людини - помаранчевий. Решта для нього блакитного кольору. У повідомленнях така ж розфарбування. Це зроблено напевно для того, що б легше було візуально відрізняти свої повідомлення від несвоїх. У планах було: зробити для адміністратора кімнати всякі кнопки в списку користувачів, що б він міг викидати неугодних користувачів з чату.
Так само є оповіщення про набір тексту. Зліва від ника користувача, який набирає текст, з'являється значок олівця)

BB-коди. Підтримка декількох простих BB-кодів:
[B] текст тут досить-таки жирний [/ b]
[I] а тут нахилений, як Пізанська вежа [/ i]
[U] за що? за що підкреслили цей текст. [/ U]
[S] ви можете прочитати цей закреслений текст? [/ S]

socket.io
Використовується socket.io, що забезпечує спілкування в режимі реального часу.
Ну, звичайно і інші чати теж в реальному часі працюють, але використовують різні технології, типу поновлення за таймером, постійний запити в окремому прихованому фреймі та інші штуки, які все ж більше схожі на милиці і є лише імітацією реального часу. Тут же використовуються різні технології, від найновішої - WebSocket, і в порядку спадання в міру підтримки браузером. Якщо браузер не підтримує WebSocket, тобто ще long pooling-запити, а так же AJAX, а ще Flash-евие сокети можуть використовуватися. Загалом, буде все випробувано і вибрано дуже вдалий для поточного браузера. І працювати повинно всюди, швидше за все. До того ж socket.io надає зручний транспорт для передачі подій в обидві сторони, від клієнта до сервера і навпаки. І це все набагато краще, ніж просто веб-сокети ...) Ну, інші технічні подробиці можна і почитати на офіційному сайті цієї штуки.

Консольні команди. Ну ... Назва надто гучне все ж ...) Ці команди - це те, що починається зі слеша і пишеться в поле для введення повідомлень. Поки що там є тільки одна команда, і це «/ part». Якщо ввести цю команду, то чат відключиться від сервера і ... і все. Далі темрява незрима, поки наново не зайти в кімнату або не вибрати або створити іншу. А! Є ще команда «/ alert». Вона просто показує звичайне Alert-віконце з текстом, який є другим параметром (написаний через пробіл). Решта ж команди можна зробити, але поки як би і немає чого. Хоча можна всякі адміністративні команди, типу забанити або викинути користувача певного з чату, або відому в IRC команду «/ me» (ага. І вже точно вийде ще один IRC, але без IRC сервера ... 🙂).

Що ж у підсумку?
А в підсумку чатик. Багато різних ідей було, коли я тільки починав його робити. Але потім зробив до певного робочого етапу і закинув. А зараз вирішив заради статті доробити хоча б ще трохи, що б вже можна було в загальний доступ його пускати ... 🙂
Сервер завжди запущений. Правда я не знаю, яке навантаження він зможе витримати ...) Ось може після виходу цієї статті і перевіримо 🙂

До зустрічі в чаті 🙂

P.S. ось архів з вихідними кодами. Поправити потрібно буде файл app.js - там встановити слухає порт.

Пише, що не може знайти модуль goo.gl (в чаті він потрібен для виведення короткої посилання на поточну кімнату).

Щоб це полагодити, потрібно встановити цей модуль, ввівши в консолі в цій папці проекту команду:
npm install goo.gl

Або можна просто встановити (не в цій папці, а глобально цей модуль) командою: npm install -g goo.gl

Відразу хочу попередити: коли робився цей чат, ще тоді мені було мало відомо про всяких тонкощах і т.д. навіть не був створений файл з описом пакета і його залежностями package.json, тому, швидше за все, навіть встановивши необхідні бібліотеки (типу express і socket.io) воно не запрацює, тому що версії там потрібні трохи старіше, ніж ті, що є зараз.
У будь-якому випадку - пишіть. допоможемо)

Проблема ще актуальна? Якщо так, то можна написати мені в ВК (можна знайти за ніком, як і в Телеграма).