Как остановить сервер node js
Перейти к содержимому

Как остановить сервер node js

  • автор:

Руководство. Подготовка веб-приложения для Служб коммуникации Azure (Node.js)

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

Завершив работу с этим руководством, вы получите базовое веб-приложение, настроенное с использованием пакетов SDK Служб коммуникации Azure. Затем такое приложение можно будет использовать для создания решения для коммуникации в режиме реального времени.

Вы можете посетить страницу Служб коммуникации Azure на сайте GitHub и оставить там свой отзыв.

В этом руководстве описано следующее:

  • настройка среды разработки;
  • настройка локального веб-сервера;
  • добавление пакетов Служб коммуникации Azure на веб-сайт;
  • публикация веб-сайта на статических веб-сайтах Azure.

Предварительные требования

  • Учетная запись Azure с активной подпиской. Дополнительные сведения см. на странице Создайте бесплатную учетную запись Azure уже сегодня. Бесплатная учетная запись предусматривает предоставление 200 долл. США в качестве денег на счете в Azure, что позволяет испытать в работе любое сочетание служб.
  • Visual Studio Code для редактирования кода в локальной среде разработки.
  • webpack для создания пакета кода и его размещения в локальной среде.
  • Node.js для установки зависимостей и управления ими, например для пакетов SDK и webpack Служб коммуникации Azure.
  • nvm и npm для управления версиями.
  • Расширение службы хранилища Azure для Visual Studio Code. Это расширение требуется для публикации приложения в службе хранилища Azure. Подробнее о размещении статических веб-сайтов в службе хранилища Azure.
  • Расширение Службы приложений Azure. Это расширение позволяет развертывать веб-сайты с дополнительной возможностью настройки полностью управляемой среды непрерывной поставки и непрерывной интеграции (CI/CD).
  • Расширение Функций Azure для создания собственных бессерверных приложений. Например, вы можете разместить в Функциях Azure приложение проверки подлинности.
  • Активный ресурс Служб коммуникации и строка подключения. Практическое руководство по созданию ресурса Служб коммуникации.
  • Маркер доступа пользователя. Инструкции см. в кратком руководстве по созданию маркеров доступа и управлению ими, а также в руководстве по созданию доверенной службы проверки подлинности.

Настройка среды разработки

Локальная среда разработки будет иметь следующую конфигурацию:

Экран

Установка Node.js, а также nvm и npm

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

Разработчики Windows могут воспользоваться этим руководством по Node.js, чтобы настроить Node, nvm и npm.

Это руководство основано на версии LTS 12.20.0. После установки nvm выполните следующую команду PowerShell, чтобы развернуть нужную версию:

nvm list available nvm install 12.20.0 nvm use 12.20.0 

Экран

Настройка Visual Studio Code

Создание рабочей области для проектов Служб коммуникации Azure

Создайте папку для хранения файлов проекта, например: C:\Users\Documents\ACS\CallingApp . В Visual Studio Code выберите Файл>Add Folder to Workspace (Добавить папку в рабочую область), а затем добавьте созданную папку в рабочую область.

Экран

На панели слева откройте обозреватель. Здесь вы увидите созданную папку CallingApp в рабочей области БЕЗ ИМЕНИ.

Экран

Вы можете указать для рабочей области любое имя. Чтобы проверить версию Node.js, щелкните правой кнопкой мыши папку CallingApp и выберите Open in Integrated Terminal (Открыть во встроенном терминале).

Экран

В окне терминала введите следующую команду, чтобы проверить версию Node.js, которую мы установили на предыдущем шаге:

node --version 

Экран

Установка расширений Azure для Visual Studio Code

Установите расширение службы хранилища Azure из Visual Studio Marketplace или прямо в Visual Studio Code (Представление>Расширения>Служба хранилища Azure).

Экран

Выполните эти же действия для расширений Функций Azure и Службы приложений Azure.

Настройка локального веб-сервера

Создание пакета npm

В окне терминала перейдите в папку рабочей области и введите следующую команду:

npm init -y 

Эта команда инициализирует новый пакет npm и добавляет package.json в корневую папку проекта.

Экран

Дополнительную документацию по npm init см. на странице документации по npm для этой команды.

Установка webpack

