https://github.com/viniciusfinger/pychat
Chat via terminal using Python, threads and network sockets
https://github.com/viniciusfinger/pychat
network-socket python3 thread
Last synced: 9 months ago
JSON representation
Chat via terminal using Python, threads and network sockets
- Host: GitHub
- URL: https://github.com/viniciusfinger/pychat
- Owner: viniciusfinger
- Created: 2023-09-01T13:13:23.000Z (over 2 years ago)
- Default Branch: main
- Last Pushed: 2023-10-02T16:05:22.000Z (over 2 years ago)
- Last Synced: 2025-04-12T21:18:29.682Z (12 months ago)
- Topics: network-socket, python3, thread
- Language: Python
- Homepage:
- Size: 36.1 KB
- Stars: 1
- Watchers: 1
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
README
# Pychat 🐍💬
Um chat no terminal usando Python + sockets de rede
## Como usar 🤔
Usando o terminal navegue até o diretório que contém os arquivos `chat_server.py` e `chat_client.py`.
Primeiro inicie o servidor usando o comando `python3 chat_server.py [Porta]`. Caso não insira nenhuma porta, o servidor iniciará na porta `19000`.
Para iniciar o cliente, use o comando `python3 chat_client.py [IP do servidor] [Porta]`.
Para ver os possíveis comandos, digite `@AJUDA`.
## Arquitetura ⚙️
O chat está arquitetado no modelo client-server, ou seja, no meio de todos os clients temos o servidor fazendo o recebimento e distribuição das mensagens.
No `chat_client.py` temos a thread principal do sistema rodando a leitura do terminal e o envio de mensagens ao servidor enquanto em uma thread separada temos o socket escutando as mensagens que estão chegando de outros clients através do servidor.
No `chat_server.py` a thread principal é reponsável por escutar novos clients querendo se conectar. Quando um client novo se conecta, uma thread nova se cria. Essa nova thread ficará responsável por ouvir a mensagem que está sendo enviada pelo client e redistribui-la para os outros clients conectados no servidor.
Para redistribuir as mensagens, foi seguido o padrão publisher/subscriber, onde todos os clients mantidos em uma lista chamada `clients_listening` são os subscribers e o servidor é o publisher.
## Contribuindo ⚒️
Contribuições são sempre bem-vindas!
Para enviar suas alterações, clone o projeto, crie sua branch, faça as devidas alterações e/ou melhorias e então abra um pull request para ser verificado.
## Referência
- [Javachat](https://github.com/viniciusfinger/javachat)
- [Socket - Python docs](https://docs.python.org/3/library/socket.html)