Как подключиться к websocket серверу используя Socket.IO библиотеку на Java

180
26 октября 2018, 03:00

Моя задача: считывать каждый 'tick' новой информации, присланной от сокет сервера, никакие данные отправлять на сервер я не буду.

Используя библиотеку Socket.IO я пытаюсь подключится к wss (websocket server), опыта в данном процессе у меня практически нет, поэтому я не уверен какую информацию из инспектора в браузере я должен выносить в мой код.

Ниже указана вся информация, которую я достал с Chrome Inspector (f12) -> Network -> WS -> headers, этой информации должно быть более чем достаточно что-бы успешно присоединится к WSS.

General

Request URL: wss://tradeit.gg/socket.io/?EIO=3&transport=websocket&sid=jDTknMoBYlV7VOR3AWOj
Request Method: GET
Status Code: 101 Switching Protocols  

Response headers

CF-RAY: 44824ea40aaf8b58-KBP
Connection: upgrade
Date: Fri, 10 Aug 2018 12:01:20 GMT
Expect-CT: max-age=604800, report-uri="https://report-uri.cloudflare.com/cdn-cgi/beacon/expect-ct"
Sec-WebSocket-Accept: xToN6aWToIogTQo3cOFKZpn6a44=
Sec-WebSocket-Extensions: permessage-deflate; client_no_context_takeover
Sec-WebSocket-Version: 13
Server: cloudflare
Upgrade: websocket
WebSocket-Server: uWebSockets

Request headers

Accept-Encoding: gzip, deflate, br
Accept-Language: ru-RU,ru;q=0.9,en-US;q=0.8,en;q=0.7
Cache-Control: no-cache
Connection: Upgrade
Cookie: __cfduid=d4f3e1f3363b2ffcec6209cae50f95df91530538054; _ga=GA1.2.642241760.1530538057; _gid=GA1.2.1752480950.1533821233; smaller_icons=true; io=jDTknMoBYlV7VOR3AWOj
Host: tradeit.gg
Origin: https://tradeit.gg
Pragma: no-cache
Sec-WebSocket-Extensions: permessage-deflate; client_max_window_bits
Sec-WebSocket-Key: pMGG6zJSm8CF97iHAvyWrw==
Sec-WebSocket-Version: 13
Upgrade: websocket
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.99 Safari/537.36

Query string parameters

EIO: 3
transport: websocket
sid: jDTknMoBYlV7VOR3AWOj  

Уверен что предоставил более 80% ненужной информации, но это потому-что я не знаю какая именно может пригодится. Код:

Socket socket = IO.socket("");
socket.on(Manager.EVENT_TRANSPORT, new Emitter.Listener() {
    public void call(Object... objects) {
        Transport transport = null;
        transport.on(Transport.EVENT_REQUEST_HEADERS, new Emitter.Listener() {
            public void call(Object... objects) {
                Map<String, List<String>> headers = new HashMap<String, List<String>>();
                headers.put("Cookie", Arrays.asList("tokenName1=tokenValue1",
                                                    "tokenNameN=tokenValueN"));
            }
        });
        transport.on(Transport.EVENT_RESPONSE_HEADERS, new Emitter.Listener() {
            public void call(Object... objects) {
                Map<String, List<String>> headers = new HashMap<String, List<String>>();
                String cookie = headers.get("Set-Cookie").get(0);
                System.out.println(cookie);
            }
        });
    }
});  

Собственно вопросы:
1. Какую строку внести в IO.Socket, что-бы инициализировать объект socket?
2. Как инициализировать объект transport?
3. Какие заголовки я должен добавить для успешного подключения.
4. Как получать данные, отправленные от вебсокет сервера.

Я уже имел дело с Pusher библиотекой на Java, но в данном случае так же не понимаю как достать необходимые данные (hostname, wssport, key, etc...).

READ ALSO
Размер шрифта TextView по размеру экрана

Размер шрифта TextView по размеру экрана

Есть текстУже с разметкой

143
Нажание на Row в TableView

Нажание на Row в TableView

По умолчанию в TableView нажатие на строки происходит с помощью 2-х клавиш мыши - левой и правойКак можно реализовать нажатие на строку исключительно...

159
Возможно ли запретить создание лямбды

Возможно ли запретить создание лямбды

В проекте имеется обычный интерфейс с единственным методОн был создан еще на Java 5 и стал за это время довольно популярным

158
Парсер на Java для строк

Парсер на Java для строк

Подскажите парсер для строк, написанный на Java

169