�¼��ص�����
���ӣ�
<?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();