Uso de websocket na hospedagem compartilhada

Olá a todos!

Estou implementando um serviço com uso de websocket em minha aplicação, é possível, gostaria de saber se é possível o uso do ws.

Se sim, é preciso fazer alguma configuração além da aplicação em si?

Olá, @Edgard_Hufelande! Seria referente a NodeJS ou PHP?
Independente de qual seja, há sim algumas dicas que servem para os dois:

  • Conteúdo misto
    Sabe aquele erro que acontece quando o navegador rejeita uma request HTTP é feita dentro da página quando ela foi originalmente carregada via HTTPS? Uma coisa parecida acontece com websockets. Se a página for carregada com HTTPS, o websocket também precisa ser criptografado. Nesse caso, usando o protocolo wss:// ao invés de ws://

  • O websocket, devido como a nossa hospedagem funciona, precisa utilizar a mesma porta onde as requisições HTTP/HTTPS passam

1 Curtida

Olá, este é o unico tópico que envolve wss aqui, no meu caso estou com nodejs com peer-server e express, o https do express funciona ok, porém o uso do peer-server ele returna que wss://domain/path é 404

De acordo com sua instrução em 17 fev, eu deveria informar os parametros sslkey e sslcert ao peer-server para ele usar?

Vc tem alguma dica de como é a melhor maneira de lidar com estes certificados na umbler?

Olá, @Felx! Tudo bem?
Tenho sim! A minha dica é fingir que o certificado não existe :stuck_out_tongue:
Explico:
A comunicação entre o servidor e a aplicação não é direta. Passa por vários servidores no caminho como servidores de proxy, load balancing etc. Quando a comunicação é criptografada com o certificado SSL, a mesma é descriptografada antes de chegar na sua aplicação.
Por isso que, aplicações conosco devem escutar em apenas uma porta. A 3000.
Pois independente se a requisição entra pela porta 80 ou 443, ela sempre chegará descriptografada (se há o certificado ativo no painel) e mapeada para a porta 3000.
E por haver apenas essa uma porta, nos exemplos de websockets, é necessário que ele escute conjuntamente com o servidor http nessa porta. Exemplo

Fingir que o certificado não existe foi minha primeira tentativa inconsciente.

O site é carregado em HTTPS:// por padrão, e ele tenta requisitar algo em WSS:// e este falha com 404, porém todos os meus testes em localhost funcionou ok usando HTTP:// e WS://

Alias, este é o how to de integração do peer-server com express, tanto que o express continuou funcionando perfeito no umbler, porém os requests para WSS:// retornam 404

const express = require('express');
const { ExpressPeerServer } = require('peer');

const app = express();

app.get('/', (req, res, next) => res.send('Hello world!'));

// =======

const server = app.listen(3000);

const peerServer = ExpressPeerServer(server, {
  debug: true,
  path: '/myapp'
});

app.use('/peerjs', peerServer);

Certo, estranho…
Eu imagino que possa ser um desencontro de rotas. Talvez a rota que o navegador está buscando seja diferente da rota que o servidor está esperando?

Tentando usar o exemplo de backend e frontend próprio peer-server, sem nenhuma modificação, ocorre o mesmo problema?

Oi Thiago

Estou usando o exemplo deles sem nenhuma modificação mesmo.

O erro que acontece completo é este:

WebSocket connection to
'wss://domain.com/peerjs/myapp/peerjs?key=peerjs&id=7c482080-b4f4-446d-9fc8-ac3606277a6a&token=rurg8ws238r'
failed: Error during WebSocket handshake:
Unexpected response code: 404

:thinking: vou verificar com bastante calma para garantir.

Este pathname /peerjs/myapp/peerjs é o mesmo usado em localhost e funciona com status 200, por isso não acho que seja uma rota desconhecida, porém vou ver o que eu posso fazer para verificar.

Obrigado por tentar me ajudar. :+1:

De nada, @Felx!
Realmente estranha essa situação…
Pois se o peerjs usa websockets para se comunicar com o servidor, não deveria ter nenhum problema na nossa hospedagem
Mas por favor, nos mantenham atualizados se você descobrir alguma coisa sobre o assunto!

1 Curtida

Existe algum site que usa WSS para usar com benchmark?

Com NodeJS express seria um belíssimo exemplo

Bah, eu tinha um ótimo exemplo exatamente assim, porém acho que acabou se perdendo
Mas vou fazer outro aqui rapidinho, pois é realmente útil ter esse exemplo em mãos!

1 Curtida

Hmmm, isso é um pouco vergonhoso :eyes:
Achei a aplicação e parece que ela não funciona mais o.O
Mandei as informações que coletei do meu problema e do seu para a equipe responsável para verificarmos se houve alguma alteração desde a última vez que eu testei
Bom, progresso é progresso :sweat_smile:

1 Curtida

Fala pessoal, beleza?

Desculpa pela demora na resolução desse bugzinho, hehe.

O time de infraestrutura nos retornou hoje pedindo novos testes. A aplicação do Thiago já está bombando (inclusive, é a aplicação que ele criou para os convites do meu casamento HAHA), então gostaria que vocês testassem novamente e nos informassem se está tudo certo ou não.

Agradeço pela paciência, pessoal! =)

2 Curtidas