swoole学习笔记第二季

第一部分定时器写法

swoole_timer_tick函数就相当于setInterval,是持续触发的
swoole_timer_after函数相当于setTimeout,仅在约定的时间触发一次
swoole_timer_tick/swoole_timer_after函数会返回一个整数,表示定时器的ID
可以使用 swoole_timer_clear 清除此定时器,参数为定时器ID 说明客户端断开连接不会影响定时器

<?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";
});




//定时器要写在WorkerStart这个里面哦
$ws->on('WorkerStart', function ($serv, $worker_id){
    //3000ms后执行此函数
    $aaa=swoole_timer_tick(2000, function ($timer_id) {
        echo "tick-2000ms\n";
    });
    echo $aaa.'\n';
   //清除定时器
//    swoole_timer_clear($aaa);
});

$ws->start();

使用迭代器遍历Server所有连接

<?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);
    foreach($ws->connections as $fd)
    {
        $ws->push($request->fd, "hello, welcome1\n");

    }
    //获取连接总数
    echo '获取所有链接数'.count($ws->connections).'\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();



swoole学习笔记第一季

首先swoole是自己开发的web服务器 跟apache和nginx无关

1 首先开启端口 并且监听9502这个端 是否有客户端请求这个端口 ps:这里讲的是websocket 因为方便测试
//创建websocket服务器对象,监听0.0.0.0:9502端口

<!--?php //创建websocket服务器对象,监听0.0.0.0:9502端口 端口号可以自定义哦 $ws = new swoole_websocket_server("0.0.0.0", 9502); //监听WebSocket连接打开事件 $ws-&gt;on('open', function ($ws, $request) {
    var_dump($request-&gt;fd, $request-&gt;get, $request-&gt;server);
    $ws-&gt;push($request-&gt;fd, "hello, welcome\n");
});

//监听WebSocket消息事件
$ws-&gt;on('message', function ($ws, $frame) {
    echo "Message: {$frame-&gt;data}\n";
    $ws-&gt;push($frame-&gt;fd, "server: {$frame-&gt;data}");
});

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

$ws-&gt;start();
&lt;/pre&gt;
&lt;p&gt;然后php 运行这个代码 就开启了端口&lt;br ?-->
netstat -ntlp 查看端口 就有了
tcp        0      0 0.0.0.0:9502                0.0.0.0:*                   LISTEN      10328/php

第二部分 客户端websocket请求


WebSocket Test
<script language="javascript" type="text/javascript">
    var wsUri = "ws://ip:9502";
    var output;

    var ws = new WebSocket(wsUri);
    //请求服务端后 成功后触发
    ws.onopen = function () {
        console.log('open');

        ws.send('hello');

    };

    ws.onmessage = function (evt) {

        console.log(evt.data)

    };
    //我关闭服务的时候 就会触发
    ws.onclose = function (evt) {

        console.log('WebSocketClosed!');

    };

    ws.onerror = function (evt) {

        console.log('WebSocketError!');

    };
</script>

输出结果

 

qq%e6%88%aa%e5%9b%be20161018105001

phpredis函数使用方法详解

phpredis函数文档详解

连接到 redis 服务

<?php
    //连接本地的 Redis 服务
   $redis = new Redis();
   $redis->connect('127.0.0.1', 6379);
   echo "Connection to server sucessfully";
         //查看服务是否运行
   echo "Server is running: " . $redis->ping();

//输出结果
Connection to server sucessfully
Server is running: PONG
?>

Redis set函数

<?php
   //连接本地的 Redis 服务
   $redis = new Redis();
   $redis->connect('127.0.0.1', 6379);
$redis->flushAll();
   echo "Connection to server sucessfully";
   //设置 redis 字符串数据
   $redis->set("tutorial-name", "Redis tutorial");
   // 获取存储的数据并输出
   echo "Stored string in redis:: " . $redis->get("tutorial-name");

  //输出结果
Connection to server sucessfully
Stored string in redis:: Redis tutorial
?>

Redis lpush函数

<?php
//连接本地的 Redis 服务
$redis = new Redis();
$redis->connect('127.0.0.1', 6379);
//每次运行清除redis所有缓存数据
$redis->flushAll();
//存储数据到列表中(可以想象上车  从前门一个个进入 所以先进入的都是排在后面)
$redis->lpush("tutorial-list", "Redis");
$redis->lpush("tutorial-list", "Mongodb");
$redis->lpush("tutorial-list", "Mysql");
$redis->lpush("tutorial-list", "c++");
$redis->lpush("tutorial-list", "php");
// 获取存储的数据并输出
$arList = $redis->lrange("tutorial-list", 0 ,2);

