一个基于 Golang 与 MySQL 的 Telnet BBS 基线实现,包含用户认证、版块、帖子、回复、站内信、举报审核、审计日志与在线会话管理。
1.228.xgithub.com/go-sql-driver/mysqlgolang.org/x/crypto/bcrypt. ├── cmd/server/main.go # 服务启动入口 ├── internal/ │ ├── biz/ # 业务服务层 │ ├── config/ # 配置加载 │ ├── model/ # 领域模型 │ ├── repo/ # MySQL 仓储与迁移执行 │ ├── router/ # 命令解析与路由分发 │ ├── session/ # 在线会话与状态机 │ └── telnet/ # Telnet 服务与协议处理 └── migrations/001_init.sql # 数据库初始化脚本
telnet_bbs。参考 SQL:
CREATE DATABASE IF NOT EXISTS telnet_bbs CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
程序通过环境变量读取配置(带默认值):
BBS_LISTEN_ADDR(默认 :2323)BBS_MYSQL_DSN(默认 root:root@tcp(127.0.0.1:3306)/telnet_bbs?parseTime=true)BBS_DB_MAX_OPEN_CONNS(默认 20)BBS_DB_MAX_IDLE_CONNS(默认 5)BBS_LOGIN_ATTEMPTS_PER_MIN(默认 30)BBS_SESSION_HEARTBEAT_SECONDS(默认 15)# 安装依赖
go mod tidy
# 启动服务
go run ./cmd/server
启动后程序会自动执行 migrations/*.sql。
# 构建并启动(包含 MySQL + 应用)
docker compose up --build
服务说明:
127.0.0.1:3306127.0.0.1:2323停止并清理容器:
docker compose down
使用 Telnet 客户端连接:
telnet 127.0.0.1 2323
可用命令(输入 help 可查看):
register <username> <password>login <username> <password>logoutboardsenter <board_id>list [page]read <post_id>post <title> <line1|line2|...>reply <post_id> <line1|line2|...>mail <to_user_id> <title> <content>report <target_type> <target_id> <reason>ban <user_id>whokick <conn_id># 运行测试
go test ./...
# 构建
go build ./...