Servidor web pequeno e simples em TCL
Publicado por José Lucas (última atualização em 14/05/2021)
[ Hits: 4.675 ]
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
Mostrar conexões de rede ativas
Compartilhando a tela do Computador no Celular via Deskreen
Como Configurar um Túnel SSH Reverso para Acessar Sua Máquina Local a Partir de uma Máquina Remota
Configuração para desligamento automatizado de Computadores em um Ambiente Comercial
Como renomear arquivos de letras maiúsculas para minúsculas
Imprimindo no formato livreto no Linux
Vim - incrementando números em substituição
Efeito "livro" em arquivos PDF
Como resolver o erro no CUPS: Unable to get list of printer drivers
Não to conseguindo resolver este problemas ao instalar o playonelinux (1)
Excluir banco de dados no xampp (1)
[Python] Automação de scan de vulnerabilidades
[Python] Script para analise de superficie de ataque
[Shell Script] Novo script para redimensionar, rotacionar, converter e espelhar arquivos de imagem
[Shell Script] Iniciador de DOOM (DSDA-DOOM, Doom Retro ou Woof!)
[Shell Script] Script para adicionar bordas às imagens de uma pasta