PHP實現websocket通訊的方法示例

2022-10-03 15:54:14 字數 2332 閱讀 3426

執行方法:

首先先修改server.php與index.html的ip

通過命令列執行 [php路徑]\php.exe "[檔案路徑]\server.php"

然後通過瀏覽器開啟index.html

server.php

<?php include 'websocket.class.php';

$config=array(

'address'=>'192.168.0.200',

'port'=>'8000',

'event'=>'wsevent',//**函式的函式名

'log'=>true,

);$websocket = new websocket($config);

$websocket->run();

function wsevent($type,$event)elseif('out'==$type)elseif('msg'==$type)

}function roboot($sign,$t)

$websocket->write($sign,'robot:'.$show);

}?>

index.html

websocket_test

程式設計客棧button" value="斷開" onclick="dis()">

websocket.class.php

<?php /*

建立類websocket($config);

$config結構:

$config=array(

'address'=>'192.168.0.200',//繫結位址

'port'=>'8000',//繫結埠

'event'=>'wsevent',//**函式的函式名

'log'=>true,//命令列顯示記錄

);**函式返回資料格式

function wsevent($type,$event)

$type字串 事件型別有以下三種

in 客戶端進入

out 客戶端斷開

msg 客戶端訊息到達

均為小寫

$event 陣列

$event['k']內建使用者列表的userid;

$event['sign']客戶標示

$event['msg']收到的訊息 $type='msg'時才有該資訊

方法:run()執行

search(標示)遍歷取得該標示的id

close(標示)斷開連線

write(標示,資訊)推送資訊

idwrite(id,資訊)推送資訊

屬性:$users 客戶列表

結構:$users=array(

[使用者id]=>array('socket'=>[標示],'hand'=[是否握手-布林值]),

[使用者id]=>arr.....)*/

class websocket

error_reporting(e_all);

set_time_limit(0);

ob_implicit_flush();

$this->event = $config['event'];

$this->log = $config['log'];

$this->master=$this->websocket($config['address'], $config['port']);

$this->sockets=array('s'=>$this->master);

} function websocket($address,$port)

function run()else

if(!$this->users[$k]['hand'])else}}

} }function search($sign)

return false;

} function close($sign)

function handshake($k,$buffer)

function uncode($str)) === 8) else if (hexdec($head) === 1)

} return $data;

} function code($msg)

function ord_hex($data) //沒有這個標示

$t=$this->code($t);

return socket_write($this->users[$id]['socket'],$t,strlen($t));

} function write($k,$t)

function eventoutput($type,$event)

function log($t)

}}

Autobahn實現WebSocket通訊

最近開發中需要通過ws協議通訊,於是做了些功課,現在websocket用的比較多的就是autobahn,由於使用方便所以選擇了它。然後就是使用websocketconnection這個類,使用方法直接上 吧mconnect.connect wsurl,new websockethandler ove...

WebSocket實現原理

websocket同http和https一樣,屬於tcp基礎上的應用層的協議 因此其必然也是存在三次握手四次揮手的過程 一般來說,我們使用的http協議只能由客戶端發起請求,而服務端無法直接主動進行資料推送,這就導致了如果服務端有持續的變化 如聊天室 而客戶端獲取起來較為複雜 如實時性和服務端壓力等...

php使用websocket示例詳解

url 下面我畫了乙個圖演示 client 和 server 之間建立 websocket 連線時握手部分,這個部分在 node 中可以十分輕鬆的完成,因為 node 提供的 net 模組已經對 socket 套接字做了封裝處理,開發者使用的時候只需要考慮資料的互動而不用處理連線的建立。而 php ...