玩法收藏/云服务器/搭建多终端《你画我猜》Socket 服务器 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
Game Engines
Unreal Engine
MyCryENGINE
liuliliuli2017
V2EX    游戏开发

玩法收藏/云服务器/搭建多终端《你画我猜》Socket 服务器

  •  
  •   liuliliuli2017 2017-03-24 17:10:54 +08:00 3772 次点击
    这是一个创建于 3189 天前的主题,其中的信息可能已经有所发展或是发生改变。

    这个真好玩,收录待用,修改转载已取得腾讯云授权


    原理图

    Git 地址
    Demo 地址

    需要条件
    腾讯云服务器: 2 核 2GB
    系统: CentOS 7

    通过 Nginx 转发到 Nodejs 的 Socket.io 上,进行 Websocket 通信

    服务端关键代码

    // socket 监听的事件 io.on('connection', function(socket) { /** * 画者事件 drawPath * 传入 JSON : data * 例: * { beginX: 68 beginY: 182 colorValue: "red" deviceHeight: 400 deviceWidth: 500 endX: 74 endY: 181 lineValue: 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() {}); }); 

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

    { "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) } 

    把这个 demo 完善,然后加到小程序,平时和朋友们一起玩不要太完美哈哈哈哈


    原文来自:https://www.qcloud.com/community/article/585387001484793629

    目前尚无回复
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     3268 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 24ms UTC 04:48 PVG 12:48 LAX 20:48 JFK 23:48
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86