Вы можете использовать webpack для упаковывания кода в статические файлы, которые можно развернуть в Azure. Это решение включает в себя собственный сервер разработки, который можно настроить для работы с примером вызова.

В терминале введите следующую команду, чтобы установить webpack:

npm install webpack@4.42.0 webpack-cli@3.3.11 webpack-dev-server@3.10.3 --save-dev 

Это руководство протестировано с версиями, указанными в предыдущей команде. Указание -dev сообщает диспетчеру пакетов, что эта зависимость предназначена для разработки и ее не нужно добавлять в код, развертываемый в Azure.

Вы увидите, что в файл package.json в раздел devDependencies добавлены два новых пакета. Эти пакеты будут установлены в каталог ./CallingApp/node_modules/ .

Экран

Настройка сервера разработки

При запуске в браузере статического приложения (например, файла index.html ) используется протокол file:// . Чтобы модули npm работали правильно, нужно использовать протокол HTTP, настроив webpack в качестве локального сервера разработки.

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

Средство webpack-merge следует применить для работы с разными файлами конфигурации для webpack.

Сначала давайте настроим среду разработки. Сначала необходимо установить webpack merge . В терминале выполните приведенную ниже команду.

npm install --save-dev webpack-merge 

Вы увидите, что в файл package.json в раздел devDependencies добавлена еще одна зависимость.

Затем создайте новый файл webpack.common.js и добавьте в него следующий код:

const path = require('path'); module.exports = < entry: './app.js', output: < filename:'app.js', path: path.resolve(__dirname, 'dist'), >> 

Затем следует добавить еще два файла, по одному для каждой конфигурации:

  • webpack.dev.js
  • webpack.prod.js

Теперь измените файл webpack.dev.js , добавив к нему следующий код:

const < merge >= require('webpack-merge'); const common = require('./webpack.common.js'); module.exports = merge(common, < mode: 'development', devtool: 'inline-source-map', >); 

В этой конфигурации общие параметры импортируются из webpack.common.js , затем два файла объединяются, устанавливается режим development и sourcemap определяется как inline-source-map .

Режим разработки означает, что webpack не будет минифицировать файлы и создавать оптимизированные рабочие файлы. Подробную документацию по режимам webpack можно найти на веб-странице webpack «Режим».

Параметры sourcemap перечислены на веб-странице webpack Devtool. Настройка SourceMap упрощает отладку в браузере.

Экран

Чтобы запустить сервер разработки, перейдите к package.json и добавьте следующий код в раздел scripts :

 "build:dev": "webpack-dev-server --config webpack.dev.js" 

Теперь этот файл будет выглядеть так:

< "name": "CallingApp", "version": "1.0.0", "description": "", "main": "index.js", "scripts": < "test": "echo \"Error: no test specified\" && exit 1", "build:dev": "webpack-dev-server --config webpack.dev.js" >, "keywords": [], "author": "", "license": "ISC", "devDependencies": < "webpack": "^4.42.0", "webpack-cli": "^3.3.11", "webpack-dev-server": "^3.10.3" >> 

Вы добавили команду, которую можно использовать из npm.

Экран

Тестирование сервера разработки

Создайте в Visual Studio Code три файла в папке проекта:

  • index.html
  • app.js
  • app.css (необязательно, для задания стиля приложения)

Вставьте этот код в index.html :

     My first Azure Communication Services application   

Hello from Azure Communication Services!

Экран

Добавьте в app.js следующий код:

alert('Hello world alert!'); console.log('Hello world console!'); 

Добавьте в app.css следующий код:

html

Не забудьте сохранить! Несохраненный файл будет обозначен белой точкой рядом с именем файла в Explorer.

Экран

Открыв эту страницу, вы увидите сообщение с оповещением в консоли браузера.

Экран

Выполните в терминале следующую команду, чтобы протестировать конфигурацию разработки:

npm run build:dev 

Консоль отобразит сообщение о том, какой у работающего сервера адрес. По умолчанию это http://localhost:8080 . Команда build:dev — это команда, добавленная package.json ранее.

Экран

Перейдите в браузере по адресу сервера и убедитесь, что открываются ранее настроенные страница и оповещение.

Экран

