Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Web программирование > Общие вопросы Web
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 23.01.2013, 03:04   #1
ACE Valery
Сама себе режиссер
Старожил
 
Аватар для ACE Valery
 
Регистрация: 27.04.2007
Сообщений: 3,378
По умолчанию Начало работы с Node.js

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

Читаю урок.
Цитата:
Небольшой тривиальный «Hello world» пример общения клиента и сервера.
Клиентская сторона:
Код:
<script src="/socket.io.js"></script>
<script>
  var socket = io.connect('http://localhost');
  socket.on('news', function (data) {
    console.log(data);
    socket.emit('my other event', { my: 'data' });
  });
</script>
Серверная часть (Nodejs):
Код:
var io = require('socket.io').listen(80);

io.sockets.on('connection', function (socket) {
  socket.emit('news', { hello: 'world' });
  socket.on('my other event', function (data) {
    console.log(data);
  });
});
Ну что делать с серверной частью и как ее запускать, я поняла. А вот с клиентской что-то не очень. Где ее писать? Ну понятно, что в файле. Но где этот файл должен лежать и как его запускать, чтоб получить хоть какой-то результат?
Если я вас напрягаю или раздражаю, вы всегда можете забиться в угол и поплакать
ACE Valery вне форума Ответить с цитированием
Старый 23.01.2013, 11:52   #2
MyLastHit
Очень суровый
Участник клуба
 
Аватар для MyLastHit
 
Регистрация: 17.12.2009
Сообщений: 1,988
По умолчанию

Node.js и Socket.io работают по своей природе асинхронно. Всю логику нужно описывать в калбеках. А в каком файле у вас прописано общение по socket.io не важно, главное чтобы он был подцеплен в сайт как клиентский JS файл.
Код:
var io = require('socket.io').listen(80); //включаем сокет.ио в проект и слушаем на 80 порту. По хорошему нужно это делать на скрытом извне порту и пробрасывать например испод nginx куда надо.  

io.sockets.on('connection', function (socket) { //подписались на событие connection
  socket.emit('news', { hello: 'world' }); //послали клиенту, который подписан на news объект { hello: 'world' }
  socket.on('my other event', function (data) { //подписались на получения сообщения от клиента для события 'my other event'
    console.log(data); //работаем с полученными данными в калбеке успешного завершения
  });
});
Код:
socket.on('news', function (data) { //подписываемся на новое событие news
    console.log(data); //логика работы с полученным ответом
    socket.emit('my other event', { my: 'data' }); //отправка сообщения серверному событию 'my other event'
  });
Ненавижу быть как все, но люблю, чтобы все были как я.

Последний раз редактировалось MyLastHit; 23.01.2013 в 11:55.
MyLastHit вне форума Ответить с цитированием
Старый 23.01.2013, 15:32   #3
ACE Valery
Сама себе режиссер
Старожил
 
Аватар для ACE Valery
 
Регистрация: 27.04.2007
Сообщений: 3,378
По умолчанию

Я, вероятно, неправильно задала вопрос. Вот есть у меня код клиентский. Я пишу его в файл client.html

Код HTML:
<html>
<head>
<script src="D:/node/node_modules/socket.io/lib/socket.io.js"></script>
<script>
var socket = io.connect('http://localhost:3333'); // на сервере порт тоже изменила
  socket.on('news', function (data) {
    alert("NEWS");//console.log(data);
    socket.emit('my other event', { my: 'data' });
  });
)};

</script>
</head>
<body>
<p>Hello</p>
</body>
</html>
Затем открываю этот client.html в браузере, и - ничего не происходит. Как я понимаю, должен вывалиться алерт.
Если я вас напрягаю или раздражаю, вы всегда можете забиться в угол и поплакать
ACE Valery вне форума Ответить с цитированием
Старый 23.01.2013, 16:13   #4
MyLastHit
Очень суровый
Участник клуба
 
Аватар для MyLastHit
 
Регистрация: 17.12.2009
Сообщений: 1,988
По умолчанию

Юзайте хром и смотрите в консоль. Там наверняка ошибка о том, что нельзя послать запрос не из под сервера.
Качайте nginx например и на него файлы заливайте. Или включите сервер на NodeJS для раздачи статических файлов.
Ненавижу быть как все, но люблю, чтобы все были как я.
MyLastHit вне форума Ответить с цитированием
Старый 24.01.2013, 15:45   #5
ACE Valery
Сама себе режиссер
Старожил
 
Аватар для ACE Valery
 
Регистрация: 27.04.2007
Сообщений: 3,378
По умолчанию

