安裝
請使用composer集成phpsocket.io
composer require workerman/phpsocket.io
腳本中引用vendor中的autoload.php實現SocketIO相關類的加載。例如
require_once ‘/你的vendor路徑/autoload.php’;
服務端和客戶端連接
創建一個SocketIO服務端
項目根目錄創建start.php
文件
<?php
require_once __DIR__.'/vendor/autoload.php';
use Workerman\Worker;
use PHPSocketIO\SocketIO;
$io =new SocketIO(3120);
$io->on('connection',function ($scoket)use($io){
echo "connection success".PHP_EOL;
});
Worker::runAll();
客戶端
引入socket.io.js
<input type="text" value="" id="text">
<button id="tt">點擊</button>
<script src="jquery.min.js"></script>
<script src='https://cdnjs.cloudflare.com/ajax/libs/socket.io/2.3.0/socket.io.js'></script>
<script>
$(function () {
var socket= io('http://127.0.0.1:3120');
socket.on('connect',function(){
alert(123)
})
})
</script>
- 啓動服務端
php start.php
自定義事件
socket.io主要是通過事件來進行通訊交互的
socket連接除了自帶的connect,message,disconnect三個事件以外,在服務端和客戶端開發者可以自定義其它事件
服務端和客戶端都通過emit方法觸發對端的事件
例如我們綁定一個say
事件
服務端
<?php
require_once __DIR__.'/vendor/autoload.php';
use Workerman\Worker;
use PHPSocketIO\SocketIO;
$io =new SocketIO(3120);
$io->on('connection',function ($scoket)use($io){
$scoket->on('say',function ($say)use($io){
$io->emit('say','接收到:'.$say);
});
});
Worker::runAll();
客戶端
<script src="jquery.min.js"></script>
<script src='https://cdnjs.cloudflare.com/ajax/libs/socket.io/2.3.0/socket.io.js'></script>
<script>
$(function () {
var socket= io('http://127.0.0.1:3120');
socket.emit('say','hello world')
socket.on('say',function (say) {
alert(say)
})
})
</script>
$io是SocketIO對象。$socket是客戶端連接
$data可以是數字和字符串,也可以是數組。當$data是數組時,客戶端會自動轉換爲javascript對象。
同理如果客戶端向服務端emit某個事件傳遞的是一個javascript對象,在服務端接收時會自動轉換爲php數組。