Пока сервер работает, вы можете внести любые изменения в код и сервер. HTML-страница автоматически перезагрузится.

Затем перейдите к файлу app.js в Visual Studio Code и удалите alert(‘Hello world alert!’); . Сохраните этот файл и убедитесь, что оповещение исчезнет из браузера.

Чтобы остановить сервер, выполните Ctrl+C в терминале. Чтобы запустить сервер в любое время, введите npm run build:dev .

Добавление пакетов Служб коммуникации Azure

Используйте команду npm install , чтобы установить пакет SDK Служб коммуникации Azure для реализации вызовов на JavaScript.

npm install @azure/communication-common --save npm install @azure/communication-calling --save 

Это действие добавляет общие пакеты и пакеты вызовов Служб коммуникации Azure в качестве зависимостей пакета. Вы увидите,что в файл package.json добавлены два новых пакета. Дополнительные сведения о npm install см. на странице документации по npm для этой команды

Экран

Эти пакеты предоставляются командой разработчиков Служб коммуникации Azure и содержат библиотеки проверки подлинности и вызова. Команда —save сообщает, что приложение зависит от этих пакетов в рабочей среде, а значит их нужно включить в devDependencies файла package.json . Теперь при сборке приложения для рабочей среды указанные пакеты будут добавлены в рабочий код.

Публикация веб-сайта на статических веб-сайтах Azure

Создание конфигурации для развертывания в рабочей среде

Добавьте в webpack.prod.js следующий код:

const < merge >= require('webpack-merge'); const common = require('./webpack.common.js'); module.exports = merge(common, < mode: 'production', >); 

Эта конфигурация будет объединена с webpack.common.js (где вы указали входной файл и где сохраняются результаты). В конфигурации также будет задан режим production .

В классе package.json добавьте следующий код.

"build:prod": "webpack --config webpack.prod.js" 

Файл должен выглядеть следующим образом.

< "name": "CallingApp", "version": "1.0.0", "description": "", "main": "index.js", "scripts": < "test": "echo \"Error: no test specified\" && exit 1", "build:dev": "webpack-dev-server --config webpack.dev.js", "build:prod": "webpack --config webpack.prod.js" >, "keywords": [], "author": "", "license": "ISC", "dependencies": < "@azure/communication-calling": "^1.0.0-beta.6", "@azure/communication-common": "^1.0.0" >, "devDependencies": < "webpack": "^4.42.0", "webpack-cli": "^3.3.11", "webpack-dev-server": "^3.10.3", "webpack-merge": "^5.7.3" >> 

Экран

В окне терминала выполните следующую команду:

npm run build:prod 

Эта команда создает папку dist с готовым к работе статическим файлом app.js .

Экран

Развертывание приложения в службе хранилища Azure

Скопируйте index.html и app.css в папку dist .

В папке dist создайте файл с именем 404.html . Скопируйте в этот файл следующий код разметки:

      Document  

The page does not exists.

Сохраните файл (CONTROL + S).

Щелкните папку dist правой кнопкой мыши и выберите вариант Deploy to Static Website via Azure Storage (Развертывание на статическом веб-сайте через службу хранилища Azure).

Экран

В разделе Выбор подписки выберите Войти в Azure (или Создать бесплатную учетную запись Azure, если вы еще не создали подписку).

Экран

Выберите Создать новую учетную запись хранения>Дополнительно.

Экран

Укажите имя группы для хранилища:

Экран

Если нужно, создайте группу ресурсов:

Экран

Для параметра Would you like to enable static website hosting? (Включить размещение статических веб-сайтов) выберите вариант Да.

Экран

В поле Enter the index document name (Введите имя документа индекса) примите имя файла по умолчанию. Вы уже создали файл index.html .

В поле Enter the 404 error document path (Введите путь к документу с сообщением об ошибке 404) введите 404.html.

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

Службы коммуникации Azure выбирают обработчик мультимедиа в зависимости от расположения приложения.

Экран

Дождитесь, пока завершится создание ресурса и веб-сайта.

Выберите Browse to website (Перейти к веб-сайту).

Экран

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

Экран

