目次
Online Voting System
ホームページ PHPフレームワーク Workerman Workerman 開発: WebSocket プロトコルに基づいたオンライン投票システムを実装する方法

Workerman 開発: WebSocket プロトコルに基づいたオンライン投票システムを実装する方法

Nov 07, 2023 am 10:28 AM
websocket workerman オンライン投票システム

Workerman 開発: WebSocket プロトコルに基づいたオンライン投票システムを実装する方法

今日の情報化時代において、オンライン投票システムは選挙、調査、その他の活動に不可欠な要素となっています。従来の投票方法に比べ、オンライン投票システムは操作が簡単なだけでなく、高速でリアルタイム統計などの機能も実現できます。

この記事では、PHP の Workerman フレームワークを使用して、WebSocket プロトコルに基づいたオンライン投票システムを構築する方法を紹介します。同時に、読者の参考のために具体的なコード例を示します。

1. ワーカーマンとは何ですか?

Workerman は、高性能のオープン ソース PHP 非同期フレームワークであり、イベント駆動型のアイデアに基づいており、WebSocket、インスタント メッセージング、その他のアプリケーションなど、長時間接続するアプリケーションを簡単に実装できます。

Workerman は、TCP、UDP、HTTP などのプロトコルをサポートしており、高い同時実行性と低いメモリ消費という特徴があります。従来の Web アプリケーションと比較して、Workerman はリアルタイム パフォーマンスと安定性が優れているため、オンライン ゲーム、チャット ルーム、弾幕、メッセージ プッシュなどのアプリケーション シナリオに適しています。

2. WebSocket サーバーの構築

始める前に、PHP 環境と Workerman フレームワークがインストールされていることを確認する必要があります。具体的なインストール手順については、公式ドキュメントを参照してください。

次に、WebSocket サーバーを起動し、クライアントから送信されたメッセージをリッスンするための新しい PHP ファイルを作成する必要があります。ローカル 127.0.0.18080 ポートで WebSocket サービスを開くとします。コードは次のとおりです。

<?php
require_once __DIR__ . '/vendor/autoload.php';

use WorkermanWorker;
use WorkermanWebServer;
use WorkermanProtocolsWebsocket;

$ws_worker = new Worker('websocket://127.0.0.1:8080');
$ws_worker->count = 1;

$ws_worker->onWorkerStart = function() {
    echo "WebSocket server started
";
};

$ws_worker->onConnect = function($connection) {
    echo "New connection established: {$connection->id}
";
};

$ws_worker->onMessage = function($connection, $data) {
    echo "Received a message from {$connection->id}: $data
";
};

Worker::runAll();
ログイン後にコピー

上記のコードでは、Workerman のコードを使用します。 Worker WebSocket サーバーを開き、127.0.0.18080 ポートでリッスンするクラス。 count 属性は、開始されたプロセスの数を指定します。クライアントが接続すると、onConnect コールバック関数がトリガーされ、クライアントがメッセージを送信すると、onMessage コールバック関数がトリガーされます。これら 2 つのコールバック関数でクライアント接続とメッセージを処理できます。

3. オンライン投票システムの実装

投票システムでは、複数のユーザーの同時投票をサポートし、投票結果をリアルタイムで表示する必要があります。このような機能を実装するには、PHP の共有メモリ メカニズムと JSON 形式を使用して、クライアントとサーバー間でデータを渡す必要があります。

まず、サーバー側で連想配列 $votes を定義して、各投票オプションの投票数を保存する必要があります。クライアントから投票リクエストを受け取るたびに、対応するオプションの投票数に 1 が加算され、さまざまなオプションの投票数がさまざまな配列要素に格納されます。

<?php
// ...

$votes = [
    'Option 1' => 0,
    'Option 2' => 0,
    'Option 3' => 0,
];

$ws_worker->onMessage = function($connection, $data) use ($votes) {
    $data = json_decode($data, true);
    if (!isset($data['option']) || !isset($votes[$data['option']])) {
        // 投票选项不存在或者为空
        $connection->send(json_encode([
            'code' => 400,
            'message' => 'Invalid option'
        ]));
        return;
    }
    $votes[$data['option']]++;

    // 广播投票结果
    broadcast(json_encode([
        'code' => 200,
        'message' => 'Vote successfully',
        'data' => $votes
    ]));
};

function broadcast($data) {
    global $ws_worker;
    foreach ($ws_worker->connections as $connection) {
        $connection->send($data);
    }
}
ログイン後にコピー

