Vinculando a uma Porta ou Endereço IP Diferente
Por padrão, solicitações WebSocket serão atendidas no mesmo IP e porta que o servidor HTTP principal. Por exemplo, se sua aplicação estiver em execução na porta 8077, a mesma porta será usada para atender solicitações WebSocket. Se a URL da sua aplicação for http://myserver.com:8077 então a URL de conexão WebSocket será ws://myserver.com:8077. O mesmo servidor HTTP é usado para atender tanto solicitações HTTP quanto WebSocket. Esse cenário é válido para Standalone Server e Service Application. Nestas aplicações não há necessidade de vincular a uma porta ou endereço IP diferente, pois o servidor HTTP principal pode servir ambas as solicitações HTTP e WebSocket.
No entanto, se sua aplicação for implantada como um módulo ISAPI ou Apache, não haverá um servidor HTTP interno no módulo. O servidor web externo (IIS, Apache, etc.) executa seu próprio servidor HTTP interno. Cada servidor web usa seu método especializado para interagir com WebSockets (alguns, como o IIS, utilizam uma API especializada, enquanto outros usam regras de reescrita e técnicas de proxy). Veja IIS & Apache Deployment para detalhes: https://unigui.com/doc/online_help/iis--apache-deployment.htm.
Em geral, quando seu método de implantação não for Standalone Server ou Service (Windows ou Linux), você deve escolher uma porta e/ou endereço IP diferente para atender solicitações WebSocket. Quando você escolhe uma porta diferente e/ou um IP diferente, o uniGUI executará um servidor HTTP separado escutando nessa nova porta. Se você também escolher um endereço IP, esse servidor se vinculará a esse IP. Todas as solicitações WebSocket serão direcionadas para esse servidor HTTP dedicado.
Configurando uma porta diferente
Para configurar uma porta diferente para WebSockets faça as seguintes alterações em sua aplicação (ou no arquivo de configuração do HyperServer se sua aplicação estiver em um cluster HyperServer):
Defina AuxPort em WebSocketServer
No ServerModule da sua aplicação encontre a WebSocketServer propriedade da classe. Sob essa classe há uma propriedade chamada AuxPort. O valor padrão para AuxPort é 0, o que significa que nenhuma porta adicional será usada para WebSockets. Definir um valor diferente de zero força o uniGUI a criar um novo servidor HTTP que escutará as solicitações WebSocket em AuxPort.
Exemplo:
Se sua aplicação web roda na porta 8077 e
AuxPortestá definida para 8088:Solicitações HTTP regulares são atendidas na porta 8077 (http://myserver.com:8077).
Solicitações WebSocket são atendidas na porta 8088 (ws://myserver.com:8088).
Para módulos ISAPI/Apache, chamadas HTTP regulares são tratadas pelo IIS/Apache enquanto o servidor HTTP interno (escutando na 8088) atende as solicitações WebSocket.
Considerações sobre firewall e proxy
Quando você configura uma porta auxiliar, garanta que:
A porta auxiliar esteja acessível através do firewall do seu servidor e de quaisquer outros firewalls de rede.
Os clientes que acessam sua aplicação web também possam acessar essa porta adicional (ela não deve estar bloqueada nas redes do lado do cliente).
Se abrir essa porta extra não for possível, você pode usar um proxy interno para redirecionar chamadas WebSocket externas (por exemplo, ws://globalurl) para uma porta auxiliar local (por exemplo, ws://localurl:aux_port). Isso normalmente requer uma regra de reescrita de URL ou configuração de proxy no seu servidor web que redirecione solicitações ws:// externas para o servidor WebSocket interno executando em uma porta diferente.
Para suportar essa abordagem de proxy você deve definir o parâmetro GlobalPort ou definir um valor para a GlobalBinding propriedade incluindo o número de porta global correto para que a URL/porta global exposta aos clientes esteja correta.
Configurando um endereço IP diferente
Se seu ambiente restringe a abertura de portas (por exemplo, apenas as portas 80 e 443 são permitidas), você pode dedicar um IP secundário no seu servidor para solicitações WebSocket em vez de usar uma porta diferente. Nesse cenário você não precisa alterar o número da porta porque o IP secundário escutará na mesma porta que o servidor HTTP principal.
Para configurar um IP diferente:
Garanta que um IP global secundário esteja disponível no seu servidor.
Defina a
Bindingpropriedade daWebSocketServerclasse para o endereço IP secundário ao qual o servidor HTTP de WebSockets deve se vincular.Se o IP de binding interno for diferente do IP público/global (por exemplo, quando um roteador redireciona um IP global para um servidor interno), também defina
GlobalBindingpara o IP ou URL global apropriado.
Isso garante que conexões WebSocket sejam atendidas pelo endereço IP dedicado enquanto mantém a mesma porta do servidor HTTP principal.
Referências:
Standalone Server: https://unigui.com/doc/online_help/standalone_server.htm
Service (Windows/Linux): https://unigui.com/doc/online_help/windows_service.htm
IIS & Apache Deployment: https://unigui.com/doc/online_help/iis--apache-deployment.htm