WebSocket é um poderoso protocolo de comunicação usado para troca de dados bidirecional em tempo real entre um cliente e um servidor. Sua capacidade de estabelecer e manter uma conexão de longa duração o torna ideal para aplicações que requerem atualizações de dados instantâneas. Se você está interessado em implementar WebSocket em linguagem C, este artigo fornecerá um guia conciso para começar.
Instalando libwebsockets
Atualmente, Tornado é uma biblioteca popular para implementar WebSocket em Python. No entanto, libwebsockets é uma biblioteca WebSocket flexível e fácil de usar, multiplataforma, escrita em linguagem C.
libwebsockets é uma biblioteca WebSocket multiplataforma escrita em C, que permite a criação de servidores e clientes relacionados ao protocolo WebSocket. É uma biblioteca flexível e amigável que permite o desenvolvimento rápido de aplicações WebSocket de alto desempenho. Graças ao seu design simples e leve, é particularmente adequada para a construção de aplicações em sistemas embarcados ou aplicações de servidor de alta carga que manejam um grande número de conexões.

Você pode instalar libwebsockets desta forma:
git clone https://github.com/warmcat/libwebsockets.git
cd libwebsockets
mkdir build
cd build
cmake ..
make && sudo make install
pkg-config --modversion libwebsockets
Adicionando libwebsockets.h
#include <libwebsockets.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <time.h>
Escrevendo código lógico
#include <libwebsockets.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <time.h>
// Estrutura para armazenar dados de cada sessão WebSocket
struct per_session_data {
};
// Função de callback para mensagens do servidor WebSocket
int callback(struct lws *wsi, enum lws_callback_reasons reason, void *user, void *in, size_t len) {
switch (reason) {
case LWS_CALLBACK_ESTABLISHED: // Trata o evento de nova conexão
// Adiciona um timer para enviar um timestamp a cada segundo
lws_callback_on_writable(wsi);
break;
case LWS_CALLBACK_SERVER_WRITEABLE: // Trata o evento de enviar dados
// Envia o timestamp
time_t t = time(NULL);
char timestamp[20];
sprintf(timestamp, "%ld", t);
lws_write(wsi, timestamp, strlen(timestamp), LWS_WRITE_TEXT);
lws_callback_on_writable(wsi);
break;
// Outros eventos omitidos
}
return 0;
}
int main(int argc, char **argv) {
// Cria o protocolo WebSocket
static struct lws_protocols protocols[] = {
{
"demo-protocol", // Nome do protocolo, deve corresponder ao protocolo WebSocket no código do frontend
callback, // Ponteiro da função de callback
sizeof(struct per_session_data), // Tamanho dos dados para cada sessão (conexão)
0, // Sem parâmetros adicionais do protocolo
NULL, NULL, NULL
},
{ NULL, NULL, 0, 0 } // A lista de protocolos termina com NULL
};
// Cria o contexto WebSocket
struct lws_context_creation_info info = {
.port = 3001, // Número da porta de escuta
.protocols = protocols // Lista de protocolos
};
struct lws_context *context = lws_create_context(&info);
// Verifica se a criação do contexto WebSocket foi bem-sucedida
if (!context) {
printf("Falha ao criar o contexto WebSocket.\n");
return -1;
}
// Entra no loop e espera por conexões WebSocket
while (1) {
lws_service(context, 50);
}
// Limpa e fecha o contexto WebSocket
lws_context_destroy(context);
return 0;
}
A Página do Front-end Conecta WebSocket
Criando página
Você precisa criar um index.html
e preencher com o código abaixo:
<!DOCTYPE html>
<html lang="pt">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Documento</title>
<script>
window.onload = () => {
if ('WebSocket' in window) {
// Cria uma conexão WebSocket
let ws = new WebSocket('ws://127.0.0.1:3001/websocket');
// Envia uma mensagem quando a conexão for estabelecida com sucesso e o servidor puder começar a enviar dados
ws.onopen = () => {
console.log('websocket sucesso---');
ws.send('sucesso');
}
ws.onmessage = (message) => {
let data = message.data;
console.log('recebido mensagem websocket---', data);
}
ws.onerror = () => {
console.error('falha no websocket');
}
} else {
console.error('não suporta websocket');
};
};
</script>
</head>
<body>
</body>
</html>
Executando a Página
Clique com o botão direito no index.html e abra este arquivo:

Ver os Resultados
Você pode ver que o backend recebe a mensagem "aberto sucesso" do frontend primeiro e a construção da conexão é bem-sucedida.
Então, depois que a conexão foi estabelecida, o backend começou a enviar informações para o frontend.

Como Enviar WebSocket com Apidog
Agora que cobrimos a implementação do WebSocket em linguagem C, vamos explorar como enviar solicitações WebSocket usando Apidog. Enquanto a seção anterior se concentrou nos fundamentos e técnicas de programação WebSocket em C, o Apidog oferece uma maneira conveniente de interagir com APIs WebSocket por meio de sua interface amigável.
Passo 1. Criando Solicitação WebSocket
- Clique no botão "+", e escolha "Nova API WebSocket". Em seguida, especifique a URL WebSocket, geralmente começando com
ws://
ouwss://
, na configuração do endpoint.

Passo 2. Enviar uma Mensagem
Na Mensagem você pode preencher a mensagem a ser entregue ao servidor, depois de enviá-la, o servidor receberá a mensagem que você enviar.

Nota: Certifique-se de que o servidor WebSocket está em execução e acessível para uma comunicação bem-sucedida com o Apidog.
Passo 3. Salvando a Solicitação
Quando você terminar de escrever, pode clicar em Salvar para salvar a solicitação, que será reutilizada rapidamente na próxima vez.

Passo 4. Conectando-se a um Servidor WebSocket
Primeiro, clique no botão Conectar para fazer uma conexão WebSocket.

Após uma conexão bem-sucedida, o Apidog mostrará uma mensagem de sucesso. O lado do servidor também responderá porque a conexão foi bem-sucedida.

Passo 5. Enviando Solicitação WebSocket
Então podemos nos comunicar com o servidor via WebSocket. Você pode usar o Apidog para enviar Mensagem e Parâmetros ao servidor clicando no botão Enviar.

Você pode clicar no botão desconectar se não quiser mais estar conectado.

Nota:
O Apidog tem tanto uma parte web quanto uma parte cliente. Se você estiver usando a parte web e quiser depurar serviços locais, precisará instalar o plugin do Google para o Apidog.
Baixe aqui: Extensão do Navegador Apidog
Conclusão
Em conclusão, implementar WebSocket em linguagem C envolve instalar a biblioteca "libwebsockets", incluindo o arquivo de cabeçalho necessário e escrevendo o código lógico. Além disso, você pode utilizar ferramentas como Apidog para enviar solicitações WebSocket e testar a funcionalidade do seu WebSocket.