上記のコードでは、PHP の global キーワードを使用して、$ws_worker オブジェクトを broadcast 関数に導入します。 、投票結果は、接続されているすべてのクライアントに JSON 形式でブロードキャストされます。上記のコードでは、接続されているすべてのクライアントにメッセージを送信する broadcast 関数も定義しています。

次に、クライアントの投票機能を実装する必要があります。 HTML ページでは、サーバーとリアルタイム通信するための JavaScript コードを通じて WebSocket オブジェクトを作成できます。

<!DOCTYPE html>
<html>
<head>
    <title>WebSocket - Online Voting System</title>
</head>
<body>
    <h1 id="Online-Voting-System">Online Voting System</h1>
    <p>Vote for your favorite option:</p>
    <form id="form">
        <input type="radio" name="option" value="Option 1">Option 1<br>
        <input type="radio" name="option" value="Option 2">Option 2<br>
        <input type="radio" name="option" value="Option 3">Option 3<br>
        <input type="submit" value="Vote">
    </form>

    <ul id="result">
        <li>Option 1: <span id="vote1"></span></li>
        <li>Option 2: <span id="vote2"></span></li>
        <li>Option 3: <span id="vote3"></span></li>
    </ul>

    <script type="text/javascript">
        var ws = new WebSocket('ws://127.0.0.1:8080');

        ws.onopen = function() {
            console.log('WebSocket connected');
        }

        ws.onmessage = function(event) {
            var data = JSON.parse(event.data);
            if (data.code === 200) {
                // 投票成功
                updateVotes(data.data);
            } else {
                // 投票失败
                console.error(data.message);
            }
        }

        function updateVotes(votes) {
            document.querySelector('#vote1').innerHTML = votes['Option 1'];
            document.querySelector('#vote2').innerHTML = votes['Option 2'];
            document.querySelector('#vote3').innerHTML = votes['Option 3'];
        }

        var form = document.querySelector('#form');
        form.addEventListener('submit', function(event) {
            event.preventDefault();
            var option = document.querySelector('input[name="option"]:checked');
            if (!option) {
                console.error('Please choose an option');
                return;
            }
            var data = {
                option: option.value
            };
            ws.send(JSON.stringify(data));
            option.checked = false;
        });
    </script>
</body>
</html>
ログイン後にコピー

上記のコードでは、WebSocket オブジェクトの onopenonmessage という 2 つのコールバック関数を使用します。これらは接続後に使用されます。ログを出力し、サーバーからのメッセージを受信します。フォームでは、submit イベントを使用してユーザーの投票行動をキャプチャし、WebSocket オブジェクトを通じて投票情報をサーバーに送信します。サーバーから投票結果を受け取るたびに、updateVotes 関数を通じて HTML ページ内の投票データを更新します。

4. 概要

この記事では、PHP の Workerman フレームワークを使用して WebSocket プロトコルに基づいたオンライン投票システムを実装する方法を紹介し、具体的なコード例を示します。この記事を読むことで、読者は Workerman フレームワーク、共有メモリ メカニズム、WebSocket プロトコル、その他の知識をより深く理解し、習得できるようになります。

以上がWorkerman 開発: WebSocket プロトコルに基づいたオンライン投票システムを実装する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

AIヘンタイを無料で生成します。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

WebSocket と JavaScript を使用してオンライン音声認識システムを実装する方法 WebSocket と JavaScript を使用してオンライン音声認識システムを実装する方法 Dec 17, 2023 pm 02:54 PM

WebSocket と JavaScript を使用してオンライン音声認識システムを実装する方法 はじめに: 技術の継続的な発展により、音声認識技術は人工知能の分野の重要な部分になりました。 WebSocket と JavaScript をベースとしたオンライン音声認識システムは、低遅延、リアルタイム、クロスプラットフォームという特徴があり、広く使用されるソリューションとなっています。この記事では、WebSocket と JavaScript を使用してオンライン音声認識システムを実装する方法を紹介します。

Java と WebSocket の組み合わせ: リアルタイムのビデオ ストリーミングを実現する方法 Java と WebSocket の組み合わせ: リアルタイムのビデオ ストリーミングを実現する方法 Dec 17, 2023 pm 05:50 PM

インターネット技術の継続的な発展に伴い、リアルタイムビデオストリーミングはインターネット分野における重要なアプリケーションとなっています。リアルタイムのビデオ ストリーミングを実現するための主要なテクノロジには、WebSocket と Java が含まれます。この記事では、WebSocket と Java を使用してリアルタイムのビデオ ストリーミング再生を実装する方法を紹介し、関連するコード例を示します。 1. WebSocket とは WebSocket は、単一の TCP 接続で全二重通信を行うためのプロトコルであり、Web 上で使用されます。

