0 / 0 / 0
Регистрация: 18.10.2015
Сообщений: 29
1

Прокси Socket.IO NodeJS

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

Author24 — интернет-сервис помощи студентам
Всем доброго времени суток!
Необходимо реализовать следующие: (картинка в аттаче)
Другими словами нужно сделать локальный прокси сервер для 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
0 / 0 / 0
Регистрация: 18.10.2015
Сообщений: 29
20.10.2015, 22:42  [ТС] 41
Author24 — интернет-сервис помощи студентам
BANO, поможете разобраться с работой с клиентами?
0
Ренегат
Эксперт HTML/CSS
1740 / 1085 / 386
Регистрация: 06.08.2014
Сообщений: 5,203
Записей в блоге: 1
20.10.2015, 22:54 42
dedsec1337, можно попробовать
0
0 / 0 / 0
Регистрация: 18.10.2015
Сообщений: 29
21.10.2015, 19:32  [ТС] 43
BANO, Научил сервер грузить данные с сокета.. Возникла проблема когда я гружу данные с сокета и отправляю их клиенту через:
Javascript
1
socket.emit('init', body);
в переменой body хранится json. На клиенте стоит обработчик:
Javascript
1
2
3
4
socket.on('init', function (data) {
        alert(data);
        alert(data['state']);
});
Проблема в том что alert(data) обрабатывается и выводится json, а вот alert(data['state']) проходит с ошибкой "undefined".. с чем это связанно? В данных точно есть state, сам json выглядит примерно так:
JSON
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
30
31
32
33
34
35
36
37
38
39
40
41
42
{
    "auth": {
        "auth": false,
        "token": null,
        "steamid_3": null,
        "userid": null,
        "profile": null
    },
    "state": {
        "stats": {
            "totalGamesPlayed": 145,
            "totalPayed": 3838,
            "totalUniquePlayers": 378,
            "maxPayed": 6829.72,
            "serverTime": 1445432720685,
            "con": 241
        },
        "game": {
            "number": 61467,
            "prize": 0,
            "itemsNum": 0,
            "itemsArr": [],
            "timeOldEnds": 0,
            "timeNewStarts": 0,
            "winner": null,
            "closed": null,
            "tape": null,
            "rand": null,
            "md5": "64be59bc56b0d9525fe4aaa1e52772cc"
        },
        "lastWinner": {
            "name": "Faller",
            "steamid64": "76561198105976261",
            "prize": 2429.13,
            "image": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/avatars/bd/bdae0bbe1d3fe754d950ff4d1b1f0b22ebb166df_full.jpg",
            "time": 200994,
            "bet": 2019.7
        },
        "serverTime": 1445432850292,
        "con": 228
    }
}
Добавлено через 10 минут
UPD: решил проблему надо было в клиентском скрипте переопределить data вот так: data = JSON.parse(data);
0
Ренегат
Эксперт HTML/CSS
1740 / 1085 / 386
Регистрация: 06.08.2014
Сообщений: 5,203
Записей в блоге: 1
21.10.2015, 21:05 44
dedsec1337, по-моему у клиентов есть такой метод .json, и ваш код должен был выглядеть так
Javascript
1
socket.json('init', body);
только тогда body должен быть простым объектом
1
0 / 0 / 0
Регистрация: 18.10.2015
Сообщений: 29
21.10.2015, 21:40  [ТС] 45
BANO,
Цитата Сообщение от dedsec1337 Посмотреть сообщение
data = JSON.parse(data);
работает и ладно, у меня сейчас проблема в другом: первые 2 запроса проходят, но вот 3 и следующие нет: (Cкрин 1).
При этом иногда он все таки обрабатывает и 3 запрос, на скрине видно что был загружен еще и "end-game". Видать как то умудряюсь попасть в нужный момент..
Мой клиент на c# работает без таких проблем: (Скрин 2)
С чем связанно такое поведение?

Добавлено через 2 минуты
BANO, Код сервера если нужен:
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
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
var app = require('express')();
var http = require('http')
    .Server(app);
