Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Caché, Ensemble, DeepSee, MiniM, IRIS, GT.M Новый топик    Ответить
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
 [gt.m] Node.js  [new]
Valeriu
Member

Откуда: Chisinau
Сообщений: 2056
Всем доброго дня !
Я пару дней смотрю в сторону этого зверя...
Есть здесь на форуме наши мампсеры, которые могут подсказать
что нибудь по этому поводу ?
В двух словах:

API Сервер. Естественно на GT.M - рабочий 100%
А вот на счет клиента вопрос.
Жду чтоб не засорять пост.

Спасибо.
13 авг 15, 08:53    [18011182]     Ответить | Цитировать Сообщить модератору
 Re: [gt.m] Node.js  [new]
krvsa
Member

Откуда: г Волжский
Сообщений: 13153
Valeriu
Есть здесь на форуме наши мампсеры, которые могут подсказать
что нибудь по этому поводу ?

Наш директор мечтает использовать эту связку...
13 авг 15, 10:58    [18011829]     Ответить | Цитировать Сообщить модератору
 Re: [gt.m] Node.js  [new]
doublefint
Member

Откуда: Беларусь, Минск
Сообщений: 944
Valeriu, как минимум вот это
13 авг 15, 11:07    [18011878]     Ответить | Цитировать Сообщить модератору
 Re: [gt.m] Node.js  [new]
Valeriu
Member

Откуда: Chisinau
Сообщений: 2056
Есть клиент TCP на node.js :
+
net = require('net');

 HOST = '192.168.1.111';
 PORT = 6969;
 var str='w $zv';

 client = new net.Socket();
 client.connect(PORT, HOST, function() {

    console.log('CONNECTED TO: ' + HOST + ':' + PORT);
    // Write a message to the socket as soon as the client is connected, the server will receive it as message from the client 
    client.write('XE ' + str + '\r\n');

});

// Add a 'data' event handler for the client socket
// data is what the server sent to this socket
client.on('data', function(data) {
    
    console.log('Data returned from [gtm] DataBase: ' + data);
    // Close the client socket completely
    client.destroy();
    
});

// Add a 'close' event handler for the client socket
client.on('close', function() {
    console.log('Connection closed');
});

Конектится и получаю ответ:
[root@gtmdatabase node]# node client.js
CONNECTED TO: 192.168.1.111:6969
Data returned from [gtm] DataBase: GT.M V6.2-002A Linux x86_64
Connection closed
[root@gtmdatabase node]#

До меня не доходит, как это соединение не разорвать, а чтоб она постоянно была,
пока пользователь не закроет ее.
(Понятно, здесь в коде явно закрывается по команде.)
Но я например хочу еще использовать какие-то функции, вызовы и тд.
Как-то мне трудно приходится все это осилить, когда всю жизнь кодил на М да еще на Васик ...
Это обьявить бы модально, но как- не мого понять...
Для чего это было хорошо:
Написать буквально ПАРУ ФУНКЦИЙ и можно перевернуть горы.
Какие клиентские приложения WEB-кие получались бы !...
13 авг 15, 11:46    [18012107]     Ответить | Цитировать Сообщить модератору
 Re: [gt.m] Node.js  [new]
krvsa
Member

Откуда: г Волжский
Сообщений: 13153
Valeriu
Как-то мне трудно приходится все это осилить, когда всю жизнь кодил на М да еще на Васик ...
Это обьявить бы модально, но как- не мого понять...

Качай книжку "Node.js в действии"
http://rus-torrents.com/viewtopic.php?t=58707&view=newest
http://nnm-club.me/forum/viewtopic.php?t=835064

Там примеры есть. Правда она не все рабочие... Но подправить можно.
Как все установить на дабы попробовать - на Ангулар есть пошаговая инструкция.
http://angular-doc.herokuapp.com/tutorial
13 авг 15, 13:32    [18012881]     Ответить | Цитировать Сообщить модератору
 Re: [gt.m] Node.js  [new]
krvsa
Member

Откуда: г Волжский
Сообщений: 13153
Вот пример сервера для чата

var http = require('http');
var fs = require('fs');
var path = require('path');
var mime = require('mime');
var cache = {};
function send404(response) {
	response.writeHead(404, {'Content-Type': 'text/plain'});
	response.write('Error 404: resource not found.');
	response.end();
};
function sendFile(response, filePath, fileContents) {
	response.writeHead(
		200,
		{"content-type": mime.lookup(path.basename(filePath))}
	);
	response.end(fileContents);
};
function serveStatic(response, cache, absPath) {
	if (cache[absPath]) {
		sendFile(response, absPath, cache[absPath]);
	} else {
		fs.exists(
			absPath, 
			function(exists) {
				if (exists) {
					fs.readFile(
						absPath, 
						function(err, data) {
							if (err) {
								send404(response);
							} else {
								cache[absPath] = data;
								sendFile(response, absPath, data);
							}
						}
					);
				} else {
					send404(response);
				}
			}
		);
	}
};
// Создание HTTP-сервера с помощью анонимной функции, определяющей его поведение при выполнении запросов
var server = http.createServer(
	function(request, response) {
		var filePath = false;
		if (request.url == '/') {
			// Определение HTML-файла, обслуживаемого по умолчанию
			filePath = 'public/index.html';
		} else {
			// Преобразование URL-адреса в относительный путь к файлу
			filePath = 'public' + request.url;
		}
		var absPath = './' + filePath;
		// Обслуживание статического файла
		serveStatic(response, cache, absPath);
	}
);
server.listen(
	3000, 
	function() {
		console.log("Server listening on port 3000.");
	}
);
var chatServer = require('./lib/chat_server');
chatServer.listen(server);
13 авг 15, 13:33    [18012886]     Ответить | Цитировать Сообщить модератору
 Re: [gt.m] Node.js  [new]
Valeriu
Member

Откуда: Chisinau
Сообщений: 2056
krvsa,
Сервер не нужен. Он есть на GT.M стороне.
Меня интересует создание клиентских функций для сокета node.js
Вроде что-то нащупал.

connect.js
net = require('net');
 HOST = '192.168.1.111';
 PORT = 6969;
 client = new net.Socket();
 client.connect(PORT, HOST, function() {
 //console.log('CONNECTED TO: ' + HOST + ':' + PORT);
});
// и ВСЕ !!

xecute.js
var client = require('./connect');
  var xecute = function(str) {
  client.write('XE ' + str + '\r\n');
};
  client.on('data', function(data) {
  return data;
console.log(xecute('w $zv'));
});

функцию с возвратом пока не могу запускать ...
А книжки читаемс
13 авг 15, 14:21    [18013192]     Ответить | Цитировать Сообщить модератору
 Re: [gt.m] Node.js  [new]
krvsa
Member

Откуда: г Волжский
Сообщений: 13153
Valeriu
Сервер не нужен. Он есть на GT.M стороне.

Значит у нас разное понимание тех серверов...

В Кащее работает связка ИИС+CSP... При использовании Node.js нужен сервер аналогичный CSP.
13 авг 15, 15:42    [18013775]     Ответить | Цитировать Сообщить модератору
 Re: [gt.m] Node.js  [new]
doublefint
Member

Откуда: Беларусь, Минск
Сообщений: 944
Valeriu, давайте немного уточним:
NodeJS (например, модуль express) будет "сервером" для браузера пользователя.
И для обработки некоторых его (браузера) запросов, NodeJS будет вызывать (через модуль net) ваш API сервер на GT.M , так?
Учитывая природу web, есть ли смысл держать постоянное соединение с GT.M?
13 авг 15, 18:30    [18014776]     Ответить | Цитировать Сообщить модератору
 Re: [gt.m] Node.js  [new]
Valeriu
Member

Откуда: Chisinau
Сообщений: 2056
doublefint,
Я немножко по другому это представляю.
В чем замысел этой затеи ?
На линукс сервер установлен gt.m
Там же, установлен node.js.
Через демон xinetd, запускаю некое СЕРВЕРНОЕ приложение(рутину) на gt.m,
которое слушает соединение на порту 6969 и в зависимости,
что получает от клиента (в нашем случае является
КЛИЕНТСКОЕ TCP приложение node.js на этом же сервере, заметьте - не СЕРВЕРНОЕ !)
отправляет обработанные данные М рутины, в некоторой клиентской функции node.js.
Дальше, делаем что хотим с этими данным из этой функции.
Отображаем например на web странице !
Сумбурно, но где-то так.
13 авг 15, 19:32    [18015050]     Ответить | Цитировать Сообщить модератору
 Re: [gt.m] Node.js  [new]
