В этой статье мы собираемся создать приложение для чата, которое будет отправлять рисунки, сделанные пользователями, вместо простых сообщений чата. Мы используем Express и HTTP-сервер с Socket.io для работы в режиме реального времени и используем drawingboard.js и jQuery в веб-интерфейсе, чтобы он оставался чистым и минималистичным. вот последняя рабочая демонстрация того, что мы собираемся построить.

Репозиторий Github кода, связанного с этим уроком, приведен ниже:

Https://github.com/Mayank-MP05/Realtime-Drawing-Chat-NodeJS-SocketIO

Мы начинаем с создания серверной части, затем переходим к части внешнего интерфейса, а затем перед созданием серверной части мы должны знать тип данных, который мы собираемся обмениваться через соединение клиент-сервер.

Мы используем изображение DataURI в качестве строкового типа данных для отправки клиенту на сервер и наоборот. Вы можете прочитать больше здесь: Схема URI данных

Бэкэнд

Во-первых, убедитесь, что у вас установлены node.js и npm и вы работаете с CLI, чтобы запустить проект npm и установить необходимые зависимости. Ниже приведены команды.

npm init -y
npm install express socket.io

Первым делом мы импортировали все библиотеки Express HTTP и Socket IO. Мы устанавливаем статическое значение для клиентской папки, чтобы обслуживать статический интерфейс по запросу. При подключенном сокете мы проверили, отправляется ли URI данных чертежа пользователем и отправляется ли он, мы повторно отправили его через сервер всем подключенным пользователям. Наконец, мы начали слушать сервер на указанном ПОРТУ.

Поздравляю! Вы закончили с Backend-частью. Это самый минимальный

Внешний интерфейс

Внешняя часть - это клиентская часть, которая имеет набор файлов разметки стилей и сценариев. Я хочу объяснить основной механизм, сокет и чертежную доску. Итак, если вы хотите сослаться на стили, вы можете просмотреть код в моем репозитории Github, упомянутый выше.

В папке клиента есть папка чертежной доски, в которой находятся файлы CSS и JS библиотеки. index.html служит базовым файлом разметки. Стили хранятся в style.css. Основная логика клиентского сокета и доски для рисования содержится в script.js. Кроме того, мы используем загрузку jQuery и клиентскую часть socket.io с использованием CDN.

Самая первая задача - связать все эти файлы и CDN в index.html, связать все файлы стилей и CSS с разделом заголовка и файлами JS перед конечным тегом тела, тогда ваш пустой HTML-файл будет выглядеть следующим образом:

После настройки всех ссылок следующая задача - добавить некоторую разметку и стили к файлам. Теперь я не собираюсь подробно объяснять стиль здесь, просто нужно уловить, что стиль используется, удерживайте доску для рисования и навигационную панель, фиксированные в положениях и небольшой ширине и в целях окраски

Это моментальный снимок кода тела после добавления пользовательского интерфейса разметки, мы добавили очень простую панель навигации, затем контейнер сообщений и внизу чертежную доску с кнопкой Отправить DWG.

позвольте переместить часть JS на стороне клиента

Приносим извинения за опечатки!

Таким образом, выше использован синтаксис jQuery Once auto-execute. Все, что вы пишете в теле этой функции, выполняется один раз при запуске. Прежде всего, мы создали экземпляр класса IO как socket и инициализировали чертежную доску, используя идентификатор div предоставляется как параметр

Мы добавили событие щелчка (click() в jQuery) к кнопке, что всякий раз, когда пользователь нажимает кнопку send dwg, этот код запускается. В этой функции мы сначала получаем изображение DataURI изображения чертежной доски, используя функцию .getImg() , предопределенную в drawing-board.js затем мы выделили эту строку DataURI изображения, используя функцию вывода клиента ввода-вывода сокета.

при отправке изображения мы сбрасываем фон на пустой, используя метод resetBackground( ).

также, когда сервер излучает «рисунок», мы должны сопоставить его с пользовательским интерфейсом, поэтому мы использовали метод on(“drawing”) и добавили изображение как объект списка в контейнер сообщения

Простой! Это все, что касается интерфейсной части.

Это очень простой пример того, как socket.io можно использовать для создания соединения с клиентом в реальном времени и для обмена данными в реальном времени.