Перейдите на портал Azure, выберите созданные группу ресурсов и приложение. Затем выберите Параметры>Статический веб-сайт. Вы увидите, что статические веб-сайты включены. Обратите внимание на основную конечную точку, имя документа индекса, а также путь к документу с сообщением об ошибке.

Экран

Выберите элемент Контейнеры в разделе Служба BLOB-объектов. В списке показаны два созданных контейнера: один для журналов ( $logs ) и один для содержимого вашего веб-сайта ( $web ).

Экран

Если вы откроете контейнер $web , то увидите файлы, которые были ранее созданы в Visual Studio и развернуты в Azure.

Экран

Приложение можно в любой момент повторно развернуть из Visual Studio Code.

Теперь вы готовы к созданию первого веб-приложения Служб коммуникации Azure.

Дальнейшие действия

Кроме того, вам может понадобиться следующее:

  • Добавление чата в приложение
  • Создание маркеров доступа пользователей
  • Сведения об архитектуре клиент-сервер
  • Сведения о проверке подлинности

Остановить программу node.js из командной строки

Я запускаю его с помощью node server.js , а затем закрываю его с помощью Ctrl + Z на Mac. Когда я пытаюсь запустить его снова с помощью node server.js , я получаю следующее сообщение об ошибке:

node.js:201 throw e; // process.nextTick error, or 'error' event on first tick ^ Error: listen EADDRINUSE at errnoException (net.js:670:11) at Array.0 (net.js:771:26) at EventEmitter._tickCallback (node.js:192:41) 

Я неправильно закрываю программу? Как я могу предотвратить это? node.js command
Поделиться Источник 09 мая 2012 в 19:05

19 ответов

Чтобы завершить программу, вы должны использовать Ctrl + C . Если вы это сделаете, она отправляет SIGINT , что позволяет программе завершаться красиво, отвязывая от любых портов, на которые она слушает. См. также: https://superuser.com/a/262948/48624

Поделиться 09 мая 2012 в 19:16

Ctrl + Z приостанавливает его, что означает, что он все еще может быть запущен. Ctrl + C фактически уничтожит его. Вы также можете убить его вручную, как показано ниже:

ps aux | grep node 

Найдите идентификатор процесса (второй слева):

kill -9 PROCESS_ID 

Это также может работать

killall node 

Поделиться 09 мая 2012 в 19:21
Или, как альтернатива, вы можете сделать все это в одной строке:

kill -9 $(ps aux | grep '\snode\s' | awk '') 

Вы можете заменить node внутри ‘\snode\s’ на любое другое имя процесса.
Поделиться 22 сентября 2014 в 15:17

Возобновите и убейте процесс:

  1. Дайте команду fg для возобновления процесса на переднем плане.
  2. введите Ctrl + C , чтобы правильно его убить.

Alternatively, вы можете убить его вручную, как показано ниже:

(NOTE: следующие команды могут требовать root, поэтому sudo. ваш друг)

pkill -9 node 

или, если у вас нет pkill, это может сработать:

killall node 

или, возможно, так:

kill $(ps -e | grep node | awk '') 

Иногда процесс перечисляет свой собственный grep, в этом случае вам понадобится:

kill $(ps -e | grep dmn | awk '') 

h/t @ruffin из комментариев к самому вопросу. У меня была та же проблема, и его комментарий помог мне решить ее самостоятельно.

Поделиться 26 мая 2017 в 21:48

Если вы интерактивно запускаете Node.js (REPL):

Ctrl + C вернет вас к > prompt, затем введите:

process.exit() 

или просто используйте Ctrl + D .

Поделиться 15 февраля 2014 в 07:54

Вы можете ввести .exit , чтобы выйти из node js REPL

Поделиться 22 июля 2013 в 10:12

На Linux попробуйте: pkill node

Taskkill /IM node.exe /F 
from subprocess import call call(['taskkill', '/IM', 'node.exe', '/F']) 

Поделиться 18 июля 2018 в 18:26

$ sudo killall node в другом терминале работает на mac, в то время как killall node не работает:

$ killall node No matching processes belonging to you were found 

Поделиться 18 июня 2013 в 12:53

Вы можете работать с следующей командой, чтобы быть конкретной в локальном kill server (здесь: 8000)

$:lsof -i tcp:8000 

Она даст вам следующие группы TCP:

