Módulo WS
O módulo ws fornece funcionalidades para comunicação bidirecional em tempo real através do protocolo WebSocket. Este módulo é útil para scripts que precisam se conectar a serviços que utilizam WebSockets.
Características principais:
-
Conexão WebSocket assíncrona
-
Envio e recebimento de mensagens de texto
-
Suporte a URLs seguras (wss://) e não seguras (ws://)
-
Timeout implícito baseado no sistema
Protocolo WebSocket:
-
Protocolo de comunicação full-duplex sobre uma única conexão TCP
-
Ideal para aplicações em tempo real
-
Suportado pela maioria dos navegadores e servidores modernos
-
Menor overhead comparado a HTTP polling
Funções Disponíveis
Seção intitulada “Funções Disponíveis”1. ws.send_recv(url, dados)
Seção intitulada “1. ws.send_recv(url, dados)”Estabelece uma conexão WebSocket, envia uma mensagem e aguarda uma resposta.
Parâmetros:
Seção intitulada “Parâmetros:”-
url (string): URL do servidor WebSocket (ex: “ws://exemplo.com/socket”, “wss://exemplo.com/ws”)
-
dados (string): Mensagem de texto a ser enviada para o servidor
Retorno:
Seção intitulada “Retorno:”- string: Resposta de texto recebida do servidor WebSocket
Comportamento:
Seção intitulada “Comportamento:”-
Estabelece conexão WebSocket com o servidor especificado
-
Envia a mensagem de texto fornecida
-
Aguarda uma resposta do servidor
-
Retorna a primeira mensagem de texto recebida
-
Fecha a conexão após receber a resposta
-
Lança erro se receber mensagem binária ou se não houver resposta
Erros Comuns:
Seção intitulada “Erros Comuns:”-
"ws binary messages not supported"- Servidor enviou mensagem binária (não suportada) -
"no response from web socket"- Servidor não respondeu -
Erros de conexão (servidor offline, URL inválida, etc.)
Exemplo de Uso:
Seção intitulada “Exemplo de Uso:”-- Conexão básica com servidor WebSocketlocal url = "ws://echo.websocket.org"local mensagem = "Olá, WebSocket!"local resposta = ws.send_recv(url, mensagem)print("Resposta do servidor:", resposta)-- Saída: "Olá, WebSocket!" (servidor echo)
-- Conexão segura (wss://)local url_segura = "wss://servidor.producao.com/ws"local dados = json.encode({acao = "ping", timestamp = now()})local resposta = ws.send_recv(url_segura, dados)print("Resposta segura:", resposta)
-- Com tratamento de errolocal function enviar_com_tratamento(url, dados) local ok, resposta = pcall(ws.send_recv, url, dados) if ok then return resposta else log.error("Erro no WebSocket:", resposta) return nil endend
-- Testar múltiplos servidoreslocal servidores = { "ws://servidor1.com/ws", "ws://servidor2.com/socket", "ws://backup.servidor.com/ws"}
for _, servidor in ipairs(servidores) do local resposta = enviar_com_tratamento(servidor, "ping") if resposta then print("Servidor", servidor, "respondendo") break endendInformações Adicionais
Seção intitulada “Informações Adicionais”Conexão Segura (wss://):
Seção intitulada “Conexão Segura (wss://):”-- O módulo suporta tanto ws:// quanto wss://local conexoes = { "ws://localhost:8080/ws", -- Não seguro (HTTP) "wss://servidor.com/ws", -- Seguro (HTTPS) "ws://192.168.1.100:3000/ws", -- Local network}
for _, url in ipairs(conexoes) do local ok, resposta = pcall(ws.send_recv, url, "ping") if ok then print("Conexão bem-sucedida:", url) else print("Falha na conexão:", url, "-", resposta) endendMensagens de Texto Apenas:
Seção intitulada “Mensagens de Texto Apenas:”-- O módulo só suporta mensagens de texto-- Mensagens binárias retornam erro
local function enviar_dados_seguros(url, dados) -- Converter dados para JSON (texto) local dados_json = json.encode(dados)
local resposta = ws.send_recv(url, dados_json)
-- Parsear resposta JSON return json.decode(resposta)end
-- Exemplo com dados complexoslocal dados_complexos = { usuarios = { {id = 1, nome = "Alice", ativo = true}, {id = 2, nome = "Bob", ativo = false} }, metricas = { cpu = 45.6, memoria = 78.3, timestamp = now() }}
local resposta = enviar_dados_seguros("wss://api.empresa.com/ws", dados_complexos)