var io = require('socket.io')(http);
var clients = [];
var count = 0;
//PROXYING
var unirest = require('unirest');
var CookieJar = unirest.jar();
unirest.get('https://server01.csgofast.com/socket.io/')
    .query(
    {
        'EIO': '3'
        , 'transport': 'polling'
        , 't': Date.now() + '-' + count++
    })
    .jar(CookieJar)
    .headers(
    {
        'Accept': '*/*'
        , 'Origin': 'https://csgofast.ru'
        , 'Referer': 'https://csgofast.ru'
        , 'Accept-Language': 'ru,en-us;q=0.7,en;q=0.3'
    })
    .end(function (response)
    {
        var sid = parse('"sid":"', '"', response.body.toString());
        var interval = setInterval(function ()
        {
            unirest.get('https://server01.csgofast.com/socket.io/')
                .query(
                {
                    'EIO': '3'
                    , 'transport': 'polling'
                    , 't': Date.now() + '-' + count
                    , 'sid': sid
                })
                .jar(CookieJar)
                .headers(
                {
                    'Accept': '*/*'
                    , 'Origin': 'https://csgofast.ru'
                    , 'Referer': 'https://csgofast.ru'
                    , 'Accept-Language': 'ru,en-us;q=0.7,en;q=0.3'
                })
                .end(function (response)
                {
                    even = parse('["', '"', response.body);
                    if (even != '')
                    {
                        response.body = response.body.toString().substr(response.body.toString().indexOf('['));
                        response.body = response.body.toString().substr(response.body.toString().indexOf('{'));
                        response.body = response.body.toString().substr(0, response.body.toString().length - 1);
                        clients.forEach(function (socket)
                        {
                            socket.emit(even, response.body);
                        });
                        console.log(count++ + ': ' + even + ' | ' + response.body.toString().substr(0, 250));
                    }
                    else
                    {
                        console.log(count++ + ': error:');
                        console.log(response.body);
                    }
                });
        }, 1500)
    });
//CLIENTS LOGIC
io.on('connection', function (socket)
{
    clients.push(socket);
    socket.on('disconnect', function ()
    {
        clients.splice(clients.indexOf(socket), 1);
    });
    socket.on('re-init', function ()
    {
        console.log('re-init');
    });
    socket.on('ladder-request', function ()
    {
        console.log('ladder-request');
    });
    socket.on('error', function ()
    {
        console.log('error');
    });
    socket.on('history-request', function ()
    {
        console.log('history-request');
    });
    socket.on('token-link', function ()
    {
        console.log('token-link');
    });
});
//START SERVER
http.listen(80, function ()
{
    console.log('Server start!');
});
 
function parse(str1, str2, content)
{
    try
    {
        var arr1 = content.toString()
            .split(str1);
        var arr2 = arr1[1].toString()
            .split(str2);
        return arr2[0];
    }
    catch (error)
    {
        return '';
    }
}
0
Ренегат
Эксперт HTML/CSS
1740 / 1085 / 386
Регистрация: 06.08.2014
Сообщений: 5,203
Записей в блоге: 1
21.10.2015, 21:42 46
dedsec1337, честно говоря не знаю
вы какую-то библиотеку подключили, которую я совершенно не знаю
0
0 / 0 / 0
Регистрация: 18.10.2015
Сообщений: 29
21.10.2015, 22:11  [ТС] 47
BANO, это что то похожее на cUrl вот тут мануал если интересно: http://unirest.io/nodejs.html, есть догадки хотя бы почему так может происходить? Куки отправляются, хеадеры и get параметры я указал, а он ошибки возвращает

Добавлено через 25 минут
BANO, понял в чем была ошибка, я использовал setinterval, а не settimeout. В связи с этим каждый тик сервер отправлял новый запрос.. Но это малозначительно повлияло, т.к. теперь после "init" евента он вообще перестает отправлять запросы
0
0 / 0 / 0
Регистрация: 18.10.2015
Сообщений: 29
21.10.2015, 22:29  [ТС] 48
Так и с этим разобрался (скрин в аттаче), осталась работа с клиентами..
Миниатюры
Прокси Socket.IO NodeJS  
0
21.10.2015, 22:29
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
21.10.2015, 22:29
Помогаю со студенческими работами здесь

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 и на...


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

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

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