КОМАНДА ПИД ИСПОЛЬЗОВАТЕЛЯ FD ТИПЕ РАЗМЕР РАЗМЕРОС/ИМЯ НОДА

node 21521 ubuntu 12u IPv6 345668 0t0 TCP *:8000 (LISTEN)

$:kill -9 21521 

Она убьет processId, соответствующий TCP*:8000

Поделиться 17 августа 2019 в 13:42

Вы можете использовать fuser, чтобы получить то, что вы хотите сделать.

Для получения идентификаторов процессов задач, работающих на порту, вы можете сделать следующее:

fuser >/tcp 

Допустим, порт 8888, команда становится:

fuser 8888/tcp 

А чтобы убить процесс, работающий на порту, просто добавьте переключатель -k.

fuser >/tcp -k 

Пример (порт 8888):

fuser 8888/tcp -k 

Вот и все! Он закроет процесс, прослушивающий порт. Я обычно делаю это перед запуском моего серверного приложения.

Поделиться 08 декабря 2019 в 16:57

  1. Откройте терминал
  2. Запустите следующий код и нажмите Enter

 sudo kill $(sudo lsof -t -i:4200) 

Поделиться 29 августа 2019 в 06:11

Хотя это поздний ответ, я нашел это в документации NodeJS:

Событие ‘exit’ испускается при выходе из REPL либо путем получения команды .exit в качестве входного значения, пользователь дважды нажимает -C , чтобы сигнализировать о сигнале, либо путем нажатия -D , чтобы сигнализировать о завершении входного потока. Обратный вызов слушателя вызывается без аргументов.

Таким образом, чтобы суммировать, вы можете выйти:

  1. Ввод .exit в REPL nodejs.
  2. Нажатие -C дважды.
  3. Нажатие -D .
  4. process.exit(0) означает естественный выход из REPL. Если вы хотите вернуть любой другой статус, вы можете вернуть ненулевое число.
  5. process.kill(process.pid) — это способ убить с помощью API nodejs из вашего кода или из REPL.

Поделиться 22 сентября 2016 в 16:41

Я добавляю этот ответ, потому что для многих проектов с производственными развертываниями у нас есть скрипты, которые останавливают эти процессы, поэтому нам не нужно.

Чистый способ управления процессами вашего сервера Node — использовать пакет forever (из NPM ).

Пример:

Установка Forever

npm install forever -g

Запуск сервера Node

forever start -al ./logs/forever.log -ao ./logs/out.log -ae ./logs/err.log server.js

Результат:

info: Forever processing file: server.js

Отключение сервера Node

forever stop server.js

Результат

info: Forever stopped process: uid command script forever pid id logfile uptime [0] sBSj «/usr/bin/nodejs/node» ~/path/to/your/project/server.js 23084 13176 ~/.forever/forever.log 0:0:0:0.247

Это очистит отключение вашего серверного приложения.

Поделиться 08 июля 2017 в 18:40

Если вы хотите остановить свой сервер с помощью npm stop или чего-то подобного, вы можете написать код, который убивает ваш серверный процесс, как:

require('child_process').exec(`kill -9 $`) 

Поделиться 31 января 2016 в 03:06

Я столкнулся с проблемой, когда у меня запущено несколько серверов узлов, и я хочу просто убить один из них и переразвернуть его из скрипта.

Примечание: Этот пример находится в оболочке bash на Mac.

Для этого я убежден, что мой вызов node максимально конкретен. Например, вместо вызова node server.js из директории приложений, я вызываю node app_name_1/app/server.js

Затем я могу убить его, используя:

kill -9 $(ps aux | grep ‘node\ app_name_1/app/server.js’ | awk »)

Это только убивает процесс node, запускаемый app_name_1/app/server.js.

Если вы запустили node app_name_2/app/server.js , этот процесс node продолжит работу.

Если вы решите, что хотите убить их всех, вы можете использовать kill node , как упоминали другие.

Поделиться 06 июля 2017 в 02:51

Поздний ответ, но на Windows, открытие диспетчера задач с помощью CTRL+ALT+DEL, а затем убийство процессов Node.js решит эту ошибку.

Поделиться 20 октября 2018 в 04:32

Для Windows сначала найдите PID с номером вашего порта

