<>テンセントクラウドマルチターミナル「君画我猜」Socketサーバー


小さなdemoと組み合わせて、テンセントクラウドのSocketサーバでさまざまなsocketリクエストをエージェントし、低遅延、異なるエンドとの相互作用を実現する方法を共有しました.作者:金朝麟
出典:騰雲閣の文章
プロジェクトの概要
Javaの授業の大きい宿題、1つの小さいゲームをして、3人のGitは協力して、異なる端末、1つの分岐の3つのフォルダは互いに影響しません.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コア2 GB構成)を採用し、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)(#FFA 500,orange,rgb(255,165,0))「deviceHeight」:400,//デバイス高さ(int)「deviceWidth」:500,////デバイス幅(int)「endX」:122,//終了座標(int)X「endY」:149,//終了座標(int)Y「lineValue」:3//線の幅(3//線の幅):3//線の幅(int//線の幅(int)X「beginX」:149,//始点(int)}
効果図
Web端末
PC端末アンドロイド
まとめ
テンセントクラウドのSocketサーバーを通じて各種socket要求を代理し、遅延時間が短く、基本的にローカルlocalhostの同期速度に達することができ、異なるエンド間のインタラクションも適切に処理することができる.開発の過程でも多くの問題が発生しました.例えば、Socketサーバのフレームワークについて合意していません.PC側はsocket自身がjavaでローカルに書いたと言い(これでWebとAndroidは使えない)、またNodeJSのsocket.ioで統一して書くことを提案しました.Web側はReact+Webpackでつながっていて、他の端には対応するSDKがあります.サーバーが解決してから、各端は楽しく書き始めました.
最後に、エンド間インタラクションでも多くの問題(デバイスの割合、入力する値が必要)に直面し、インタフェースフォーマット、各パラメータのデータ構造とタイプ、事例の規定を開始します.
その後、Githubに伝わった時もいくつかの問題に遭遇しました.他の人はGitに対する熟知度が違うので、pushは私が彼らのパソコンでpushとpullにあげたのです.今回の開発を経て、鍛えられたチームワーク能力と新しい枠組みに対する学習能力.
より多くのクラウドコンピューティング技術の乾物を取得するには、テンセントクラウド技術コミュニティの微信公衆番号:テンセントクラウド技術コミュニティ(QcloudCommunity)に行ってください.