swoole扩展安装
语法高亮
swoole_websocket使用
- 服务器端编码swoole_websocket.php
<?php
ini_set('default_socket_timeout', -1);
define('WORKER_NUM', 2);
// define('WORKER_NUM', 8);
define('DISPATCH_MODE', 2);
define('DAEMONIZE', 0);
class WebsocketTest {
private $server;
private $redis;
public function __construct() {
$this->server = new Swoole\WebSocket\Server("0.0.0.0", 9501);
$this->server->set(
[
//开启woker进程数
'worker_num' => WORKER_NUM,
//请求分发策略,
'dispatch_mode' => DISPATCH_MODE,
//是否守护进程
'daemonize' => DAEMONIZE,
]
);
$this->server->on('open', [$this,"onOpen"]);
$this->server->on('message',[$this,"onMessage"]);
$this->server->on('close', [$this,"onClose"]);
$this->server->on('request', function ($request, $response) {
// 接收http请求从get获取message参数的值,给用户推送
// $this->server->connections 遍历所有websocket连接用户的fd,给所有用户推送
foreach ($this->server->connections as $fd) {
$this->server->push($fd, $request->get['message']);
}
});
$this->server->on('WorkerStart', [$this,'onWorkerStart']);
$this->server->start();
}
/**
*@回调函数风格
*onOpen onWorkerStart
* @param swoole_websocket_server $server
* @param $request
*/
public function onOpen(swoole_websocket_server $server, $request) {
echo "server: handshake success with fd{$request->fd}\n";
}
public function onClose($ser, $fd) {
echo "client {$fd} closed\n";
}
public function onMessage(Swoole\WebSocket\Server $server, $frame) {
$result =["fd"=>$frame->fd,"message"=>"from websocket_server!"];
$result_encode = json_encode($result);
echo "receive from {$frame->fd}:{$frame->data},opcode:{$frame->opcode},fin:{$frame->finish}\n";
$server->push($frame->fd,$result_encode);
}
public function onWorkerStart($serv, $worker_id){
$this ->redis = new Redis();
$this->redis->connect('127.0.0.1', 6379);
$this->redis->auth('root');
if($serv->worker_id == 0){
echo "workerstart ..............".$serv->worker_id;
}else{
echo "workerstart ..............".$serv->worker_id;
// $this->server->tick(5000, [$this, 'onTick']);
}
}
public function onTick(){
foreach ($this->server->connections as $connection) {
$msg = $connection;
$this->server->push($connection, json_encode($msg));
}
}
}
new WebsocketTest();
var websocket = new WebSocket('ws://192.168.56.100:9501');
//发送数据
websocket.send('{"room_id":1}');
//接收数据
websocket.onmessage = function (event) {
console.log(event)
}
//关闭
websocket.close();
网友评论