Форум программистов, компьютерный форум, киберфорум
JavaScript: Node.js
Войти
Регистрация
Восстановить пароль
 
 
Рейтинг 4.52/21: Рейтинг темы: голосов - 21, средняя оценка - 4.52
0 / 0 / 0
Регистрация: 18.10.2015
Сообщений: 29
1

Прокси Socket.IO NodeJS

18.10.2015, 20:41. Показов 3936. Ответов 47
Метки нет (Все метки)

Всем доброго времени суток!
Необходимо реализовать следующие: (картинка в аттаче)
Другими словами нужно сделать локальный прокси сервер для socket.io на другом сервере. Как это лучше сделать? И может быть уже есть готовые решения?
Миниатюры
Прокси Socket.IO NodeJS  
__________________
Помощь в написании контрольных, курсовых и дипломных работ здесь
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
18.10.2015, 20:41
Ответы с готовыми решениями:

Nodejs net socket server and android socket client
Добрый день Форумчане нужно помощь гуру! Решил с другом написать сервер на ноде с использование...

Чат на nodejs + socket.io
Всем привет, возникла необходимость сделать простенький чатик. Решил сделать на nodejs немного...

Nodejs + Socket.Io Безопасное Подключение
Есть сервер Nodejs который слушает порт по Socket.io var io = require('socket.io').listen(8300);...

Nodejs + socket.io полёт снаряда
В игре персонаж может стрелять. Но снаряд летит не мгновенно и по кривой траектории. Как лучше...

47
Ренегат
Эксперт HTML/CSS
1739 / 1084 / 386
Регистрация: 06.08.2014
Сообщений: 5,203
Записей в блоге: 1
18.10.2015, 23:41 2
сделать-то можно, но зачем?
0
0 / 0 / 0
Регистрация: 18.10.2015
Сообщений: 29
19.10.2015, 03:40  [ТС] 3
Цитата Сообщение от BANO Посмотреть сообщение
сделать-то можно, но зачем?
зачем это уже мое Может поделитесь мыслями как это сделать?
0
Ренегат
Эксперт HTML/CSS
1739 / 1084 / 386
Регистрация: 06.08.2014
Сообщений: 5,203
Записей в блоге: 1
19.10.2015, 15:44 4
dedsec1337, нужно чтобы сервер мог делать много подключений одновременно, и при этом он должен быть и клиентом и сервером, короче думаю что библиотеки socket.io вам хватит

но сначала надо продумать, ведь первым пакетом данных будет пакет для прокси, куда подключатся и как
1
0 / 0 / 0
Регистрация: 18.10.2015
Сообщений: 29
20.10.2015, 12:43  [ТС] 5
BANO, Написал примерный сервер который записывает пользователь в массив при подключении и удаляет их из массива при дисконекте, так же нашел socket.io-client который позволяет подключатся к socket.io на сервере.. Теперь вопрос в следующем:
1)Как мне для каждого клиента стартовать свое соединение до init евента, а уже после init евента перебрасывать их на данные основного соединения (общего для всех)
2)Самый наверное тупой вопрос, но как передавать данные клиенту?
Сам код сервера:
Javascript
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
var app = require('express')();
var http = require('http').Server(app);
var io = require('socket.io')(http);
var clients = [];
app.get('/', function (req, res) {
    var socket = require('socket.io-client')('OTHER HOST');
    socket.on('connect', function (data) {
        clients.forEach(function (client) {
            //Передать всем клиентам
        });
    });
    socket.on('disconnect', function (data) {
        clients.forEach(function (client) {
            //Передать всем клиентам
        });
    });
});
io.on('connection', function (client) {
    clients.push(client);
    client.on('disconnect', function () {
        var i = clients.indexOf(client);
        delete clients[i];
        console.log('a user disconnected: ' + client.id);
    });
    console.log('a user connected: ' + client.id);
});
http.listen(80, function () {
    console.log('Server start');
});
0
0 / 0 / 0
Регистрация: 18.10.2015
Сообщений: 29
20.10.2015, 13:08  [ТС] 6
UPD:
Socket.IO.Client не может подключится к серверу (скриншот ошибки в аттаче), что с этим делать? Связанно ли это с тем, что сервер работает по https протоколу?
Текущий код сервера:
Javascript
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
var app = require('express')();
var http = require('http').Server(app);
var io = require('socket.io')(http);
var clients = [];
//STATIC CLIENT
var socket = require('socket.io-client')('HOST');
socket.on('connected', function(){ console.log('Connected'); });
socket.on('connect_error', function(data){ console.log(data); });
socket.on('disconnect', function(){ console.log('Disconnected'); });
//END STATIC CLIENT & BEGIN CLIENT LOGIC
io.on('connection', function (client) {
    clients.push(client);
    client.on('disconnect', function () {
        console.log('a user connected: ' + client.id);
        var i = clients.indexOf(client); delete clients[i];
    });
});
http.listen(80, function () {
    console.log('Server start');
});
Миниатюры
Прокси Socket.IO NodeJS  
0
Ренегат
Эксперт HTML/CSS
1739 / 1084 / 386
Регистрация: 06.08.2014
Сообщений: 5,203
Записей в блоге: 1
20.10.2015, 16:49 7
Цитата Сообщение от dedsec1337 Посмотреть сообщение
https протоколу?
вы делаете socket сервер, забудьте про http и https и вообще про все другие протоколы, вам нужен только ws://