print_r($arList);

//结果 读取了0到2的范围
Array
(
    [0] => php
    [1] => c++
    [2] => Mysql
)

?>

Redis keys函数

<?php
   //连接本地的 Redis 服务
   $redis = new Redis();
   $redis->connect('127.0.0.1', 6379);
$redis->flushAll();
//存储数据到列表中
$redis->lpush("tutorial-list", "Redis");
$redis->lpush("tutorial-list", "Mongodb");
$redis->lpush("tutorial-list", "Mysql");
$redis->lpush("tutorial-list", "c++");
$redis->lpush("tutorial-list", "php");

   // 获取数据并输出
   $arList = $redis->keys("*");
   echo "Stored keys in redis:: ";
   print_r($arList);

  //输出结果 返回了 所有key
 Stored keys in redis:: Array ( [0] => tutorial-list ) 
?>

linux关闭端口的方法

netstat -ntlp 展示当前使用的端口
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 127.0.0.1:6379 0.0.0.0:* LISTEN 2088/redis-server 1
tcp 0 0 127.0.0.1:11211 0.0.0.0:* LISTEN 21474/memcached
tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN 1411/nginx
tcp 0 0 0.0.0.0:21 0.0.0.0:* LISTEN 717/vsftpd
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 924/sshd
tcp 0 0 0.0.0.0:3306 0.0.0.0:* LISTEN 1906/mysqld

PID是进程号 直接关闭进程就可以关闭端口了
kill -9 2088 就关闭了redis端口

linux redis安装教程

linux redis安装教程(nginx和apache都通用)

1、下载源码,解压缩后编译源码。

$ wget http://download.redis.io/releases/redis-2.8.12.tar.gz
$ tar xzf redis-2.8.3.tar.gz
$ cd redis-2.8.3
$ make
$ make install

2、编译完成后,在Src目录下,有四个可执行文件redis-server、redis-benchmark、redis-cli和redis.conf。然后拷贝到一个目录下。 redis.conf 这个一般在redis-2.8.3这个下
ps:如果找不到文件 直接整个目录搜索 一般都在make[1]: Leaving directory `/home/rediss/redis-2.8.0/src’这个下 Leaving directory后面提示的路径

//下面就是拷贝步骤
mkdir /usr/redis
cp redis-server /usr/redis
cp redis-benchmark /usr/redis
cp redis-cli /usr/redis
cp redis.conf /usr/redis
cd /usr/redis

ps:redis.conf requirepass mypassword 这个mypasswordw改成你要设置的密码 不然容易被黑客入侵

禁止一些高危命令
rename-command FLUSHALL “”
rename-command CONFIG “”
rename-command EVAL “”
限制只能本地运行
bind 127.0.0.1

3、启动Redis服务。(同时也开启了端口) 如果要重新服务器只能关闭进程 然后启动就可以

cd /usr/redis

$ redis-server redis.conf & 要运行到后台哦

4、然后用客户端测试一下是否启动成功。

$ redis-cli
redis> set foo bar
OK
redis> get foo
“bar”

这个时候可以关闭终端 因为已经&运行到后台了 当然你重启了服务器也要重新启动redis服务到后台
ps:redis默认端口是6379
netstat -ntlp这个命令可以查看端口状态 看看有没有6379

5 接下来要下载安装phpredis 这样php才能更好的连接redis
1、安装redis

下载:wget https://github.com/phpredis/phpredis/archive/2.2.8.tar.gz ps:phpredis3.0以上需要php7.0以上版本哦

tar zxvf 2.2.8.tar.gz #解压

cd cd phpredis-2.2.8 #进入安装目录

/usr/local/php/bin/phpize #用phpize生成configure配置文件 (ps:这个地方需要看phpinfo 查看php.ini 来确定用的是哪个PHP) 从而确定php目录下的phpize

./configure --with-php-config=/usr/local/php/bin/php-config #配置 (ps:php-config的目录同上方式)

make #编译

make install #安装

安装完成之后,出现下面的安装路径

/usr/local/php/lib/php/extensions/no-debug-non-zts-20090626/

2、配置php支持

vi /usr/local/php/etc/php.ini #编辑配置文件,在最后一行添加以下内容

添加

extension=”redis.so”

:wq! #保存退出

最后重启服务 如果安装了php-fpm 那就要重启php-fpm 因为php归php-fpm管理了

然后查看phpinfo有没有redis 有就是安装成功啦

下面简单的测试下phpredis是否能连接上