# WebSocketServer.php 后端核心服務,監聽端口,接收數據,發送數據
## 1、監聽多端口
~~~
//監聽多端口,監聽支付頁面傳過來的數據
$http = $this->server->listen($this->host, 9999, SWOOLE_SOCK_TCP);
$http->on("request", [$this, 'onRequest']);
public function onRequest($request, $response) {
$data = $request->post;
//協程redis
//將數據存入redis
$redis = new Redis();
$redis->connect('127.0.0.1', 6379);
if ($data) {
foreach ($data as $v) {
$redis->lPush("dy", $v);
}
}
}
~~~
## 2、監聽客戶端連接事件
~~~
//監聽連接打開事件
$this->server->on("open", [$this, 'onOpen']);
public function onOpen($ws, $request) {
echo "connestion open : {$request->fd}".PHP_EOL;
//客戶端首次連接后端,需要將已經購買過的票發送給客戶端,提示已經購買過
$redis = new Redis();
$redis->connect('127.0.0.1', 6379);
$data = $redis->lRange("dy", 0, -1);
if ($data) {
foreach ($ws->connections as $fd) {
$ws->push($fd, json_encode($data));
}
}
}
~~~
## 3、主動發送消息給客戶端
~~~
//監聽WebSocket消息事件
$this->server->on("message", [$this, 'onMessage']);
//付款之后,通知所有人我已經買了這些票了
public function onMessage($ws, $frame) {
if ($frame->data == "success") {
$redis = new Redis();
$redis->connect('127.0.0.1', 6379);
//取出所有購買的數據
$data = $redis->lRange("dy", 0, -1);
//將數據發送給所有客戶端
foreach ($ws->connections as $fd) {
$ws->push($fd, json_encode($data));
}
}
}
~~~