�¼��ص�����
���ӣ�
<?php $server = new swoole_websocket_server("0.0.0.0", 9501); //$server = new swoole_websocket_server("0.0.0.0", 9501, SWOOLE_BASE); $server->addlistener('0.0.0.0', 9502, SWOOLE_SOCK_UDP); $server->set(['worker_num' => 4]); function user_handshake(swoole_http_request $request, swoole_http_response $response) { //�Զ������ֹ���û����������ϵͳ���õģ�ֻ֧��version:13�ģ� if (!isset($request->header['sec-websocket-key'])) { //'Bad protocol implementation: it is not RFC6455.' $response->end(); return false; } if (0 === preg_match('#^[+/0-9A-Za-z]{21}[AQgw]==$#', $request->header['sec-websocket-key']) || 16 !== strlen(base64_decode($request->header['sec-websocket-key'])) ) { //Header Sec-WebSocket-Key is illegal; $response->end(); return false; } $key = base64_encode(sha1($request->header['sec-websocket-key'] . '258EAFA5-E914-47DA-95CA-C5AB0DC85B11', true)); $headers = array( 'Upgrade' => 'websocket', 'Connection' => 'Upgrade', 'Sec-WebSocket-Accept' => $key, 'Sec-WebSocket-Version' => '13', 'KeepAlive' => 'off', ); foreach ($headers as $key => $val) { $response->header($key, $val); } $response->status(101); $response->end(); return true; } $server->on('handshake', 'user_handshake'); $server->on('open', function (swoole_websocket_server $_server, swoole_http_request $request) { echo "server#{$_server->worker_pid}: handshake success with fd#{$request->fd}\n"; // var_dump($request); }); $server->on('message', function (swoole_websocket_server $_server, $frame) { var_dump($frame); echo "received ".strlen($frame->data)." bytes\n"; //echo "receive from {$fd}:{$data},opcode:{$opcode},fin:{$fin}\n"; $_server->push($frame->fd, "this is server"); // $_server->close($frame->fd); }); $server->on('close', function ($_server, $fd) { echo "client {$fd} closed\n"; }); $server->on('packet', function ($_server, $data, $client) { echo "#".posix_getpid()."\tPacket {$data}\n"; var_dump($client); }); $server->start();