Как создать сервер на Node.js, [statefull, stateless, echo]?

Добрый день.
Возникла необходимость сделать сервер, на node.js, который будет распознавать простые команды и отвечать на них.
Использовать нужно network module.
Node.js вижу впервые, на что мне ответили: "ну ты ж сайты делаешь".

Я пробовал различные комбинации из туториалов. Дабы заставить серв ответить хотя бы на что-то. В начале все выглядело так (дабы получить хоть какой-то респонс):
var http = require('http');
 
http.createServer(function(request, response) {
    response.writeHead(200);
    request.pipe(response);
}).listen(8080);

Сервер молчал, на страницу ничего не выводил. При любом инпуте (у меня мак).

Затем я начал использовать network module. Кусок офф. туториалов и сервер стартанул, матюкнулся и все.

const net = require('net');

var server = net.createServer(function(socket) {
  socket.end('goodbye\n');
}).on('error', function(err) {
    
  throw err;
});

server.listen(function(){
  address = server.address();
  console.log('opened server on %j', address);
});

Сервер выдал ип адрес и порт, конечно же. Но в нет модулях я не нашел построчного чтения из терминала.

Предпологается, что в результате сервер будет вот так общаться:
-->open (client request)
  <--opened (server response)
  -->add
  <--added
  -->process
  <--processed


Могу ли я добавить какие-то кастомные функции для обработки инпута? (типо readln )
После чего выдавать какой-то стд.аутпут при помощи нет модуля.
Что собой будет представлять
statefull & stateless
сервер?
Разница только в том, что второй будет помнить историю обработанных им команд, так?
  • Вопрос задан
  • 379 просмотров
Решения вопроса 1
bingo347
@bingo347 Куратор тега JavaScript
Crazy on performance...
Примерно так это делается:
'use strict';
const net = require('net');

const server = net.createServer(socket => {
    var data = '';
    socket.on('data', d => {
        data += d;
        var p = data.indexOf('\n');
        if(~p) {
            let cmd = data.substr(0, p);
            data = data.slice(p + 1);
            onCommand(cmd.trim(), socket);
        }
    });
});

server.listen(() => {
    var address = server.address();
    console.log('opened server on', address);
});

function onCommand(cmd, socket) {
    switch(cmd) {
        case 'open':
            socket.write('opened\n');
            break;
        case 'add':
            socket.write('added\n');
            break;
        case 'process':
            socket.write('processed\n');
            break;
    }
}


тестил через telnet, работает
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
@Itvanya
Это ведь обычный сокет на tcp-сервере :) создал tcp-сервер, который слушает, создает клиента, который делает запрос - пол дела уже сделано. Обработать команды из командной строки можно с помощью process.argv.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы