项目概述


Java课大作业,做一个小游戏,三人Git协作,不同终端,一个分支三个文件夹互不影响。Demo地址 ,Github地址。先来目睹一下吧!

原理图

当玩家1在使用画笔在画板上进行绘图工作时,把当前这个玩家的绘图的数据传递到服务器,然后由服务器把该数据广播到其他玩家,其他玩家的画笔将根据这些数据自动在画板上进行绘制。因为是多端,所以得采用统一的Socket通信构架,经过协商,使用socket.io框架,客户端就可以统一socket.io-Java、socket.io-Android

Socket服务器端(数据交互)


服务器地址:
http://119.28.67.19:3007/或者http://game.ycjcl.cc,采用了腾讯云的CentOS 7服务器(香港区2核 2GB配置),通过Nginx转发到NodejsSocket.io上,进行Websocket通信。

服务端关键代码:

// socket监听的事件
io.on('connection', function(socket) {/*** 画者事件 drawPath* 传入JSON:data* 例:*  {beginX: 68beginY: 182colorValue: "red"deviceHeight: 400deviceWidth: 500endX: 74endY: 181lineValue: 3*  }*/socket.on('drawPath', function(data) {/*** 广播事件 showPath* 将画者事件接收的data数据,向连接到socket服务器的客户端(猜者)进行广播* 例:* socket.on('showPath', (data)=>{// 自定义画的方法this.drawing({json});});* */socket.broadcast.emit('showPath', data);});// 监听客户端的socket.send(message)方法socket.on('message', function(message){// 画者生成一个随机的关键字if(message == 'getKeyWord'){INDEX = Math.floor(Math.random() * keyword.length);KEYWORD = keyword[INDEX];// 将生成的关键字发送到画者的客户端socket.emit('keyword', KEYWORD);// 画者清空画布 socket.send('clear')    }else if(message == 'clear'){// 猜者端清空画布console.log('进来了');socket.broadcast.emit('showBoardClearArea');// socket.emit('showBoardClearArea');}else if(message == 'success'){// 猜对后,清空画布,更换词io.sockets.emit('successClearArea');}}); /*** 猜者提交 submit* 传入str: keyword* * this.state.socket.emit('submit', keyword)}*/socket.on('submit', function(keyword) {// 标志位var bingo = 0;// 提示var tip = '';// 如果console.log(keyword);if(keyword && KEYWORD){if (KEYWORD.toLocaleLowerCase() == keyword.toLocaleLowerCase()) {console.log('进来了2');bingo = 1;}else{tip = tips[INDEX];}}else{bingo = -1;}console.log(bingo);console.log(tip);// 将flag标志位传到连接的客户端socket.emit('answer', {bingo:bingo,tip:tip});});socket.on('disconnect', function() {});
});

传入数据:
因为是多端存在设备大小差异,经过讨论,根据比例进行计算,所以传入数据中有deviceHeightdeviceWidth

{"beginX":114,   // 起点坐标(int) X"beginY":143,   // 起点坐标(int) Y"colorValue":"red",  // 线的颜色(str)  (#FFA500,orange,rgb(255, 165, 0))"deviceHeight":400,  // 设备高度(int)  "deviceWidth":500,   // 设备宽度(int)  "endX":122,          // 终止坐标(int) X"endY":149,          // 终止坐标(int) Y"lineValue":3        // 线的宽度(int)
}

效果图

Web端

PC端

安卓

总结

通过腾讯云的Socket服务器代理各种socket请求,延迟时间较短,基本能达到本地localhost的同步速度,不同端之间的交互也能处理得当。开发过程中也遇到了很多问题,比如另外就Socket服务器框架没有达成共识,PC 端说socket自己用java写到本地了(这样WebAndroid就用不了了),然后又我提出用NodeJSsocket.io去统一写。Web端我用React+Webpack就连起来了,其它端有相应的SDK。服务器解决后,然后各个端开始欢快地写起来了。

最后在跨端交互时,也遇到了不少的问题(设备的比例,需要传入的值),然后就开始规定接口格式,每个参数的数据结构类型事例

之后,传到 Github 时也遇到了一些问题,由于其它人对Git的熟悉程度不一样,所以 push 是我在他们电脑给pushpull上去的。经过此次开发,锻炼的团队协助能力以及对新框架的学习能力。

本文首发腾云阁 腾讯云搭建多终端《你画我猜》Socket服务器

