{"id":44351317,"url":"https://github.com/sunshinev/go-space-chat","last_synced_at":"2026-02-11T15:07:00.645Z","repository":{"id":38223922,"uuid":"257491187","full_name":"sunshinev/go-space-chat","owner":"sunshinev","description":"基于Golang/WebSocket/Canvas/Protobuf 的聊天室/蝌蚪聊天室","archived":false,"fork":false,"pushed_at":"2026-02-07T05:06:49.000Z","size":15622,"stargazers_count":268,"open_issues_count":8,"forks_count":47,"subscribers_count":3,"default_branch":"master","last_synced_at":"2026-02-07T15:45:01.643Z","etag":null,"topics":["canvas","chat","chatroom","golang","protobuf","websocket"],"latest_commit_sha":null,"homepage":"","language":"JavaScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/sunshinev.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2020-04-21T05:38:13.000Z","updated_at":"2026-02-06T15:08:37.000Z","dependencies_parsed_at":"2023-01-27T20:00:40.756Z","dependency_job_id":null,"html_url":"https://github.com/sunshinev/go-space-chat","commit_stats":null,"previous_names":[],"tags_count":1,"template":false,"template_full_name":null,"purl":"pkg:github/sunshinev/go-space-chat","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sunshinev%2Fgo-space-chat","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sunshinev%2Fgo-space-chat/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sunshinev%2Fgo-space-chat/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sunshinev%2Fgo-space-chat/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/sunshinev","download_url":"https://codeload.github.com/sunshinev/go-space-chat/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sunshinev%2Fgo-space-chat/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":29336141,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-02-11T14:34:07.188Z","status":"ssl_error","status_checked_at":"2026-02-11T14:34:06.809Z","response_time":97,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.6:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["canvas","chat","chatroom","golang","protobuf","websocket"],"created_at":"2026-02-11T15:06:58.114Z","updated_at":"2026-02-11T15:07:00.638Z","avatar_url":"https://github.com/sunshinev.png","language":"JavaScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"##  孤独 Lonely\n\n![d2139b33a9868d1f17a471201d1272371588868902.jpg](https://cdn.jsdelivr.net/gh/sunshinev/remote_pics/d2139b33a9868d1f17a471201d1272371588868902.jpg)\n\n\n## 特色\n1. 支持性别修改、并且有颜色替换\n2. 支持敏感词过滤\n3. 支持姓名修改\n\n## 介绍\n\n通过canvas 2d来模拟了3D的视觉效果。\n\n并且在该项目中使用了protobuf来进行前端和后端的通讯协议，这一点非常方便！\n\n## 操作\n\n1. 项目使用传统`WASD`按键来控制上下左右\n2. 眼睛可以跟随鼠标的位置进行转动\n3. 按下`space` 空格可以输入消息，按下回车发送消息\n4. 左上角按钮可以输入名称，点击空白处名称生效\n\n## docker（推荐）\n最新支持使用docker-compose的方式来启动服务，克隆项目后，直接执行下面命令\n```\ndocker-compose up -d\n```\n\n访问`http://localhost:8081`\n\n\n## 本地运行\n\n建议使用非特权端口启动（例如 8081），避免 macOS/Linux 上 `:80` 需要管理员权限。\n\n```bash\ngo run main.go -web_addr :8081 -socket_addr :9000\n```\n\n- Web 静态服务（默认目录：`web_resource/dist/`）：`http://localhost:8081`\n- WebSocket 地址：`ws://localhost:9000/ws`\n- 统计接口：`http://localhost:8081/login_charts`\n\n如果你需要修改端口：\n\n```bash\ngo run main.go -web_addr :8082 -socket_addr :9001\n```\n\n注意：如果修改了 WebSocket 端口，需要同步修改前端里建立 WebSocket 连接的端口（`web_resource/src` 相关代码）。\n\n### 依赖下载（Go Modules）\n\n如果本地网络环境导致 `go run/go build` 下载依赖失败，可以临时指定 Go 模块代理：\n\n```bash\nGOPROXY=https://proxy.golang.com.cn,direct GOSUMDB=off go run main.go -web_addr :8081 -socket_addr :9000\n```\n\n\n## 技术工具\n\n前端 Vue+canvas+websocket+protobuf\n\n后端 Golang+websocket+protobuf+goroutine\n\n## 有意思的难点\n\u003e 这里列举几个在实现过程中，遇到的很有意思的问题\n\n1. 如何实现无限画布？\n2. 如何实现游戏状态同步？\n\n\n## proto 文件生成指令\n```\nprotoc -I ./ *.proto --go_out=.\n```\n\n```\nprotoc --js_out=import_style=commonjs,binary:. *.proto\n\n```\n\n\n## 相关链接\n\n[Canvas 基本用法](https://developer.mozilla.org/zh-CN/docs/Web/API/Canvas_API/Tutorial/Basic_usage)\n\n[Protobuf Guide](https://developers.google.com/protocol-buffers/docs/proto3)\n\n[Vue.js](https://cn.vuejs.org/index.html)","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsunshinev%2Fgo-space-chat","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fsunshinev%2Fgo-space-chat","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsunshinev%2Fgo-space-chat/lists"}