doublefint
Member

Откуда: Беларусь, Минск
Сообщений: 944
Valeriu, насколько я понял теперь, вопрос у вас в организации кода на NodeJS?
Т.е., что (как) написать в обработчике client.on('data', function( data ){ ... }), чтобы реализовать собственный протокол обмена с сервером API?
13 авг 15, 21:42    [18015377]     Ответить | Цитировать Сообщить модератору
 Re: [gt.m] Node.js  [new]
Valeriu
Member

Откуда: Chisinau
Сообщений: 2056
doublefint,
Да. Совершено верно.
13 авг 15, 22:00    [18015441]     Ответить | Цитировать Сообщить модератору
 Re: [gt.m] Node.js  [new]
doublefint
Member

Откуда: Беларусь, Минск
Сообщений: 944
Valeriu, тогда нам надо переходить на другую ветку форума.
Ибо общение с tcp-сервером GT.M будет отличаться от общения с любым другим tcp-сервером только порядком обмена и передаваемыми значениями.
Но, как концепт
+ как-то так
/** @module my/protocol */
var net = require('net');

/**@constructor*/
function Protocol( opts ){
 
   this.host = opts.host || '192.168.1.111';
   this.port = opts.port || 6969;
   this.client =new net.Socket();
   this.connected = false;

   var protocol = this, client = protocol.client;
  // event bindings
   client.connect( protocol.port, protocol.host, protocol.onConnect );
   client.on('close', function(){  protocol.connected = false; });

}

/** */
Protocol.prototype.onConnect = function( data ){
    var protocol = this;  protocol.connected = true;
    console.log('Connected to: ' + protocol.host + ':' + protocol.port);
    protocol.checkVersion();
};

/** */
Protocol.prototype.checkVersion = function(){
    var protocol = this, client = protocol.client;
    client.on('data', protocol.onCheckVersion ); //change handler
    client.write('XE w $zv \r\n');
};

/** */
Protocol.prototype.onCheckVersion = function( data ){
    var protocol = this, client = protocol.client;
    if ( data.indexOf("GT.M") == -1 ) {
        client.destroy(); return;
    }
    client.on('data', protocol.onAuthenticate ); //change handler once more
    client.write('XE d ^authenticate() \r\n');
};

/** */
Protocol.prototype.onAuthenticate = function( data ){
    ///... etc.
}

module.exports = Protocol;
13 авг 15, 22:47    [18015587]     Ответить | Цитировать Сообщить модератору
 Re: [gt.m] Node.js  [new]
Valeriu
Member

Откуда: Chisinau
Сообщений: 2056
doublefint,
Спасибо огромное !
Сейчас только разобраться еще как этот модуль запустить...
Я полный чайник в JS, но стараюсь... ;)
В смысле вызвать по отдельности функции.
14 авг 15, 07:47    [18016077]     Ответить | Цитировать Сообщить модератору
 Re: [gt.m] Node.js  [new]
doublefint
Member

Откуда: Беларусь, Минск
Сообщений: 944
Valeriu,
+ Запуск
 var Protocol = require('my/protocol');

 /** handler customization */
 Protocol.prototype.onAuthenticate = function(data){
  // ... do something custom
 }

 var p = new Protocol({ host:'127.0.0.1', port: 6000 }); //run
14 авг 15, 08:22    [18016141]     Ответить | Цитировать Сообщить модератору
 Re: [gt.m] Node.js  [new]
Valeriu
Member

Откуда: Chisinau
Сообщений: 2056
doublefint,
я написал на почту, но что-то вернуло с ошибкой
ящик тот что указан здесь ?
14 авг 15, 08:54    [18016233]     Ответить | Цитировать Сообщить модератору
 Re: [gt.m] Node.js  [new]
doublefint
Member

Откуда: Беларусь, Минск
Сообщений: 944
Valeriu, теперь - да
14 авг 15, 08:59    [18016247]     Ответить | Цитировать Сообщить модератору
 Re: [gt.m] Node.js  [new]
Valeriu
Member

Откуда: Chisinau
Сообщений: 2056
doublefint,
Получили что-то на почту ?
14 авг 15, 09:15    [18016295]     Ответить | Цитировать Сообщить модератору
 Re: [gt.m] Node.js  [new]
doublefint
Member