腾讯云搭建多终端《你画我猜》Socket服务器相关推荐

  1. 运用双腾讯云搭建《饥荒》多人联机服务器

    对于一个喜欢玩游戏的人来说,<饥荒>我想大家很多人都玩过,在玩的时候,我们都会搭建一个服务器来和朋友一起玩,今天在腾云阁看到一篇文章,如何运用双腾讯云搭建<饥荒>实现多人联机服 ...

  2. 云服务器饥荒_运用双腾讯云搭建《饥荒》多人联机服务器

    对于一个喜欢玩游戏的人来说,<饥荒>我想大家很多人都玩过,在玩的时候,我们都会搭建一个服务器来和朋友一起玩,今天在腾云阁看到一篇文章,如何运用双腾讯云搭建<饥荒>实现多人联机服 ...

  3. 2021最新 运用双腾讯云搭建《饥荒》多人联机服务器

    <饥荒>是由 Klei Entertainment 开发的一款动作冒险类求生沙盒游戏,是目前较火的一个独立游戏. 多人联机服务器让你和你的小伙伴可以合作,共同在沙盒世界里求得生存.游戏中有 ...

  4. 腾讯云搭建vsftpd服务器

    腾讯云搭建vsftpd服务器 1. 背景 为了方便一些外部公司的数据回流,在内网搭建ftp服务器存在一些安全隐患,所以我们选择在腾讯云上搭建服务器,同时采用一些安全策略来提高服务的安全性.下面将对整个 ...

  5. 腾讯云搭建hexo博客

    title: 腾讯云搭建hexo博客 tags: hexo,腾讯云 文章目录 title: 腾讯云搭建hexo博客 tags: hexo,腾讯云 @[toc] 1. 腾讯云 学生认证购买 重置密码和网 ...

  6. 腾讯云搭建WordPress个人博客小白版流程分享

    前言:现在云时代,搭建自己个人网站的成本越来越低了,特别是学生(ps:大四狗也算哦).不管你是否从事IT行业,趁腾讯云还有学生优惠,赶紧上车玩玩吧,搭建属于独立域名的私人博客,做个高大上的分享客.下面 ...

  7. 腾讯云在线WebShell终端使用体验

    前言 WebShell最近更新的很快,之前都是每更新一次就新开一篇文章并引用前一篇文章的链接,后面考虑到更新如此频繁影响到小伙伴们的阅读体验,故开一篇新的合集,此后每次更新都会在这里修改并打上修改日期 ...

  8. 腾讯云搭建Socks5一系列及相关内容

    腾讯云搭建Socks5多IP代理服务器实现游戏单窗口单IP 腾讯云多IP Socks5搭建教程 配合代理工具实现 单窗口单IP 1.多IP服务器选择 2.服务器购买 3.创建弹性网卡,绑定弹性公网IP ...

  9. 手把手教你腾讯云搭建RUOYI系统

    手把手教你腾讯云搭建RUOYI系统 前置准备 腾讯云配置 1 服务器准备 1.1 腾讯云购买地址: 1.2 配置 开放端口 2 软件安装 2.1 MySQL在线安装 2.2 Redis 安装 2.3 ...

最新文章

  1. 阿里云 FTP 无法读取目录问题
  2. 讲解SQL2005数据库转到SQL2000的步骤
  3. Windows安全软件长臂管辖的折中方案?
  4. 纯CSS3画出小黄人并实现动画效果
  5. HDU 1213 How Many Tables 并查集 水~
  6. python分组求和_Python–多个键分组求和
  7. 【智能制造】智能制造将势不可挡
  8. paypal如何退款
  9. dbf是什么文件格式
  10. 淘宝客接入PHP(一)
  11. ASR项目实战-决策点
  12. 日光山谷的秋天景色。
  13. Pycharm控制台中文输出乱码怎么办?控制台输出乱码问题的解决方法
  14. linux下将8bit二值位图转化为1bit单色位图【C/C++】
  15. 《爱乐之城》月亮与六便士,你选哪个?
  16. 2021软件工程保研经历
  17. Java集合深入解析(一)——集合的基本概念
  18. Redis主从架构 | 黑马Redis高级篇
  19. camel_使用Apache Camel进行负载平衡
  20. 中国微粉化蜡行业市场供需与战略研究报告

热门文章

  1. Elasticsearch 异常处理
  2. c语言程序流程图绘制软件,程序员都是用什么画图工具绘制C语言程序流程图?这个方法你需要知道...
  3. 【引言集】 孔子:论语为政
  4. 大数据Hadoop之HDFS和MapReduce_02_01
  5. 股票分析及利用tushare查看股票部分信息
  6. 全球与中国苯二亚甲基二异氰酸酯(XDI)市场发展形势与未来前景分析报告2022-2028年
  7. RestTemplate 发送请求 清除Cookie
  8. 自然数分解(罗列出一个自然数的加数的所有组合)(回溯)
  9. CPU架构与指令集的关系
  10. 第二届全国高校计算机能力挑战赛-Java程序设计赛