а вообще-то, сокет ио привязывают к http для получения специального url, по которому получают сокет ио для клиентов

передача такая
Javascript
1
client.send(/* буферный массив или строка, для онлайн игр используется бефер, для чатов хватает json строки*/)
Добавлено через 3 минуты
стоп, этот пример кода для простых сокетов, а в сокет ио просто на клиенте
Javascript
1
client.emit("название события",/*любые данные*/)
клиенты слушают так
Javascript
1
2
3
io.on("название события",function(data){
    // data - данные, которые были переданы сервером
})
Добавлено через 1 минуту
и у вас при подключении нового клиенты к серверу(вашему прокси), сервер(ваш прокси), должен подключатся на определённый сервер, через ваш io-client
1
0 / 0 / 0
Регистрация: 18.10.2015
Сообщений: 29
20.10.2015, 17:24  [ТС] 8
BANO, Так это понятно, спасибо. Но что мне делать с ошибкой 400? Посмотрел как работает другой сайт с этим сервером, он использует transports = "polling, websocket", использую все вместе получаю ошибку 400, использую только "polling" - ошибка 400, при "websockets" ошибка 502 (скрин в аттаче)
Миниатюры
Прокси Socket.IO NodeJS  
0
Ренегат
Эксперт HTML/CSS
1739 / 1084 / 386
Регистрация: 06.08.2014
Сообщений: 5,203
Записей в блоге: 1
20.10.2015, 17:32 9
dedsec1337, я не понимаю как http ошибки относятся к socket.io

Добавлено через 1 минуту
наверное он как раз-таки не может взять скрипт для юзера

Добавлено через 59 секунд
это уже в настройках http сервера, действительно
там сокет когда прилипает к серверу, он регистрирует определённый адрес под свой скрипт
0
0 / 0 / 0
Регистрация: 18.10.2015
Сообщений: 29
20.10.2015, 17:33  [ТС] 10
BANO, я так понимаю это не http ошибки, так как описание разное, например http 502 это Bad gateway, 400 в http это bad request.. Node говорит совсем другое
0
Ренегат
Эксперт HTML/CSS
1739 / 1084 / 386
Регистрация: 06.08.2014
Сообщений: 5,203
Записей в блоге: 1
20.10.2015, 17:37 11
стоп а зачем ты делаешь ws запрос на /socket.io/ ?
0
0 / 0 / 0
Регистрация: 18.10.2015
Сообщений: 29
20.10.2015, 17:45  [ТС] 12
BANO, Я попробовал создать подключения используя websocket:
Javascript
1
var socket = require('socket.io-client')('http://server01.csgofast.com/', {'transports': ['websocket']});
Просто уже не знаю что делать..

