Workshop: Deploy descomplicado de aplicações em VPS 🚀

Nosso Desafio WordPress no RD Summit!

Publicado em 07/11/2016

Atualizado em 04/06/2024

Implementando um jogo multiplayer usando node.js e websockets na kinghost

Nos dias 03 e 04 de novembro aconteceu em Florianópolis RD summit, o mais completo evento de Marketing Digital e Vendas da América Latina. E claro, a KingHost esteve presente com um estande no evento \o/.
Caso você tenha passado por lá pode conhecer nossos produtos (incluindo o lançamento hospedagem WordPress), conversar com a gente e faturar brindes incríveis. Além de tudo isso, apresentamos uma dinâmica muito legal no evento: O desafio WordPress.

Neste artigo vamos apresentar a novidade, mostrando como utilizar sua interface e como foi realizada a sua implementação. O desafio é um quiz dinâmico e interativo, desenvolvido usando Node.js e websockets, onde dois jogadores disputam em tempo real para provar quem tem o maior conhecimento sobre curiosidade do nosso amado CMS. O quiz funciona assim:

O endereço do quiz é acessado de um computador, smart tv ou qualquer outro dispositivo que seja de fácil visualização para ambos os jogadores, nesta instância uma nova sala é criada o que gera um id único para aquela sessão.

game1

Então os dois jogadores devem acessar o mesmo endereço de seus smartphones. Logo que os dois conectarem o jogo se inicia.

 

game2

game3

O jogador que clicar na resposta correta ganhará 5 pontos, e então se inicia um novo turno com uma nova pergunta para os dois jogadores. Caso a resposta escolhida pelo jogador seja incorreta, ele perde 3 pontos e a pergunta segue a mesma até que um dos dois responda corretamente. Este ciclo se repete por 5 turnos/perguntas e então o sistema informa se houve um vencedor ou se houve empate.

Implementação:

Este sistema pode parecer muito complexo a princípio, mas ele se torna simples com o uso do node.js e da biblioteca socket.io que facilita em muito as mensagens de rede usando websockets.

Websockets é um protocolo que fornece canais comunicação full-duplex sobre uma única conexão TCP. O websocket foi padronizado pela IETF na RFC 6455 em 2011, e sua Web IDL.

Sendo assim, o websocket se torna uma excelente opção para sistemas de comunicação que não exigem comunicação em tempo real e que necessitam de escalabilidade. Com o apoio do socket.io, a implementação se torna muito facilitada, pois a biblioteca cuida do gerenciamento das mensagens e eventos. Essa facilidade nos libera tempo e energia para concentrar no que realmente importa, a implementação do sistema que desejamos desenvolver.

É importante ressaltar que para o desenvolvimento deste sistema me baseei no Anagrammatix desenvolvido por ericterpstra. Caso queira conferir a implementação original do sistema, o código está disponível no github.

Quanto ao arquivo que inicializa a aplicação se trata do index.js, nela chamamos todas as dependências da aplicação:

// Importa o Express module
var express = require('express');


// Importa o module 'path' (padrão do Node.js)
var path = require('path');


// Cria uma nova instância do Express
var app = express();


// Importa o arquivo responsável pela lógica do jogo em server side
var agx = require('./agxgame');

Sendo que o na sua criação da instância do mesmo o seguinte código é chamado:

exports.initGame = function(sio, socket){
    io = sio;
    gameSocket = socket;
    gameSocket.emit('connected', { message: "Você está conectado!" });


    // eventos do  Host
    gameSocket.on('hostCreateNewGame', hostCreateNewGame);
    gameSocket.on('hostRoomFull', hostPrepareGame);
    gameSocket.on('hostCountdownFinished', hostStartGame);
    gameSocket.on('hostNextRound', hostNextRound);


    // eventos do Player
    gameSocket.on('playerJoinGame', playerJoinGame);
    gameSocket.on('playerAnswer', playerAnswer);
    gameSocket.on('playerRestart', playerRestart);
}

Nele estão descritos todas as mensagens esperadas pelo host via websocket. Por tanto  quando o host recebe a string ‘hostCreateNewGame’ chamará a função hostCreateNewGame.

Sendo assim podemos facilmente implementar uma aplicação assíncrona entre o host e os jogadores.

Caso queira verificar o código fonte, que está completamente comentado,após o final do evento publicaremos o código fonte da aplicação no github e atualizaremos o artigo com o link.

O que você achou deste conteúdo?

O que você achou deste conteúdo?

William
William Dorneles
É assistente de desenvolvimento no setor de Marketing e estudante de Game Design na Uniritter em Porto Alegre.
William
William Dorneles
É assistente de desenvolvimento no setor de Marketing e estudante de Game Design na Uniritter em Porto Alegre.

Compartilhe esse conteúdo com alguém que possa gostar também

Receba todo mês conteúdos
incríveis como esses para
seguir evoluindo

Conteúdos relacionados

Diferentemente de um servidor web tradicional, que se concentra na entrega de conteúdo estático, o servidor de aplicação executa regras complexas, controla transações e gerencia componentes que sustentam sistemas corporativos. Um dos grandes desafios à medida que o seu negócio cresce é adaptar as suas ferramentas à lógica da sua operação. O servidor de aplicação,...
Saber o que é HTTPS significa entender que vai muito além de um protocolo de segurança, mas sim um recurso essencial para proteger a credibilidade do seu negócio e até mesmo a performance das suas páginas. Mais do que pensar no layout das suas páginas, nos produtos que você vai oferecer ou até mesmo o...
O wireframe é uma ferramenta de alinhamento técnico, validação de requisitos e muito útil para a redução de retrabalho. Quando bem elaborado, antecipa problemas de navegação, arquitetura da informação e fluxo de usuário, economizando recursos em outras etapas. No desenvolvimento de produtos digitais, decisões tomadas nas primeiras fases impactam diretamente no custo, prazo e performance...
Diferentemente de builders tradicionais baseados em templates, o Lovable produz código editável e pronto para ser integrado a um repositório GitHub. Ou seja, é muito mais do que uma solução de prototipagem, é o ponto de partida para produtos reais. A criação de aplicações e sites por meio de IA generativa deixou de ser experimento...

Mensagens para você