Preparando as Aplicações

Após muitos testes em nosso ambiente de desenvolvimento local, prepare os aplicativos que serão implantados no servidor de produção.

O primeiro aplicativo a modificar para suportar WebSockets é o FMSoft Customer Portal: https://prime.fmsoft.net/userv/mportal.dll

clip0307

Atualmente o formulário principal mostra uma data/hora na barra de status que é atualizada a cada 30 segundos usando um UniTimer:

clip0308

Remova o manipulador de evento do timer e altere o intervalo do timer para disparar apenas a cada 2 minutos (para manter a sessão ativa).

clip0309

Objetivo: atualizar a data/hora usando mensagens WebSocket. Use um ThreadTimer em ServerModule para transmitir a data/hora a cada segundo. O cliente processará essa mensagem e atualizará a data/hora a partir do código do lado do cliente.

clip0310

Acima: ThreadTimer transmitirá a data/hora uma vez por segundo.

clip0311

Abaixo está o manipulador de evento do lado do servidor que transmite a data/hora para todos os clientes. Observação: a opção boClientOnly é usada para que o evento não dispare requisições Ajax; os eventos são processados no lado do cliente.

Adicione um manipulador de evento no lado do cliente ao formulário principal para processar a mensagem recebida e atualizar a barra de status:

Habilite o thread timer no código apenas quando este Node for o "Node Zero" do cluster. Use o evento OnClusterNodeIdChange (disparado quando NodeId ou ServerNodeId mudam e também chamado inicialmente quando o módulo é criado). Como ele pode ser chamado várias vezes, atribua diretamente à propriedade Enabled do timer.

circle-info

O ThreadTimer deve ser habilitado apenas para o nó do cluster que é o Node Zero.

Exemplo de código de habilitação com logging de depuração opcional:

Ao verificar o arquivo de log do Node 0 você deve ver entradas semelhantes a:

mportal.exe: 00001AA0: 22:44:25 [TUniServerModule]:Node Id = 0

mportal.exe: 00001AA0: 22:44:25 [UniThreadTimer1]:Timer Enabled for Node: 0 -1

Testes em um PC local mostram que o timer está funcionando corretamente e as mensagens são processadas pelo manipulador de evento do lado do cliente.

clip0313
1

1. Remover/ajustar o UniTimer local

  • Remova o evento do UniTimer que atualizava a barra de status a cada 30 segundos.

  • Defina esse timer para disparar a cada 2 minutos (para manter as sessões ativas).

2

2. Adicionar um ThreadTimer ao ServerModule

  • Adicione um ThreadTimer que dispare uma vez por segundo.

  • No seu evento OnTimer, chame BroadcastMessage com a mensagem 'timer' e o valor FormatDateTime(Now).

3

3. Adicionar manipulador no lado do cliente no MainForm

  • Implemente form.socketmessage para processar a mensagem 'timer' e definir o texto da barra de status a partir de params.now.

4

4. Habilitar o ThreadTimer somente no Node Zero

  • Em UniGUIServerModuleClusterNodeIdChange, defina UniThreadTimer1.Enabled := ClusterNodeZero.

  • Opcionalmente registre uma mensagem para depuração para confirmar que o timer está habilitado no nó correto.

5

5. Verificar

  • Verifique os logs do Node 0 pela entrada “Timer Enabled”.

  • Teste localmente para garantir que o cliente receba as mensagens e que a barra de status seja atualizada a cada segundo.