Добавлено через 2 минуты
А как в node реализовать хранилище socket'ов и вытаскивать из него по client.id?
в C# я бы создал словарь:
C#
1
var SocketList = new dictonary<string, socket>();
и вытаскивал бы через linq:
C#
1
var socket = SocketList.Where(x=>x.key == id).ElementAt(0);
Как это сделать в node я не знаю
0
Ренегат
Эксперт HTML/CSS
1739 / 1084 / 386
Регистрация: 06.08.2014
Сообщений: 5,203
Записей в блоге: 1
20.10.2015, 18:23 13
dedsec1337, в js всё не так, тут надо перебирать весь массив, чтобы получить айдишники
1
0 / 0 / 0
Регистрация: 18.10.2015
Сообщений: 29
20.10.2015, 18:41  [ТС] 14
BANO, Понятно, спасибо. Что мне делать с ошибкой, куда копать?

Добавлено через 1 минуту
Нашел похожую проблему, как ответ предложили установить Access-Control-Allow-Origin: "*", автор ответил что ему это помогло, как мне сделать тоже самое?

Добавлено через 11 минут
BANO, Сможете разобраться с проблемой за денежное вознаграждение?
0
Ренегат
Эксперт HTML/CSS
1739 / 1084 / 386
Регистрация: 06.08.2014
Сообщений: 5,203
Записей в блоге: 1
20.10.2015, 18:56 15
Цитата Сообщение от dedsec1337 Посмотреть сообщение
Сможете разобраться с проблемой за денежное вознаграждение?
1) такие предложения модераторы сразу посылают во фриланс
2) я не так знаком с socket.io за то, чтобы мне платили, а я на граблях танцевал

короче, попробуйте контрол ориждин поставить и может сработает, пока я как вы, знаю только азы работы с данной библииотекой
0
0 / 0 / 0
Регистрация: 18.10.2015
Сообщений: 29
20.10.2015, 18:57  [ТС] 16
Цитата Сообщение от BANO Посмотреть сообщение
попробуйте контрол ориждин поставить
как это сделать?
0
Ренегат
Эксперт HTML/CSS
1739 / 1084 / 386
Регистрация: 06.08.2014
Сообщений: 5,203
Записей в блоге: 1
20.10.2015, 18:58 17
у вас тот сервер к которому вы пытаетесь подключится в подчинении?
то есть вы можете там исходники менять?
0
0 / 0 / 0
Регистрация: 18.10.2015
Сообщений: 29
20.10.2015, 18:58  [ТС] 18
BANO, нет
0
Ренегат
Эксперт HTML/CSS
1739 / 1084 / 386
Регистрация: 06.08.2014
Сообщений: 5,203
Записей в блоге: 1
20.10.2015, 19:01 19
dedsec1337, тогда это сделать никак нельзя

это http хеадер, устанавливаемый сервером
0
0 / 0 / 0
Регистрация: 18.10.2015
Сообщений: 29
20.10.2015, 19:02  [ТС] 20
BANO, Да, но клиент же может отправить request header
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
20.10.2015, 19:02

Web Socket с прокси
Привет, можно ли использовать socks4/5 через websocket. Нашел библиотеку supersocket, но возвращает...

Socket-соединение из апплета через прокси сервер
Может ли апплет установить socket-соединение с web-сервером (с которого и был закачан) через прокси...

Использование прокси при соединении с сервером по TCP. Класс Socket
Как реализовать использование прокси в клиенте, чтобы тот соединялся с сервером по TCP и по...

Нужно что-то вроде прокси для HTTP (SOCKET) запроса
Есть программа (сервер), которая слушает порт и получает инфу от клиента. Сервер может получать...

Невозможно создать Socket: Socket sock = new Socket(someHostString,somePortInt);
Народ! Помогите пожалуйста. Вся красота губится на exception что выскакивает в момент создания...

Посоветуйте i5-7600 (Socket 1151) или i7-6800 (Socket 2011-3)
Посоветуйте, что взять i7-7700 (Socket 1151) или i7-6800 (Socket 2011-3) материнки на Z270 и на...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2022, CyberForum.ru