Посмотрела ошибку, появились вопросы.
1) ошибка пишет, что не может найти модуль, указанный в этой строке модуля socket.io
Код:
var client = require('socket.io-client');
Поискала вообще по папке - нет такого файла в природе. Где его найти?
2) Модуль socket.io, подключаемый на сервере и файл socket.io.js, подключаемый на клиенте - это одно и то же?
2а) если нет, то где найти клиентский socket.io.js - такого файла тоже не существует в природе
3) Скачала nginx, распаковала, запускаю экзешник, появляется на мгновение консолька и сразу пропадает. В консольке какие-то надписи, вероятно, сообщение об ошибке, но прочитать их не успеваю. Каким образом это можно сделать?
4) Нашла статью по nginx.
Цитата:
Начнём с общих настроек. Сначала укажем пользователя, от имени которого будет работать nginx (от рута работать плохо, все знают )
user nobody;
Автор не утрудил себя мелочами, поэтому возникает вопрос: КУДА прописывать эти настройки.
5) Как включить сервер на NodeJS для раздачи статических файлов?
Код:
var express = require('express');
var app = express.createServer();
app.use(express.static(__dirname + '/public'));
И что класть в эту папку public? И как с ней потом взаимодействовать?
Если я вас напрягаю или раздражаю, вы всегда можете забиться в угол и поплакать
ACE Valery вне форума Ответить с цитированием
Старый 24.01.2013, 15:57   #6
MyLastHit
Очень суровый
Участник клуба
 
Аватар для MyLastHit
 
Регистрация: 17.12.2009
Сообщений: 1,988
По умолчанию

3,4,5) Заносите каталог с nginx в переменные окружения, потом из консоли выполняете
Для старта:
Код:
start nginx
Для остановки:
Код:
nginx -s stop
Если используете nginx, не за чем создавать статический сервер на ноде. В папке public должны быть все статические файлы(клиентские скрипты, таблицы стилей, html-страницы)
1,2) У меня при выполнении
Код:
npm install socket.io
Создается node_modules\socket.io\node_modules \socket.io-client
Проверьте, если не создалось, то коряво ставили и надо переустановить.
Ненавижу быть как все, но люблю, чтобы все были как я.

Последний раз редактировалось MyLastHit; 24.01.2013 в 15:59.
MyLastHit вне форума Ответить с цитированием
Старый 24.01.2013, 16:39   #7
ACE Valery
Сама себе режиссер
Старожил
 
Аватар для ACE Valery
 
Регистрация: 27.04.2007
Сообщений: 3,378
По умолчанию

Цитата:
node_modules\socket.io\node_modules \socket.io-client
папка есть, но как я понимаю, тем кодом подключается именно жабаскриптовый файл, а не папка...
Если я вас напрягаю или раздражаю, вы всегда можете забиться в угол и поплакать
ACE Valery вне форума Ответить с цитированием
Старый 24.01.2013, 16:51   #8
MyLastHit
Очень суровый
Участник клуба
 
Аватар для MyLastHit
 
Регистрация: 17.12.2009
Сообщений: 1,988
По умолчанию

Эм.. Нет. В NODE.JS подключается этим кодом и директория, содержащая какие-либо служебные файлы. А для клиентской части нужно сбилдить(если это не произошло автоматом) файл
Код:
node_modules\socket.io\node_modules\socket.io-client\bin\builder.js
Билдится самой нодой из консоли. Тогда в папке ..\dist появятся
Код:
socket.io.js
socket.io.min.js
Ну а на сервере подключаете
Код:
ode_modules\socket.io\lib\socket.io.js
обычным require('socket.io')
Ненавижу быть как все, но люблю, чтобы все были как я.

Последний раз редактировалось MyLastHit; 24.01.2013 в 16:54.
MyLastHit вне форума Ответить с цитированием
Старый 27.01.2013, 02:58   #9
ACE Valery
Сама себе режиссер
Старожил
 
Аватар для ACE Valery
 
Регистрация: 27.04.2007
Сообщений: 3,378
По умолчанию

Благодарю. С nginx'ом так и не получилось - все равно ошибка мелькает, но и без него запустилось.
Если я вас напрягаю или раздражаю, вы всегда можете забиться в угол и поплакать
ACE Valery вне форума Ответить с цитированием
Старый 27.01.2013, 16:42   #10
MyLastHit
Очень суровый
Участник клуба
 
Аватар для MyLastHit
 
Регистрация: 17.12.2009
Сообщений: 1,988
По умолчанию

Скачайте http://nginx.org/download/nginx-1.3.11.zip
Создайте
Код:
C:\server\nginx
C:\server\nodejs
C:\server\static
В C:\server\nginx распакуйте файлы из архива. Потом в конфиге укажите root на C:\server\static
В nodejs держите скрипты сервера.
Теперь из под cmd с правами администратора:
Код:
cd \server\nginx
start nginx
При этом нужно, чтобы ни одно приложение не блокировало 80 порт. Nginx запустится в фоновом режиме и теперь будет доступен каталог static из под 127.0.0.1
Ненавижу быть как все, но люблю, чтобы все были как я.
MyLastHit вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Начало работы в Oracle XE 11 Dvoishnik Помощь студентам 0 16.11.2011 14:05
Начало работы с реестром! asdfads Windows 1 23.05.2011 09:55
AVR, начало работы wanes101 Микроконтроллеры, робототехника, схемотехника, 3D принтеры 6 09.01.2011 16:34
начало работы... zetrix PHP 1 29.10.2006 20:11