PHPとWebSocketを使ってリアルタイム通信を実現する方法 PHPとWebSocketを使ってリアルタイム通信を実現する方法 Dec 17, 2023 pm 10:24 PM

インターネット技術の継続的な発展により、リアルタイム通信は日常生活に欠かせないものになりました。 WebSocket テクノロジーを使用すると、効率的で低遅延のリアルタイム通信を実現できます。また、インターネット分野で最も広く使用されている開発言語の 1 つである PHP も、対応する WebSocket サポートを提供します。この記事では、PHP と WebSocket を使用してリアルタイム通信を実現する方法と、具体的なコード例を紹介します。 1. WebSocket とは何ですか? WebSocket は単一の

PHP と WebSocket: リアルタイム データ転送のベスト プラクティス PHP と WebSocket: リアルタイム データ転送のベスト プラクティス Dec 18, 2023 pm 02:10 PM

PHP と WebSocket: リアルタイム データ転送のベスト プラクティス方法 はじめに: Web アプリケーション開発では、リアルタイム データ転送は非常に重要な技術要件です。従来の HTTP プロトコルは要求応答モデルのプロトコルであり、リアルタイムのデータ送信を効果的に実現できません。リアルタイム データ送信のニーズを満たすために、WebSocket プロトコルが登場しました。 WebSocket は、単一の TCP 接続上で全二重通信を行う方法を提供する全二重通信プロトコルです。 Hと比べて

SSE と WebSocket SSE と WebSocket Apr 17, 2024 pm 02:18 PM

この記事では、どちらも信頼できるデータ配信方法である Server Sent Events (SSE) と WebSocket を比較します。通信方向、基盤となるプロトコル、セキュリティ、使いやすさ、パフォーマンス、メッセージ構造、使いやすさ、テストツールを含む 8 つの側面で分析します。これらの側面の比較は次のように要約されます。 カテゴリ サーバー送信イベント (SSE) WebSocket の通信方向 単方向 双方向 基礎となるプロトコル HTTP WebSocket プロトコルのセキュリティ HTTP と同じ 既存のセキュリティの脆弱性 使いやすさ セットアップが簡単 セットアップが複雑 パフォーマンスが速い メッセージ送信速度が高い メッセージ処理の影響を受けるおよび接続管理 メッセージ構造 プレーンテキストまたはバイナリ 使いやすさ 広く利用可能 WebSocket の統合に役立つ

golang WebSocketとJSONの組み合わせ:データ送信と解析を実現 golang WebSocketとJSONの組み合わせ:データ送信と解析を実現 Dec 17, 2023 pm 03:06 PM

golangWebSocket と JSON の組み合わせ: データ送信と解析の実現 現代の Web 開発では、リアルタイムのデータ送信がますます重要になっています。 WebSocket は双方向通信を実現するために使用されるプロトコルで、従来の HTTP リクエスト/レスポンス モデルとは異なり、WebSocket を使用すると、サーバーがクライアントにデータをアクティブにプッシュできます。 JSON (JavaScriptObjectNotation) は、簡潔で読みやすいデータ交換用の軽量形式です。

WebSocket と JavaScript: リアルタイム監視システムを実装するための主要テクノロジー WebSocket と JavaScript: リアルタイム監視システムを実装するための主要テクノロジー Dec 17, 2023 pm 05:30 PM

WebSocketとJavaScript:リアルタイム監視システムを実現するためのキーテクノロジー はじめに: インターネット技術の急速な発展に伴い、リアルタイム監視システムは様々な分野で広く利用されています。リアルタイム監視を実現するための重要なテクノロジーの 1 つは、WebSocket と JavaScript の組み合わせです。この記事では、リアルタイム監視システムにおける WebSocket と JavaScript のアプリケーションを紹介し、コード例を示し、その実装原理を詳しく説明します。 1.WebSocketテクノロジー

golang WebSocket プログラミングのヒント: 同時接続の処理 golang WebSocket プログラミングのヒント: 同時接続の処理 Dec 18, 2023 am 10:54 AM

Golang は強力なプログラミング言語であり、WebSocket プログラミングでの Golang の使用が開発者の間でますます評価されています。 WebSocket は、クライアントとサーバー間の双方向通信を可能にする TCP ベースのプロトコルです。この記事では、Golang を使用して、複数の同時接続を同時に処理する効率的な WebSocket サーバーを作成する方法を紹介します。テクニックを紹介する前に、まず WebSocket とは何かを学びましょう。 WebSocketWeb の概要

See all articles