天天看點

php workerman 入門(webSocket)

webSocket肯定很多人頭疼,剛開始接觸http,現在要了解一個新的連接配接方式。

下面來簡單介紹一些基礎知識,從不會到會。

由于現在有很多很好用的socket架構,本着不浪費生命重複造輪子的原則,下面是通過workerman的例子來介紹。

你要有個php環境,安裝composer,不會的可以看一下我之前的文檔,基本上麻瓜式敲一遍下來就ok了。

第一步,下載下傳workerman類

composer require walkor/workerman
           

第二步,根據文檔給的例子去了解

http://doc.workerman.net/getting-started/simple-example.html

在vendor同級目錄下建立一個ws_server.php檔案

<?php
use Workerman\Worker;
// 這裡要引對路徑
require_once __DIR__ . '/vendor/Workerman/Workerman/Autoloader.php';

// 這裡記得要把伺服器防火牆端口開起來。并且可以從文檔上的例子可以看出有三種協定,目前隻舉ws協定
$ws_worker = new Worker("websocket://0.0.0.0:2000");

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

// 當收到用戶端發來的資料後傳回hello $data給用戶端
$ws_worker->onMessage = function($connection, $data)
{
    // 這裡進行業務處理,分支等拓展
    var_dump($data);
    // 向用戶端發送消息
    $connection->send('服務端已收到資料');
};

// 運作worker
Worker::runAll();
           

在伺服器運作代碼

php ws_server.php start
           
php workerman 入門(webSocket)

成功啟動webSocket服務端

接下來,就是模拟一個用戶端來向服務端發送資訊

打開浏覽器的F12,console下敲入(或者寫成js)

// 假設服務端ip為192.168.33.10
ws = new WebSocket("ws://192.168.33.10:2000");
ws.onopen = function() {
alert("連接配接成功");
	
// 模拟消息内容
var param = {
	test:1,
	content:2,
}
// 向WS伺服器發送一個消息
ws.send(JSON.stringify(param));

// 接收WS伺服器傳回的消息
ws.onmessage = function(e){
	console.log(e.data);
}

// 主動斷開長連接配接
ws.close();
ws.onclose = function(){
	alert('已斷開')
}
           

在ws.send操作的時候,你會發現正在運作的服務端會列印出消息内容

php workerman 入門(webSocket)

是的,隻要有列印操作都會在這裡顯示

切記,不要使用exit()或者die()函數,這個函數會把socket程序中止掉

如果你改了一次用戶端的代碼,記得重新開機一下socket

php ws_server.php restart
           

就差不多介紹到這裡,如果能看懂就說明有一定了解了

如果想深入,直接啃文檔和demo