zLnOU

Gry Real Time w przeglądarce

W ostatnich latach możliwości aplikacji webowych bardzo się rozwinęły. Dobra grafika 2D bez użycia Flasha, czy nawet grafika 3D nikogo już nie dziwi. Ciekawsze możliwości daje według mnie użycie WebSockets.

Co można osiągnąć dzięki WebSockets? Praktycznie wszystko, czego wymaga bardziej dynamiczna gra przeglądarkowa – systemy czatów, prywatnych wiadomości, odświeżanie wskaźników gracza na żywo, czy złożone systemy walk między graczami. Dobrym przykładem jest tu tutorial Node.js Chat w serwisie Net Tuts+.

Dzięki bibliotece Ratchet, ułatwioną pracę mają miłośnicy PHP. Jednym z ciekawszych przykładów jest tutaj push wiadomości dodawanej do bloga:

<?php

$entryData = array(
‚cat’ => $_POST[‚category’]
, ‚title’ => $_POST[‚title’]
, ‚article’ => $_POST[‚article’]
, ‚when’ => time()
);

$pdo->prepare(„INSERT INTO blogs (title, article, category, published) VALUES (?, ?, ?, ?)”)
->execute($entryData[‚title’], $entryData[‚article’], $entryData[‚cat’], $entryData[‚when’]);

// This is our new stuff
$context = new ZMQContext();
$socket = $context->getSocket(ZMQ::SOCKET_PUSH, ‚my pusher’);
$socket->connect(„tcp://localhost:5555″);

$socket->send(json_encode($entryData));

Co tu się dzieje? Skrypt zbiera parametry $_POST do tablicy, przy użyciu PDO dodaje wpis do bazy danych, następnie łączy się z naszym serwerem TCP i wysyła dane do klienta. Dzięki temu nie trzeba czekać aż użytkownik przeładuje stronę lub AJAXowy skrypt pobierze ponownie dane.

Osobiście preferuję framework Symfony 2, który doczekał się już pierwszych bundli implementujących funkcjonalność socketów. Można je znaleźć w serwisie KNP Bundles. Znajdziecie tam też przykład czatu, jak i jego kod źródłowy. Gotowe rozwiązania dają nam sporą przewagę. Dopracowanie własnej struktury może zająć tygodnie, nawet miesiące, a jednak wystarczy kilka kliknięć i parę napisanych linijek, żeby cieszyć się naszą pierwszą aplikacją opartą na socketach.

Dodaj komentarz

Twój adres e-mail nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *

Możesz użyć następujących tagów oraz atrybutów HTML-a: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>