Javascript-форум (https://javascript.ru/forum/)
-   Node.JS (https://javascript.ru/forum/node-js-io-js/)
-   -   Как организовать обмен данными по разным протоколам (http и websocket) (https://javascript.ru/forum/node-js-io-js/63496-kak-organizovat-obmen-dannymi-po-raznym-protokolam-http-i-websocket.html)

yinfo 10.06.2016 19:54

Как организовать обмен данными по разным протоколам (http и websocket)
 
Подскажите, как реализовать такую схему. Node в данном случае выступает в роли коммуникатора.

Программа A постоянно подключена к Node через websocket. В каком-то смысле она является сервером - может принимать запрос в формате JSON и отдавать ответ в том же формате.
Программы B,C,D - не умеют работать с websocket, только через http-запросы.

Допустим, B прислала http запрос. Скрипт смотрит, существует ли активное соединение с A. Если нет - сразу возвращает ответ "Сервер не доступен". Если да - запускает отсчет таймера (например, 30 секунд) и отправляет программе A поступивший по Http запрос (json) через активное соединение websocket. Если от A поступает в указанный интервал ответ - скрипт возвращает его B, если нет - опять же "Сервер не доступен".

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

Еще просьба оценить трудоемкость такой разработки. Подобную систему может один специалист нарисовать на коленке за 50$ или требуется работа бригады спецов за 10.000$?

Спасибо.

destus 10.06.2016 21:52

Что-то типа
var http = require('http');
var koa = require('koa');
var app = koa();
http.createServer(app.callback()).listen(3000);
http.createServer(app.callback()).listen(3001);

Сокеты например на 3000, запросы на 3001. Далее используешь EventEmitter и реализуешь свои задачи. Как Socket.io работает с koa смотреть тут http://spathon.com/koa-js-and-socket-io/

yinfo 11.06.2016 05:23

Цитата:

Сообщение от destus (Сообщение 419035)
Что-то типа

Сокеты например на 3000, запросы на 3001. Далее используешь EventEmitter и реализуешь свои задачи. Как Socket.io работает с koa смотреть тут http://spathon.com/koa-js-and-socket-io/

Спасибо за подсказку! Почитаю, что за зверь такой koa - в книжках с этой библиотекой еще не встречался.

destus 11.06.2016 05:49

Цитата:

Сообщение от yinfo (Сообщение 419055)
Спасибо за подсказку! Почитаю, что за зверь такой koa - в книжках с этой библиотекой еще не встречался.

Next generation web framework for Node.js.

yinfo 11.06.2016 08:30

Цитата:

Сообщение от destus (Сообщение 419056)
Next generation web framework for Node.js.

Туго у меня пока с английским. Я понимаю, что знать язык просто необходимо, как для изучения документации, так и для общения с заказчиками, ставлю себе задачу подтянуть инглиш за год. Пока читаю русскоязычную литературу/статьи. Так понял уже, что koa - развитие темы express от того же автора, а по express на русском языке много чтива. Наверное, это не принципиально - koa или express использовать?

destus 11.06.2016 09:41

yinfo,
Можно и на Express.

Erolast 11.06.2016 10:45

Цитата:

Подобную систему может один специалист нарисовать на коленке за 50$
Да)

Цитата:

Сокеты например на 3000, запросы на 3001.
Необязательно. Благодаря тому, что WebSocket строится поверх http, можно обойтись одним портом.

//backend
import http from "http";
import express from "express";
import WebSocket from "ws";

const app = express();
const server = http.createServer(app);
const wsserver = new WebSocket.Server({server: server});

wsserver.on("connection", () => {/*some code here*/}); //обработка всех вебсокет-подключния
wsserver.on("connection/some/path", () => {/*some code here*/}); // обработка подключений с адресом ws://localhost/some/path

server.listen(80);


//frontend
const connection = new WebSocket("ws://localhost");
const connection2 = new WebSocket("ws://localhost/some/path");


Цитата:

ставлю себе задачу подтянуть инглиш за год
Ты не оставь. Ты просто бери и читай) translate.google.com в помощь

Rise 11.06.2016 13:43

Цитата:

Сообщение от yinfo (Сообщение 419060)
ставлю себе задачу подтянуть инглиш за год.

Переводи новые слова в интересной тебе области постоянно, иначе будешь до пенсии подтягивать.
Со временем отложится в голове, будешь кое-что понимать (как пишется и переводится по крайней мере), типа так на примере этого топика:

Пост#1
json (javascript object notation), http (hypertext transfer protocol)
новые: java, script, object, notation, hyper, text, transfer, protocol, node, web, socket

Пост#2/3
знаем: http, socket
новые: create, server, app, callback, call, back, listen, event, emitter, emit

Пост#4
знаем: node, web
новые: next, generation, framework, frame, work, for

Пост#5/6
новые: express

Пост#7
знаем: web, socket, http, back, express, app, create, server, listen
новые: backend, end, import, from, const, new, on, connection, some, code, here, path, localhost, local, host, frontend, front, translate

Благо сейчас есть гугл переводчик и разные расширения для браузеров в плане перевода...

yinfo 11.06.2016 15:45

Цитата:

Сообщение от Erolast (Сообщение 419063)
Да)
Ты не оставь. Ты просто бери и читай) translate.google.com в помощь

Я стараюсь!) Поставил себе в Chrome два плагина: один ImTranslator переводит на русский прямо в тексте, а второй SpeakIt - сразу произносит на английском слово. Оказывается, я слова неправильно некоторые произносил ))


Часовой пояс GMT +3, время: 12:38.