Go+websocket+protobuf 做的实时在线交互聊天工具,特点是 Canvas+protobuf 格式通信吧~

2020-05-06 15:34:45 +08:00
 sunshinev

Demo

http://chat.osinger.com/

介绍

项目打造了一个模拟太空的环境,通过 canvas 2d 来模拟了 3D 的视觉效果。

并且在该项目中使用了 protobuf 来进行前端和后端的通讯协议,这一点非常方便!

操作

  1. 项目使用传统WASD按键来控制上下左右
  2. 眼睛可以跟随鼠标的位置进行转动
  3. 按下space 空格可以输入消息,按下回车发送消息
  4. 左上角按钮可以输入名称,点击空白处名称生效

运行

go run main.go

该命令会启动 web-server 作为静态服务,默认 80 端口,如果需要修改端口,用下面的命令

go run main.go -web_server 8081

项目启动默认 websocket 服务端口为 9000 端口,如果需要修改

go run main.go -socket_server 9001

注意:如果修改 websocket 端口,同时需要修改 js 里面的 socket 端口

技术工具

前端 Vue+canvas+websocket+protobuf

后端 Golang+websocket+protobuf+goroutine

有意思的难点

这里列举几个在实现过程中,遇到的很有意思的问题

  1. 如何实现无限画布?
  2. 如何实现游戏状态同步?

相关链接

Canvas 基本用法

Protobuf Guide

Vue.js

3823 次点击
所在节点    Go 编程语言
27 条回复
dany813
2020-05-06 18:29:48 +08:00
有意思
sunshinev
2020-05-06 19:28:50 +08:00
@guolaopi 这个卡,是因为我的服务器是 1 核 2G1Mbps 带宽的,所以通讯起来我的带宽马上就满了。。
dark3212
2020-05-06 19:37:09 +08:00
提个 bug(也许是 feature ?),chrome 浏览器,按住移动键不松开,切换浏览器 tab 后松开按键,切回去就能看到一直在移动。

还有一些敏感词需要过滤,不然很快就有麻烦上身了。
sunshinev
2020-05-06 19:49:05 +08:00
@dark3212 我先把服务停了吧~毕竟的确很敏感
guolaopi
2020-05-07 10:01:27 +08:00
@sunshinev 不是,火狐是卡的掉帧,谷歌儿移动很顺畅。不知道是不是火狐对 canvas 有负优化。。。
sunshinev
2020-05-08 00:35:26 +08:00
@dark3212 敏感词过滤添加了~ 可以试试了哈哈## Demo

http://chat.osinger.com/
sunshinev
2020-05-13 19:08:08 +08:00
新项目,大家多多支持啊 https://sunshinev.github.io/go-sword-home/

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/668957

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX