NOVINKA - Online rekvalifikační kurz Java programátor. Oblíbená a studenty ověřená rekvalifikace - nyní i online.
NOVINKA – Víkendový online kurz Software tester, který tě posune dál. Zjisti, jak na to!

Diskuze: Jak se připojit k socket.io servru přes HTTPS ?

V předchozím kvízu, Online test znalostí JavaScript, jsme si ověřili nabyté zkušenosti z kurzu.

Aktivity
Avatar
Petr Šimák
Člen
Avatar
Petr Šimák:11.11.2017 15:27

Ahojte, píšu aplikaci v nette + socket.io
Nedávno jsem si zde pročítal vlákno o HTTPS přes https://letsencrypt.org/ a samozřejmě jsem to musel zkusit.
Co se týče nette části, tak ta funguje bez problému, ale s tou socket.io částí si moc nevím rady.
Můj node server mám nastavený následovně (postupoval jsem dle místního návodu)
server.js:

var app = require('express')();
var http = require('http').Server(app);
var bodyParser = require('body-parser');
var mysql = require('mysql');
var io = require('socket.io')(http);

var port = 4000;
var password = "some_password";
var urlencodedParser = bodyParser.urlencoded({ extended: false });

http.listen(port);

dále už mám jen takové ty metody typu

app.get('/', function (req, res) {
    res.sendStatus(400);
});

io.on('connect', ...

Potíž je v tom, že když se zkusím připojit přes na https://www.moje_domena.cz:4000/, tak dostanu chybu

Tento web není dostupný

Web www.dome_domena.cz neočekávaně ukončil připojení.

funguje to pouze na http://www.moje_domena.cz:4000, tam dostanu Bad request.
Jenom že já bych potřeboval, aby celá komunikace byla šifrovaná, takže by bylo fajn, kdyby ten socket.io server fungoval na https://www.moje_domena.cz:4000.

Když se zkusím připojit přes aplikaci, tak to pořád dokola hází chybu v konzoli

https://moje_domena:4000/socket.io/?room=Homepage%3Adefault&EIO=3&transport=polling&t=L-hU1wX net::ERR_CONNECTION_CLOSED

socket.js:2 XHR failed loading: GET "https://moje_domena:4000/socket.io/?room=Homepage%3Adefault&EIO=3&transport=polling&t=L-hU1wX".

Když se z klientské části zkouším připojit na http://... , tak mě to stejně nějak přesměruje na https://, kde už ale nic na portu 4000 není

Mohli byste mi prosím pomoci? Díky mockrát.

Editováno 11.11.2017 15:30
 
Odpovědět
11.11.2017 15:27
Avatar

Člen
Avatar
Odpovídá na Petr Šimák
:11.11.2017 16:04

No veď je to jasné. Keďže si si s Node vytvoril http server a nie https,

var http = require('http').Server(app);

tak "co bys čekal"? Proste si pripoj https knižnicu. Funguje takmer rovnako ako http, len jej musíš poslať v parametri "credentials". Ale to nebude problém. Vygoogli to. Keď si to zvládol doteraz, zvládneš aj zvyšok.

Akceptované řešení
+20 Zkušeností
+2,50 Kč
Řešení problému
 
Nahoru Odpovědět
11.11.2017 16:04
Avatar
Petr Šimák
Člen
Avatar
Petr Šimák:11.11.2017 18:10

Super, už mi to skoro funguje, jen mi to teď hlásí chybu, když se mi připojí socket.
Projede to autorizací a v io.on('connect,...) to vyhodí chybu.
Nevěděl bys, co s tím prosím ?

Editováno 11.11.2017 18:11
 
Nahoru Odpovědět
11.11.2017 18:10
Avatar

Člen
Avatar
Odpovídá na Petr Šimák
:11.11.2017 18:17

Daj kód callbacku na onconnect, to, čo si začal písať io.on...

 
Nahoru Odpovědět
11.11.2017 18:17
Avatar
Petr Šimák
Člen
Avatar
Petr Šimák:11.11.2017 18:19
io.on('connection', function (socket) {
    console.log("A user connected.");
    if (socket.handshake.query.room != null) {

        var rooms = socket.handshake.query.room.split(',');
        console.log(rooms);
        rooms.forEach(function (t) {
            if(!isNumeric(t))
            {
                socket.join(t);
                console.log('a user connected (' + socket.handshake.query.name + ') to room ' + t);
            }
        });
    }
    if(socket.handshake.query.id != null){
        socket.join(socket.handshake.query.id);
        console.log('a user connected to his channel ' + socket.handshake.query.id);
    }

    socket.on('disconnect', function () {
       console.log('user disconnected (' + socket.handshake.query.name + ')');
    });
});

[me|]53059[/me|]
na té HTTP verzi to normálně jelo.

Editováno 11.11.2017 18:20
 
Nahoru Odpovědět
11.11.2017 18:19
Avatar

Člen
Avatar
Odpovídá na Petr Šimák
:11.11.2017 18:26

Nič zvláštne tam na prvý pohľad nevidím... Vypíš do konzoly socket: miesto console.log("A user connected."); tam daj console.log(socket) a daj mi výpis, ak to vôbec pôjde.

 
Nahoru Odpovědět
11.11.2017 18:26
Avatar
Petr Šimák
Člen
Avatar
Petr Šimák:11.11.2017 18:33

:D no ... zakomentoval jsem to console.log ('user ... ')... a že to nahradím tím console.log(soc­ket).
Zapl jsem to a šlo to. Vrátil jsem to zpět na console.log('user ...'); a už to jede :-) to je divný
Každopádně díky moc!

 
Nahoru Odpovědět
11.11.2017 18:33
Avatar

Člen
Avatar
Odpovídá na Petr Šimák
:11.11.2017 18:36

Rado sa stalo :)

 
Nahoru Odpovědět
11.11.2017 18:36
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 8 zpráv z 8.