Testando o Servidor Dedicado

Testar nosso servidor dedicado é bastante fácil. Podemos pegar qualquer um dos demonstrações de WebSockets do uniGUI e usá-lo para testar o servidor dedicado. Por exemplo, podemos usar a demonstração WebSocket - Basic Chat para esse propósito.

Copiamos o projeto de demonstração para uma pasta diferente e o abrimos no IDE Delphi. Tentaremos implantar usando dois métodos diferentes: primeiro sem usar o HyperServer e depois com o HyperServer. Isso ajudará a esclarecer as diferenças de configuração entre esses dois modos.

Implantação Normal (Sem HyperServer)

As instruções abaixo são as mesmas para todos os modos de implantação, incluindo Standalone Server, Windows/Linux Service, Apache Module ou ISAPI Module.

clip0274

Na imagem acima você pode ver a propriedade WebSocketServer da classe. Nesta classe há duas propriedades chamadas ExternalServerUrl e ExternalServerToken. Precisamos configurar essas duas propriedades primeiro.

ExternalServerUrl

Esta propriedade determina a URL da qual o servidor dedicado aceitará comandos de mensagem de broadcast de outras aplicações. Quando uma aplicação web quer transmitir uma mensagem e existe um servidor WebSockets dedicado, ela deve encaminhar suas requisições para o servidor WebSockets dedicado. O servidor dedicado irá transmitir essa mensagem para todos os clientes WebSocket disponíveis.

Essa URL pode ser uma URL global ou uma URL local acessível na sua LAN. Por exemplo, se seu servidor WebSockets dedicado e sua aplicação rodarem no mesmo servidor físico sob o mesmo sistema operacional, você pode usar a sintaxe http://localhost: para essa URL, onde é o número da porta em que seu servidor escuta requisições não seguras. No nosso exemplo 8077 é a porta não segura. Então podemos usar:

http://localhost:8077

Aqui estão outros valores possíveis para ExternalServerUrl:

  • http://localhost:8077

  • http://socket.fmsoft.net:8077

  • https://socket.fmsoft.net:8078

Deve-se levar em conta que se HTTPS for o único protocolo habilitado em seu servidor dedicado então pode haver apenas um valor válido para ExternalServerUrl que é https://:. Por razões óbvias os certificados SSL só podem ser emitidos para domínios, não para endereços IP, então um certificado válido pode estar disponível somente junto a um nome de domínio. É por isso que você precisa usar um nome de domínio na sua URL quando quiser estabelecer uma conexão segura com um servidor.

circle-info

Como o protocolo https também pode ser usado, você precisa copiar os arquivos DLL de SSL necessários para a pasta da sua aplicação. Esses arquivos são necessários para o protocolo OpenSSL quando uma conexão de saída é estabelecida ao servidor WebSockets dedicado. Esses arquivos são distribuídos com o instalador do uniGUI e estão disponíveis em ..\Framework\uniGUI\SSL.

Nossa aplicação de teste será executada em uma porta não segura e no mesmo PC que nosso servidor dedicado, então podemos atribuir http://localhost:8077 a essa propriedade.

ExternalServerToken

Esta é uma string única gerada automaticamente por uma instância do HyperServer quando você a executa pela primeira vez. Esse valor é armazenado no arquivo CFG relacionado. Você pode editar o arquivo CFG e atribuir uma string de token personalizada.

AppDomain

Este é um parâmetro opcional usado para atribuir um domínio separado a cada aplicação caso a mesma aplicação seja implantada mais de uma vez e todas estejam conectadas ao mesmo servidor WebSockets dedicado. Neste exemplo podemos deixá-lo em branco. Se você for atribuir um valor, ele deve ser um valor único, o que significa que o mesmo valor não deve ser usado várias vezes para diferentes domínios de aplicação.

Então o que é um domínio de aplicação?

Um domínio de aplicação é uma única aplicação standalone ou um cluster HyperServer que esteja conectado ao mesmo servidor WebSockets dedicado. Se for um cluster HyperServer então todo o cluster, incluindo todos os Nodes e ServerNodes escravos, é considerado como um único domínio de aplicação. Para aplicações standalone esse parâmetro é configurado ajustando a propriedade AppDomain na classe ServerModule.WebSocketServer. Em um cluster HyperServer ele deve ser definido no arquivo CFG relacionado do HyperServer (HyperServer master se for uma fazenda de servidores).

Exemplo de trecho de CFG:

Essa string é usada para garantir que somente partes privilegiadas tenham acesso ao nosso servidor WebSockets dedicado. Requisições de mensagem que não fornecerem um token válido serão rejeitadas pelo servidor dedicado. Portanto, qualquer aplicação que queira enviar requisições de mensagem ao servidor dedicado deve conhecer o token correto previamente.

GlobalBinding

Também precisamos atribuir um valor ao parâmetro GlobalBinding. Esse parâmetro determina o domínio ao qual seu servidor WebSockets dedicado é visível para a web global. Na maioria das vezes pode ser o mesmo que o parâmetro ExternalServerUrl, a menos que você queira usar configurações diferentes para esses parâmetros.

Por exemplo, considere um cenário onde tanto o servidor dedicado quanto sua aplicação rodam no mesmo PC físico. Nesse caso você pode querer usar uma URL local para ExternalServerUrl enquanto GlobalBinding deve sempre conter um domínio global. Considerando nosso caso de teste, já que nossa aplicação de teste usa uma conexão não segura, devemos usar socket.fmsoft.net:8077 para a propriedade GlobalBinding. Note que a propriedade GlobalBinding não começa com http ou https porque o protocolo WebSockets usa ws e wss em vez disso, e o prefixo apropriado será determinado pelo framework em tempo de execução.

Nossas configurações finais para WebSocketServer ficam assim:

clip0274

Port

Como nosso servidor dedicado roda na porta padrão 8077 precisamos escolher uma porta diferente para nossa aplicação de teste. Usaremos 8088 como porta da aplicação.

clip0275
1

Configurar a aplicação de teste

  • Defina ExternalServerUrl para a URL do servidor dedicado (por exemplo http://localhost:8077).

  • Defina ExternalServerToken para o valor do token usado pelo servidor dedicado.

  • Opcionalmente defina AppDomain somente se você precisar de domínios de aplicação separados.

  • Defina GlobalBinding para o domínio global (por exemplo socket.fmsoft.net:8077).

  • Escolha uma porta de aplicação diferente da do servidor dedicado (por exemplo 8088).

2

Execute o servidor dedicado

Assegure-se de que o servidor WebSockets dedicado esteja em execução em segundo plano. (Veja: https://unigui.com/doc/online_help/setting-up-the-dedicated-webso.htm)

3

Compile e execute a aplicação de teste

Compile e execute sua aplicação de teste e verifique a conectividade WebSocket no console do navegador e no código-fonte da página.

Executando a aplicação

Já configuramos nosso servidor dedicado na seção anterior e ele está em execução em segundo plano. (Veja: https://unigui.com/doc/online_help/setting-up-the-dedicated-webso.htm)

Agora podemos compilar e executar nossa aplicação de teste.

Na imagem abaixo nossa aplicação está sendo executada na porta 8888 e o console do navegador mostra que uma conexão WebSocket foi estabelecida com sucesso.

clip0277

O código-fonte da página web também mostra que nossa conexão WebSocket foi estabelecida para ws://socket.fmsoft.net:8077 como esperado.

clip0278

Finalmente, testar nossa aplicação revela que ela está funcionando corretamente.

clip0280