workerman簡單例子


workerman下載地址 http://www.workerman.net/

html

<!DOCTYPE html>  
<html>  
<head>  
<title>HTML5</title>  
<meta charset="utf-8" />  
<script src="/public/admin/js/jquery.min.js"></script>  
<script>  
$(function() {      
    var socket;  
    var readyState = ["connecting", "connected", "closing", "closed"];  
    /* 打開連接事件 */  
    $("button:eq(0)").click(function() {  
        try {  
             /* 連接 */  
             socket = new WebSocket("ws://192.168.56.1:2345");  
               
             /* 綁定事件 */  
             socket.onopen = function() {  
                 $("#msg").html("連接成功...");  
             };  
               
            socket.onmessage = function(e) {  
                 $("#msg").html($("#msg").html() + "<br />" + e.data);  
             };  
               
             socket.onclose = function() {  
                 $("#msg").html($("#msg").html() + "<br />關閉連接...");  
             };  
        } catch(exception) {  
            $("#msg").html($("#msg").html() + "<br />有錯誤發生");  
        }  
    });  
      
    /* 發送數據事件 */  
    $("button:eq(1)").click(function() {  
        /* 檢查文本框是否為空 */  
        if($("#data").val() == "") {  
            alert("請輸入數據!");  
            return;  
        }  
          
        try {  
            socket.send($("#data").val());  
            $("#msg").html($("#msg").html() + "<br />發送數據:" + $("#data").val());  
        } catch (exception) {  
            $("#msg").html($("#msg").html() + "<br />發送數據出錯");  
        }  
          
        /* 清空文本框 */  
        $("#data").val("");  
    });  
      
    /* 斷開連接 */  
    $("button:eq(2)").click(function() {  
        socket.close();  
    });  
});  
</script>  
</head>  
  
<body>  
<h1>WebSocket示例</h1>  
<input type="text" id="data" />  
<button>打開連接</button>  
<button>發送數據</button>  
<button>關閉連接</button>  
<p id="msg"></p>  
</body>  
</html>  

  php

<?php
use Workerman\Worker;
require_once '../Workerman/Autoloader.php';

// 創建一個Worker監聽2345端口,使用http協議通訊
$ws_worker = new Worker("websocket://0.0.0.0:2345");

//啟動4個進程對外提供服務  
$ws_worker->count = 4;  

$ws_worker->onWorkerStart = function($worker)
{
    echo "Worker starting...\n";
};
  
//當接收到客戶端發來的數據后顯示數據並回發到客戶端  
$ws_worker->onMessage = function($connection, $data) {  
	global $ws_worker;
    //顯示數據  
    echo "you just received: $data\n";  
      
    //向客戶端回發數據  
   if(!isset($connection->uid))
    {
       // 沒驗證的話把第一個包當做uid(這里為了方便演示,沒做真正的驗證)
       $connection->uid = $data;
       /* 保存uid到connection的映射,這樣可以方便的通過uid查找connection,
        * 實現針對特定uid推送數據
        */
       $ws_worker->uidConnections[$connection->uid] = $connection;
       return $connection->send('login success, your uid is ' . $connection->uid);
    }
    // uid 為 all 時是全局廣播
    list($recv_uid, $message) = explode(':', $data);
    // 全局廣播
    if($recv_uid == 'all')
    {
        broadcast($message);
    }
    // 給特定uid發送
    else
    {
        sendMessageByUid($recv_uid, $message);
    }
}; 

// 向所有驗證的用戶推送數據
function broadcast($message)
{
   global $ws_worker;
   foreach($ws_worker->uidConnections as $connection)
   { 
   	    echo '1/';
        $connection->send($message);
   }
}

// 針對uid推送數據
function sendMessageByUid($uid, $message)
{
    global $ws_worker;
    if(isset($ws_worker->uidConnections[$uid]))
    {
        $connection = $ws_worker->uidConnections[$uid];
        $connection->send($message);
    }
} 

// 運行worker
Worker::runAll();
?>

  可以單獨給某個用戶發信息,又可以給全部人發信息


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM