先要为php安装 swoole.so 模块:

wget https://github.com/swoole/swoole-src/archive/v1.9.1-stable.tar.gztar -xf v1.9.1-stable.tar.gz
cd swoole-src-1.9.1-stable/

phpize
./configure --with-php-config=/usr/bin/php-config
make
make install

ll /usr/lib64/php/modules/
php -m | grep swoole

vim /etc/php.ini
extension=swoole.so

示例文档:

https://wiki.swoole.com/wiki/page/479.html

js:

<!DOCTYPE html>
<html>
<head>
<meta http-equiv="content-type" content="text/html; charset=utf-8">
</head>
<body>
<button onclick="send()">send message</button>
<script>
var wsServer = 'ws://10.3.149.85:9502';
var websocket = new WebSocket(wsServer);

websocket.onopen = function (evt) {
    console.log("Connected to WebSocket server.");
};

websocket.onclose = function (evt) {
    console.log("Disconnected");
};

// 当有消息从后端发过来就会自动执行此函数
websocket.onmessage = function (evt) {
console.log(evt);
    console.log('Retrieved data from server: ' + evt.data);
};

websocket.onerror = function (evt, e) {
    console.log('Error occured: ' + evt.data);
};

function send(){
websocket.send("send message");
}
</script>
</body>
</html>

php:

<?php

//创建websocket服务器对象,监听0.0.0.0:9502端口
$ws = new swoole_websocket_server("0.0.0.0", 9502);

//监听WebSocket连接打开事件
$ws->on('open', function ($ws, $request) {
    var_dump($request->fd, $request->get, $request->server);
    $ws->push($request->fd, "hello, welcome\n");
});

//监听WebSocket消息事件,接收到客户端发来的消息怎么处理
$ws->on('message', function ($ws, $frame) {
    echo "Message: {$frame->data}\n";
    $ws->push($frame->fd, "server: {$frame->data}");
});

//监听WebSocket连接关闭事件
$ws->on('close', function ($ws, $fd) {
    echo "client-{$fd} is closed\n";
});

$ws->start();