Servidor web pequeno e simples em TCL
Publicado por José Lucas (última atualização em 14/05/2021)
[ Hits: 4.770 ]
Homepage: https://github.com/NIDObr
Bom dia, estou estudando TCL e fiz esse script como um experimento, funciona porem é muito simples. Pretendo melhorar ele com o tempo, espero que gostem!
https://github.com/NIDObr/smallws
#!/usr/bin/env tclsh #--------------------------------------------------------- # Author: NidoBr # E-mail: < coqecoisa@gmail.com > # Github: < https://github.com/NIDObr > # Versão: Alpha 15/03/2021 # Licença: BSD 3-Clause "New" or "Revised" License # OPLTOOL: # Small web server #--------------------------------------------------------- #-------------------------------------------------Package # Log tool #package require logtool 1.0 #----------------------------------------------------Vars # Nome do programa set ::_pname $argv0 # Diretorio raiz (onde estara o site) set ::_root "/home/nido/Documentos/scripts/html/repo_opl" #1 Primeira pagina set ::_index "/index.html" # Porta do servidor set _port "6921" #--------------------------------------------------Funções # Inicia o servidor proc InitServer { port } { # Cria o canal de rede na porta especificada e chama a função InirCfg set ::_wssock [ socket -server InitCfg $port ] puts "[ clock format [ clock seconds ] -format {%b %d %H:%M:%S} ] - Servidor iniciado." # Mantem o programa rodando em loop vwait forever } # Indentifica se o canal esta disponivel proc InitCfg { _sockid _ipremot port } { # Se o canal estiver disponivel chama a função cfgWebSW fileevent $_sockid readable [ list cfgWebSW $_sockid $_ipremot ] } # Configura o canal proc cfgWebSW { _sockid _ipremot } { fconfigure $_sockid -translation binary -buffering full fconfigure $_sockid -blocking 0 if { [ fblocked $_sockid ] } then { return } fileevent $_sockid readable [ list WebSW $_sockid ] } # Informações sobre o browser proc Header { _sockid } { puts $_sockid "HTTP/1.1 200 OK" puts $_sockid "" set _header [ read $_sockid ] puts "$_header" } # Trasfere as paginas ao browser proc WebSW { _sockid } { set _sockline [ gets $_sockid ] # Le as requisiçoes do browser if { $_sockline != " " } { Header $_sockid } set _sockline [ regsub "GET " $_sockline "" ] set _sockline [ regsub " HTTP/1.1" $_sockline "" ] # Se não for solicitada uma pagina edpecifica, exibe a pagina padrão if { [ eval string index $_sockline 1 ] == "" } { set _pfile [ open "$::_root$::_index" r ] } else { set _pfile [ eval open $::_root$_sockline r ] } fconfigure $_pfile -translation binary # Transfere os dados ao browser fileevent $_sockid readable [ fcopy $_pfile $_sockid -command [ list done $_pfile $_sockid ] ] } # Fecha os canais referente ao socket e ao arquivo enviado ao browser proc done { _pfile _sockid _transferbit } { close $_pfile close $_sockid } #-------------------------------------------------Principal # Start log #logtool:log_mes "Iniciando serviço..." $::_pname "INFO" puts "[ clock format [ clock seconds ] -format {%b %d %H:%M:%S} ] - Iniciando." # Inicia o servidor na porta especificada InitServer $_port
Mostrar conexões de rede ativas
Passkeys: A Evolução da Autenticação Digital
Instalação de distro Linux em computadores, netbooks, etc, em rede com o Clonezilla
Título: Descobrindo o IP externo da VPN no Linux
Armazenando a senha de sua carteira Bitcoin de forma segura no Linux
Enviar mensagem ao usuário trabalhando com as opções do php.ini
Instalando Brave Browser no Linux Mint 22
vídeo pra quem quer saber como funciona Proteção de Memória:
Encontre seus arquivos facilmente com o Drill
Mouse Logitech MX Ergo Advanced Wireless Trackball no Linux
Compartilhamento de Rede com samba em modo Público/Anônimo de forma simples, rápido e fácil
Remoção de propaganda com o programa Comskip[AJUDA] (2)
Linux Lite Demorando Muito Para Ligar (0)
PC não liga no filtro de linha (3)