Откуда: Беларусь, Минск
Сообщений: 944
Valeriu, да
14 авг 15, 10:49    [18016739]     Ответить | Цитировать Сообщить модератору
 Re: [gt.m] Node.js  [new]
Alexey Maslov
Member

Откуда: СПб
Сообщений: 1554
Вставлю 2 коп, хоть и не GT.M-щик.

Если NodeJS и M-СУБД находятся на одном сервере, привлекательной с т.з. производительности становится "прямая" связь между ними, которую обеспечивает call-in.
Обратили ли вы внимание на NodeM? Утверждается, что он совместим по API с cache.node (снизу вверх, конечно).
Мои коллеги используют cache.node в разработках, впечатления хорошие.
14 авг 15, 11:58    [18017245]     Ответить | Цитировать Сообщить модератору
 Re: [gt.m] Node.js  [new]
ну я
Member

Откуда: Stalingrad
Сообщений: 1181
Alexey Maslov
Вставлю 2 коп, хоть и не GT.M-щик.

Если NodeJS и M-СУБД находятся на одном сервере, привлекательной с т.з. производительности становится "прямая" связь между ними, которую обеспечивает call-in.
Обратили ли вы внимание на NodeM? Утверждается, что он совместим по API с cache.node (снизу вверх, конечно).
Мои коллеги используют cache.node в разработках, впечатления хорошие.

Раз зашла речь - то кто может прокомментировать исходник?
https://github.com/dlwicksell/nodem/blob/master/src/v4wNode.m
В нем есть после меток двоеточия. Что это означает в GT.M?
14 авг 15, 12:25    [18017356]     Ответить | Цитировать Сообщить модератору
 Re: [gt.m] Node.js  [new]
Alexey Maslov
Member

Откуда: СПб
Сообщений: 1554
ну я,

не без труда нашёл в их док-ии:
Labels
...
In GT.M, a colon (:) delimiter may be appended to the label, which causes the label to be treated as "local." Within the routine in which they appear, they perform exactly as they would without the trailing colon but they are available only during compilation and inaccessible to other routines and to indirection or XECUTE. Because references to local labels preceding their position in a routine produce a LABELUNKNOWN error at run-time, FIS recommends omitting the routinename from labelrefs to a local label. Using local labels reduces object size and linking overhead for both all types for dynamic linking except indirection and XECUTE. Use of local labels may either improve or impair performance; typically any difference is modest. The more likely they are to all be used within the code block at run-time, the more likely an improvement. In other words, conditional code paths which prevent all references to local variables appearing in the block may actually impair performance.
14 авг 15, 12:53    [18017511]     Ответить | Цитировать Сообщить модератору
 Re: [gt.m] Node.js  [new]
Valeriu
Member

Откуда: Chisinau
Сообщений: 2056
Я получил эти данные на клиентской стороне
со стороны сервера GT.M примерно за 2 min. 30 sec. ,( т.е. 2 000 000 строк ) используя TCP client Node.js
test(var1,var2,var3,Ret) ;;Compilation tools WinBuilder
 
^v1=var1,^v2=var2,^v3=var3
 
var1="Variable v1",var2="Variable v2",var3="Variable v3"
 
i=1:1:2000000 Ret(i)="Array test string nr. "_i_"   var1="_var1_"   var2="_var2_"   var3="_var3_$c(13,10)
 
"GT.M <Q> Return "_i
Сервер обычная машина - Intel(R) Celeron(R) CPU G1610 2.60GHt RAM 16 Mgb
Интересно, это хороший результат или нет ?
18 сен 15, 16:58    [18166951]     Ответить | Цитировать Сообщить модератору
 Re: [gt.m] Node.js  [new]
Valeriu
Member

Откуда: Chisinau
Сообщений: 2056
Забыл уточнить. И клиент и сервер находятся
на одной машине, т.е. 2 в одном. Эти данные я увидел
в логи js через терминал Putty.
18 сен 15, 18:38    [18167533]     Ответить | Цитировать Сообщить модератору
 Re: [gt.m] Node.js  [new]
Valeriu
Member

Откуда: Chisinau
Сообщений: 2056
тривиально, чз VPN из дому - 2 мин . Ровно ...
18 сен 15, 20:08    [18167881]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
Все форумы / Caché, Ensemble, DeepSee, MiniM, IRIS, GT.M Ответить