netstat -ano | findStr "portNumber" 

enter image description here

После этого убедитесь, что вы находитесь в корне вашего диска «c» И команда будет taskkill /F /PID your pid

Поделиться 12 июня 2019 в 14:35

Если вы используете VS Code и терминал, сначала выберите узел из правой части раскрывающегося списка, а затем выполните Ctrl + C. Тогда это будет работать

enter image description here

Нажмите y, когда вам будет предложено.

enter image description here

Поделиться 11 апреля 2020 в 12:44

Мой случай использования: на MacOS, запуск/перезапуск нескольких серверов узлов на различных портах из скрипта

запуск: «cd $PATH1 && node server1.js & cd $PATH2 && node server2.js &. «

остановка1: «kill -9 $(lsof -nP -i4TCP:$PORT1 | grep LISTEN | awk »)»

остановка: «stop1 & stop2 &. & stopN ; запуск

для получения дополнительной информации о поиске процесса по порту: Кто слушает данный TCP-порт на Mac OS X?

Простой WebSocket-сервер на Node.JS

Сейчас мы с вами напишем простой WebSocket-сервер на node.js. При подключении к этому серверу в ответ придёт приветственное сообщение. А так же будет доступна к выполнению пара не сложных команд.

Для этого потребуется установить Node.js с менеджером пакетов npm, он идёт в комплекте

Настройка проекта

В начале, нам потребуется создать директорию будущего проекта

mkdir websocket-server-node

Переходим в директорию

cd websocket-server-node

Далее нужно инициализировать новый проект через npm

npm init

Установщик потребует ответить на несколько вопросов, их можно пропустить

После инициализации проекта, необходимо добавить в проект библиотеку WS и настройку для работы с текстом в UTF-8

npm install ws
npm install --save-optional utf-8-validate

Код websocket-сервера

Теперь приступим к написанию кода. В директории проекта создадим новый файл server.js, откроем файл. Далее я последовательно опишу весь код, а вот ссылка на полный код на GitHub.

server.js:

В начале нужно подключить библиотеку для работы с websocket

const WebSocket = require('ws');

Далее, создадим константу, экземпляр класса WebSocket, с указанием порта на котором будет запущен WebSocket-сервер.

const wsServer = new WebSocket.Server();

В отличии от HTTP-сервера, WebSocket-сервер принимает подключение и удерживает его. HTTP-сервер принимает запросы напрямую, а WebSocket-сервер принимает запросы от подключения, такое соединение является полнодуплексное.

Напишем обработчик подключения, в качестве обработчика укажем функцию onConnect.

wsServer.on('connection', onConnect);

В момент подключения нового клиента в onConnection передаётся объекта ws-соединения, через него сервер будет общаться с каждым конкретным клиентом.

Функция onConnect принимает только один параметр, назовём его wsClient. В нашем конкретном примере мы подключим только два обработчика событий на объект wsClient: message и close.

message — обрабатывает событие входящего сообщения от клиента.

close — событие разрыва соединения с клиентом.

В самом начале функции onConnect, выведем в консоль сообщение что новый пользователь в сети. И отправим клиенту приветственное сообщение

Далее опишу заготовку для функции onConnect:

function onConnect(wsClient) < console.log('Новый пользователь'); // отправка приветственного сообщения клиенту wsClient.send('Привет'); wsClient.on('message', function(message) < /* обработчик сообщений от клиента */ >wsClient.on('close', function() < // отправка уведомления в консоль console.log('Пользователь отключился'); >>

На событие close сервер выведет в консоль уведомление.

Теперь напишем обработчик сообщений со стороны клиента. Договоримся, что команды сервер будет принимать в JSON-формате. JSON позволит отдельно указывать команду и параметры, а ответ сервера будет возвращаться в текстовом формате.

Формат JSON команд от клиента:

Как видно из формата, сервер будет принимать две команды:

  • echo-запрос, в ответ на который сервер отправит содержимое data
  • ping, в ответ сервер отправит pong
  • если команда не известна, сервер выведет в консоль уведомление «Неизвестная команда»

Содержимое обработчика сообщений от клиента:

try < // сообщение пришло текстом, нужно конвертировать в JSON-формат const jsonMessage = JSON.parse(message); switch (jsonMessage) < case 'ECHO': wsClient.send(jsonMessage.data); break; case: 'PING': setTimeout(function() < wsClient.send('PONG'); >, 2000); break; default: console.log('Неизвестная команда'); break; > > catch (error)

Как вы уже видите, на команду PING сервер не сразу ответит, а подождёт 2 секунды.

Добавим в конце файла server.js строку, которая выведет в консоль информацию, на каком порту запущен сервер.

console.log('Сервер запущен на 9000 порту');

Запуск сервера

Для запуска сервера необходимо перейти в консоль и ввести команду:

node server.js

Сервер доступен локально по адресу ws://localhost:9000. Остановить сервер можно сочетанием клавиш:

  • Для Windows и Linux (Ctrl + C)
  • Для MacOs (Cmd + C)

Если хотите проверить работу сервера с другого устройства в рамках локальной сети, то откройте ещё одно окно консоли и запустите команду

ipconfig

для Linux и MacOS:

ifconfig

В моём случае локальный адрес 192.168.0.15, значит из локальной сети сервер будет доступен по адресу ws://192.168.0.15:9000.

Проверка работы сервера

Чтобы протестировать работу сервера, откроем любую страницу в браузере и нажмём клавишу F12. Откроется DevTools, перейдём в консоль браузера и скопируем следующий код:

const myWs = new WebSocket('ws://localhost:9000'); // обработчик проинформирует в консоль когда соединение установится myWs.onopen = function () < console.log('подключился'); >; // обработчик сообщений от сервера myWs.onmessage = function (message) < console.log('Message: %s', message.data); >; // функция для отправки echo-сообщений на сервер function wsSendEcho(value) < myWs.send(JSON.stringify()); > // функция для отправки команды ping на сервер function wsSendPing() < myWs.send(JSON.stringify()); >

Запустите этот код. Далее в консоли браузера вызовите функцию wsSendPing:

wsSendPing()

Через 2 секунды сервер пришлёт ответ, и в консоли выведется:

Message: PONG

Вызовите функцию wsSendEcho, к примеру, с содержимым «Test!», и в консоли будет выведено:

Message: Test!

Вот и всё! Кому понравилось, ставьте Like, подписывайтесь. Всем Добра!

Ссылка на полный код GitHub

Как остановить npm?

Я запускаю сайт на node.js на vds хостинге с помощью npm start server.js . Все работает, консоль выводит логи, другие могут заходить по ip. Если нужно перезапустить node, приходится перезагружать весь сервер и заново запускать node. У себя на компе (на windows) я просто закрывал консоль. Как реализовать остановку и рестарт node из консоли для хостинга?

Отслеживать
12.1k 5 5 золотых знаков 29 29 серебряных знаков 40 40 бронзовых знаков
задан 17 янв 2018 в 12:59
Данис Хамидуллин Данис Хамидуллин
67 1 1 золотой знак 2 2 серебряных знака 7 7 бронзовых знаков

Ну, если вы орудуете через putty, то проще всего поставить утилиту screen и работать в ней. По моему чтобы завершить процесс, нужно всего лишь выполнить команду ctrl+c.

17 янв 2018 в 13:03
Возможный дубликат вопроса: Как сделать, чтобы nodeJs сервер работал без активированной консоли?
17 янв 2018 в 15:00

2 ответа 2

Сортировка: Сброс на вариант по умолчанию

Используй сочетание кнопок CTRL + C чтобы остановить. И научись пользоваться screen, я скинул тебе мануал как работать с ним в CentOS, но для других ОС тоже есть и использование аналогично, установка немного различна, но суть почти одна и та же.

Создай файл run.sh и запускай через него, будет в будущем удобно, особенно когда нормально разберешься.

#Путь до проекта cd /www/test.com/ #Запуск проекта, Test - название процесса screen -S Test npm run start 

Скрипт можешь добавить в автозагрузку, тогда сервер будет стартовать сразу же после включения

В packege.json укажи

"scripts": < "start": "node start server.js" >, 

Если ты во время разработки постоянно перезапускаешь сервер, то можешь воспользоваться nodemon, он следит за файлами и если, что-то изменилось, то перезапускается

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *