Войти
ПрограммированиеФорумВеб

Помогите с node.js

Страницы: 1 2 Следующая »
#0
11:11, 21 июля 2012

В общем решил попробовать эту библиотеку, для создания серверной части websockets приложения. Немного не получается, как вы поняли :'(

Код сервера (использую библиотеку Node.ws.js):

var util = require( 'util' ),
   ws = require( './ws.js' );
    
function serverStarter( websocket ) {
  //функция инициализации сервера
  websocket.addListener( 'connect', serverNewUser() );
  websocket.addListener( 'data', serverNewMessage( data ) );
  websocket.addListener( 'close', serverEndUser() );
}

function serverNewUser () {
  util.debug('Новое подключение');
}

function serverNewMessage ( data ) {
}

function serverEndUser () {
}
    
var Server = ws.createServer( 'serverStarter( websocket );' );

Server.listen(12345);
util.debug('Запущен сервер, порт 12345');

<html>
     <head>
         <script>
             var webSocket = new WebSocket('ws://localhost:12345');
   
             webSocket.onopen = function(event) {
                 alert('onopen');
                 webSocket.send("Hello Web Socket!");
             };
   
             webSocket.onmessage = function(event) {
                 alert('onmessage, ' + event.data);
                 webSocket.close();
             };
   
             webSocket.onclose = function(event) {
                 alert('onclose');
             };
         </script>
     </head>
     <body>
     </body>
</html>

Клиент просто не подключается, сервер вылетает выводя в терминал:

DEBUG: Запущен сервер, порт 12345

/home/ilya/Рабочий стол/NODE.JS TEST/server/ws.js:234
websocketListener(emitter); // emits: "connect", "data", "close", provides
^
TypeError: string is not a function
at Server.<anonymous> (/home/ilya/Рабочий стол/NODE.JS TEST/server/ws.js:234:5)
at Server.emit (events.js:67:17)
at TCP.onconnection (net.js:852:8)

Ubuntu 12.04
Google Chrome 20.0.1132.47


#1
11:40, 21 июля 2012

AgentX001
> ws.createServer( 'serverStarter( websocket );' );
зачем здесь кавычки?

#2
11:51, 21 июля 2012

cNoNim
Без них не работает. Я думал там структура по типу SetTimeout, можно указать функцию, или строку для выполнения.
https://github.com/ncr/node.ws.js - ссылка на саму либу и примеры.

#3
11:56, 21 июля 2012

ну а посмотреть исходники либы или сделать в соответствии с примером?

#4
12:38, 21 июля 2012

Вот пример:
http://web.izjum.com/websocket-chat-on-nodejs
А в параметры передаётся не строка а функция, причём в эту функцию потом передаётся объект типа websocket в котором уже описываются эвенты.

А в случае указаного примера значит вызыватся должна так var Server = ws.createServer(serverStarter );

#5
13:07, 21 июля 2012

VBKesha
Ошибка теперь такая:

DEBUG: Запущен сервер, порт 12345
DEBUG: Новое подключение

events.js:101
    throw new Error('addListener only takes instances of Function');
          ^
Error: addListener only takes instances of Function
    at EventEmitter.<anonymous> (events.js:101:11)
    at serverStarter (/home/ilya/Рабочий стол/NODE.JS TEST/server/server.js:16:12)
    at Server.<anonymous> (/home/ilya/Рабочий стол/NODE.JS TEST/server/ws.js:234:5)
    at Server.emit (events.js:67:17)
    at TCP.onconnection (net.js:852:8)

#6
16:30, 21 июля 2012

Не работал с WebSocket... но чисто по синтаксису должно быть так.

//Точно не помню, важен ли порядок... но лучше всегда создавай функции до использования.
function serverNewUser () {
  util.debug('Новое подключение');
}

function serverNewMessage ( data ) {
}

function serverEndUser () {
}

//...
function serverStarter( websocket ) {
  websocket.addListener( 'connect', serverNewUser); //Именно чистое имя
  websocket.addListener( 'data', serverNewMessage);
  websocket.addListener( 'close', serverEndUser);
}

//..
ws.createServer(serverStarter).listen(12345);

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

var serverNewUser = function(){
   util.debug('Новое подключение');
};

websocket.addListener( 'connect', serverNewUser);

#7
21:12, 21 июля 2012

alexes
Огромное спасибо, всё понял=) Но увы, клиент, как не подключался, так и не подключается... Тестировал через telnet, сервер создаётся, отвечает. Что может быть?

#8
21:16, 21 июля 2012

А как у вас тут репутацию изменять? Хочу отблагодарить тех кто пытался помочь;)

#9
21:33, 21 июля 2012

AgentX001
> А как у вас тут репутацию изменять? Хочу отблагодарить тех кто пытался помочь;)
Эмм... Вообще-то её тут нет.

#10
22:17, 21 июля 2012

horizonOffset
Да ну? Мне этот сайт начинает нравиться ещё больше!:D Так, а что с моим вопросом?

#11
22:26, 21 июля 2012

AgentX001
> Но увы, клиент, как не подключался, так и не подключается...
У всех браузеров есть консоль отладки (Ctrl+Shift+J в Chromium). Посмотри создается ли объект сокета, может где синтаксическая ошибка и тп.

#12
22:35, 21 июля 2012

alexes
Ошибок нет, просто срабатывает alert('onclose')

#13
23:43, 21 июля 2012

Это не срабатывает?

alert('onmessage, ' + event.data);

Оффтоп.
Лучше использую

console.log(event.data);

#14
0:27, 22 июля 2012

Проверил ради интереса у себя эфект тотже, походу чтото поменялось либо в ноде либо в работе протокола хрома, надо брать из репозитория websocket-server /websocket и разбиратся с ним.
Либо идти в сторону этой статьи http://habrahabr.ru/post/127525/

Страницы: 1 2 Следующая »
ПрограммированиеФорумВеб

Тема в архиве.