×
=0) { let js = text.slice(pos1, pos2); + '<\/' + "script" + '>'; arrText.push(js); // next pos1 = pos2; continue; } } } break; } return arrText; } function OpenDialog(parentDiv, urlContent) { parentDiv = document.getElementById('modal-background'); // new !!!!!!! parentDiv.appendChild(document.getElementById('modal-template')); document.getElementById('modal-background').style.display = "block"; document.getElementById('modal-template').style.display = "flex"; // !!!!! document.getElementById('modal-body').innerHTML = ""; post_url(urlContent, "", function(text_from_server) { var element = document.getElementById('modal-body'); element.innerHTML = text_from_server; // add scripts var arrJSText = get_scripts(text_from_server); for (var i=0; i
dir.by
Поиск
Программирование, разработка, тестирование
→
Node.js (это web сервер исполняющий js файлы)
→
Chat (пользователь пишет сообщение и у других появляется сообщение) используя socket.io в Node.js (проект в Visual Studio)
Посмотрели
6426
раз(а)
Chat (пользователь пишет сообщение и у других появляется сообщение) используя socket.io в Node.js (проект в Visual Studio)
последнее обновление: 9 апреля 2018
Шаг 1)
Запускаем Visual Studio 2013 или другую версию (лучше всего Visual Studio 2017)
Шаг 2)
Создаем новый проект
Нажимаем в меню:
File
→
New
→
Project
Выбираем:
Other Languages
→
JavaScript
→
Node.js
→
Blank Node.js Web Application
Шаг 3)
В файле server.js напишем такой код:
JavaScript
Файл
J:/NodeJsApp1/server.js
var
app = require('express')();
var
http = require('http').Server(app);
var
io = require('socket.io')(http);
// load html
app.get('/',
function
(req, res) {
res.sendFile(__dirname + '/my.html');
});
// message 'connection'
io.on('connection',
function
(socket) {
// добавляем user
Users.Add(socket);
// message 'disconnect'
socket.on('disconnect',
function
(msg) {
Users.Delete(socket);
// delete user
});
// message 'User entered Name'
socket.on('User entered Name',
function
(userName) {
socket.userName = userName;
});
// message 'add message'
socket.on('add message',
function
(text) {
// send message "user added message" to all users
io.emit(
"user added message"
, { 'name': socket.userName, 'message': text });
});
});
// web server
var
port = process.env.PORT || 1337;
http.listen(port,
function
() {
console.log('listening web server');
});
///// my utils /////////
var
Users = {
_sockets: [],
// массив socket
Add:
function
(curSocket) {
// add user
this
._sockets.push(curSocket);
// LOG!!!
console.log('user id=' + curSocket.conn.id + ' connected');
},
Delete:
function
(curSocket) {
for
(
var
i = (this._sockets.length - 1); i >= 0; i--) {
// delete
if (this._sockets[i] == curSocket)
this
._sockets.splice(i, 1);
}
// LOG !!!
console.log('user id=' + curSocket.conn.id + ' disconnected');
}
}
Описание файла server.js
Фрагмент кода
Что означает
Файл
server.js
io.on('connection', function (socket) {
// добавляем user
Users.Add(socket)
...
});
означает что мы обработаем
стандартное
событие
'connection'
Обработчиком события является функция
function (socket) {
// добавляем user
Users.Add(socket)
...
}
событие
'connection'
вызывется как только в
my.html
файле вызовется код:
<script>
var socket = io();
</script>
Файл
server.js
socket.on('disconnect', function (msg) {
Users.Delete(socket); // delete user
});
означает что мы обработаем
стандартное
событие
'disconnect'
Обработчиком события является функция
function (msg) {
Users.Delete(socket); // delete user
}
событие
'disconnect'
вызывется когда мы закроем страницу или нажмем refresh (перегрузим страницу)
Файл
server.js
socket.on('User entered Name', function (userName) {
socket.userName = userName;
});
означает что обработаем
мое событие
(я ввел свое название)
'User entered Name'
Обработчиком события является функция
function (userName) {
socket.userName = userName;
}
событие
'User entered Name'
вызывется как только в
my.html
файле вызовется код:
<script>
...
socket.emit("User entered Name", elem_userName.value);
...
</script>
Файл
server.js
socket.on('add message', function (text) {
// send message "user added message" to all users
io.emit("user added message", { 'name': socket.userName, 'message': text });
});
означает что обработаем
мое событие
(я ввел свое название)
'add message'
Обработчиком события является функция
function (text) {
// send message "user added message" to all users
io.emit("user added message", { 'name': socket.userName, 'message': text });
}
событие
'add message'
вызывется как только в
my.html
файле вызовется код:
<script>
...
socket.emit("add message", elem.value);
...
</script>
Шаг 4)
добавим новый файл my.html
Нажимаем правой клавиши мыши на проекте
NodeJsApp1
→
Add
→
New Item
→
HTML file
→
my.html
В файле my.html напишем такой код:
Html
Файл
J:/NodeJsApp1/my.html
<html>
<!-- head -->
<head>
<title>
My chat
</title>
</head>
<!-- body -->
<body>
<!-- HTML user Name -->
<div
id='SECTION_UserName' style='padding-top:15px;'>
<div>
User name:
</div>
<input
type='text' id='elemID_UserName' autofocus />
<input
type='submit' value='Ok' onclick='StoreUserName();' style='color:green; font-weight:700;' />
</div>
<!-- HTML messages -->
<div
id='SECTION_messages' style='padding-top:15px; display:none;'>
Your message:
<div
style='padding-bottom:15px;'>
<textarea
type='text' id='myMessage' size='40' rows='4' cols='30'>
</textarea>
</div>
<input
type='submit' value='Add message' onclick='AddMessage();' style='font-weight:700;' />
<div
id='messages_history' style='padding-top:15px;'>
</div>
</div>
<!-- java script -->
<script
src=
"/socket.io/socket.io.js"
>
</script>
<script>
// create socket
var
socket = io();
// receive message "user added message"
socket.on('user added message',
function
(msg) {
// html element
var
elem = document.getElementById('messages_history');
elem.innerHTML += '
<u>
' + msg.name + '
</u>
' + ': ' + msg.message + '
<BR>
';
});
</script>
<script>
function
StoreUserName
()
{
// html element
var
elem_userName = document.getElementById('elemID_UserName');
// send message "User entered Name"
socket.emit(
"User entered Name"
, elem_userName.value);
// show user name
document.getElementById('SECTION_UserName').innerHTML =
"User: "
+ '
<b>
<font
color=green>' + elem_userName.value + '
</font>
</b>
';
// show Div with messages
document.getElementById('SECTION_messages').style.display = "";
// set focus
document.getElementById('myMessage').focus();
}
function
AddMessage
() {
// html element
var
elem = document.getElementById('myMessage');
// send message "add message"
socket.emit(
"add message"
, elem.value);
// clear
elem.value = "";
}
</script>
</body>
</html>
Описание файла my.html
Фрагмент кода
Что означает
Файл
my.html
<script>
...
socket.on('user added message', function (msg) {
// html element
var elem = document.getElementById('messages_history');
elem.innerHTML += '<u>' + msg.name + '</u>' + ': ' + msg.message + '<BR>';
});
...
</script>
означает что обработаем
мое событие
(я ввел свое название)
'user added message'
Обработчиком события является функция
function (msg) {
// html element
var elem = document.getElementById('messages_history');
elem.innerHTML += '<u>' + msg.name + '</u>' + ': ' + msg.message + '<BR>';
}
событие
'user added message'
вызывется как только в
server.js
файле вызовется код:
io.emit("user added message", { 'name': socket.userName, 'message': text });
На заметку!
• серверная функция
socket.emit
(message, data) отсылает конкретному пользователю data
• серверная функция
io.emit
(message, data) отсылает всем пользователя data
Шаг 5)
добавим express и socket.io пакеты
Нажимаем в меню:
Tools → NuGet Package Manager → Package Manager Console
В командной строке пишем:
npm install --save express
ждем и потом пишем:
npm install --save socket.io
Подробнее о
добавлении npm пакетов...
Шаг 6)
запускаем проект
Нажимаем меню
Debug
→
Start Without Debugging
Открываем еще браузер и вводим web адрес
http://localhost:1337
У нас открыто 2 браузера
User Evgen вводит текст и нажимает "Add message"
текст появляется у всех пользователей
← Предыдущая тема
Загрузка html файла и вывод на экран в Node.js (проект в Visual Studio)
Следующая тема →
Create https localhost certificate for nodejs
Ваши Отзывы ... комментарии ...
Вашe имя
Ваш комментарий
(www ссылки может добавлять только залогиненный пользователь)
+ картинку
Объявления
Объявления
•
Что такое Node.js ?
•
Как узнать версию Node.js ?
•
Установка Node.js (скачиваем и устанавливаем для Windows)
•
Как обновить версию Node.js (установить последнюю версию) ?
npm в Node.js
•
Что такое npm в Node.js?
•
Как узнать версию npm (Node.js) ?
•
Как обновить версию npm (установить последнюю версию) ? | Node.js
•
Файл package.json в Node.js
•
Разница между тильдой(~) и крышкой(^) в package.json | Node.js
•
Файл package-lock.json в Node.js
•
"npm init" | Результат: создает пустой файл package.json и заполняет этот файл данными по умолчанию | Node.js
•
"npm install имя_пакета" | Результат: устанавливает JavaScript библиотеку (пакет) | Например выполняем в командной строке "npm install jquery" | добавит jQuery библиотку в папку node_modules | Node.js
•
"npm install" | Результат: устанавливает JavaScript библиотеки (пакеты) которые указаны в файле package.json | Node.js
•
"npm list -g" (посмотреть список всех установленных глобальных пакетов) | Node.js
•
"npm install -g имя_пакета" (глобальная установка пакета) | Node.js
•
"npm uninstall -g имя_пакета" (глобальное удаление пакета) | Node.js
•
Выполняем в командной строке "npm run EvgenConvertCSS" | Файл package.json вот такой: "scripts": {"EvgenConvertCSS": "node-sass --include-path scss 1.scss 1.css"} | Node.js
•
Выполняем в командной строке "npm run EvgenMyCommand" | Файл package.json вот такой: "scripts": {"EvgenMyCommand": "mkdir AAA"} | Node.js
•
Выполняем в командной строке "npm run MyScript1" | Файл package.json вот такой: "scripts": {"MyScript1": "npm run MyScript2"} | Node.js
•
watch опция в npm скриптах (наблюдаем за изменениями в файлах)
Отладка NodeJS
•
Отладка Node.js. Смотрим значения переменных, стэк функций, breakpoints в Visual Studio Code
Пишем Node.js приложение в текстовом редакторе (Notepad, Far)
•
Новое Node.js приложение (создаем приложение в текстовом редакторе, запуск в console)
•
Добавляем express пакет в Node.js (в Windows console)
•
Загрузка html файла и вывод на экран в Node.js (создаем приложение в текстовом редакторе, запуск в console)
Используем модуль socket.io
•
Простое приложение с socket.io в Node.js (создаем приложение в текстовом редакторе, запуск в console)
Пишем Node.js проект в Visual Studio Code
•
Новый Node.js проект (проект создаем в Visual Studio Code)
•
Создаем новый Node.js проект с websocket (проект создаем в Visual Studio Code) | client & server
Пишем Node.js проект в Visual Studio
•
Новый Node.js проект (проект создаем в Visual Studio)
•
Добавляем express пакет в Node.js (в Visual Studio)
•
Загрузка html файла и вывод на экран в Node.js (проект в Visual Studio)
•
Chat (пользователь пишет сообщение и у других появляется сообщение) используя socket.io в Node.js (проект в Visual Studio)
https localhost certificate
•
Create https localhost certificate for nodejs
Как устроены модули в Node.js (require, exports)
•
Что такое модули в Node.js ?
•
Как устроена внутри функция require и что происходит когда пишем require("Имя_Модуля") в Node.js
Создаем свой модуль в Node.js
•
Пишем и подключаем свой модуль в Node.js
Встроенные модули Node.js
•
'Express' модуль Node.js !!!!!!!!!!!!
Хостинг Node.js на вашем сайте
•
Хостинг и установка Node.js на вашем сайте. Настройка Node.js в cPanel
•
В Node.js меняю js файл а отображается старый кэшированный js файл. Перезапустить Node.js на вашем сайте в cPanel
•
Добавляем npm пакеты в Node.js на вашем сайте (используем cPanel)
•
Error during WebSocket handshake... Хостинг Node.js на вашем сайте
Heroku.com бесплатный сервис. Запуск вашего Node.js приложения на Heroku.com
•
Для использования Heroku.com нужно установить: Git, Node.js
•
Регистрация на сайте Heroku.com
•
Инсталяция коммандной строки "Heroku CLI"
•
"Heroku CLI" работает очень медленно для Windows
•
Запуск вашего Node.js приложения на Heroku.com
WWW сайты для изучения Node.js
•
Сайты для изучения Node.js
Ваши вопросы присылайте по почте:
info@dir.by