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

3788 次点击
所在节点    Go 编程语言
27 条回复
FutherAll
2020-05-06 15:38:56 +08:00
赞,回头看看
seamonster
2020-05-06 15:45:20 +08:00
好玩,无限画布怎么实现的
Bridan
2020-05-06 15:45:31 +08:00
怎么说呢 太妙了
Bridan
2020-05-06 15:45:55 +08:00
@seamonster 我是大菠萝球 哈哈哈
Leigg
2020-05-06 15:47:00 +08:00
全栈 np
AaronLiu00
2020-05-06 15:47:17 +08:00
有意思
sunshinev
2020-05-06 15:48:45 +08:00
@seamonster yeah 恭喜你问道了,我思考 2 天才想出来的解决方案~ 当时考虑了九宫格,但是后来用了很简单的方式!

如下:
如果物体向左侧移动,那么当粒子超出右边的边界的时候,将粒子的 X 坐标,移动到画布左侧
sunshinev
2020-05-06 15:49:30 +08:00
@Leigg 用到了好多好玩的技术 Vue + Canvas+websocket+protobuf+golang 哈哈~
sunshinev
2020-05-06 15:50:30 +08:00
@seamonster

// 重要:实现无限 star !这个地方要保证粒子的绘制范围 x,y 在 canvas 之内
if (p.x > canvas.width) {
p.x -= canvas.width;
} else if (p.x < 0) {
p.x += canvas.width;
}

if (p.y > canvas.height) {
p.y -= canvas.height;
} else if (p.y < 0) {
p.y += canvas.height;
}
xiaoyu03
2020-05-06 15:54:08 +08:00
我记得几年前 v2 上有人发过一个小蝌蚪聊天室跟你这个好像
http://kedou.workerman.net/
seamonster
2020-05-06 15:55:23 +08:00
@Bridan 哈哈哈哈哈,你不是去上课了吗
seamonster
2020-05-06 15:58:10 +08:00
@xiaoyu03 哈哈哈哈哈,php 版本来了,php 是世界上________。
seamonster
2020-05-06 16:00:16 +08:00
@sunshinev 解决方案对我来说超纲了,噗~
sunshinev
2020-05-06 16:00:34 +08:00
@xiaoyu03 之前有 workman 版本的,实际上 workman 的也是根据别的改造的,我这个是全新写的~但是貌似人多了有点卡哈哈
iKun66
2020-05-06 16:02:16 +08:00
好玩
sunshinev
2020-05-06 16:18:16 +08:00
@Bridan 刚截了张图,上传了附言,发现你在里面哈哈
guolaopi
2020-05-06 17:13:42 +08:00
火狐好卡。。。有解决方法吗。。
superliwei
2020-05-06 17:46:57 +08:00
有意思。
Gakho
2020-05-06 17:50:51 +08:00
有意思哈哈
KINGOD
2020-05-06 17:58:44 +08:00
Chrome 如果安装了 Vimium 插件,需要添加规则,忽略 d 和 W 这俩键 (区分大小写)

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

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

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

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

© 2021 V2EX