linux nohup守护进程

 前端js代码

     var wsUrl = "ws://www.whl.com:9501";
    var websocket = new WebSocket(wsUrl);

    //实例对象的onopen属性
    websocket.onopen = function(evt) {
        console.log(11111111);
      websocket.send("hello-sinwa");
      console.log("conected-swoole-success");
    }

    // 实例化 onmessage
    websocket.onmessage = function(evt) {
      console.log("ws-server-return-data:" + evt.data);
    }

    //onclose
    websocket.onclose = function(evt) {
      console.log("close");
    }
    //onerror

    websocket.onerror = function(evt, e) {
      console.log("error:" + evt.data);
    }

后端php 代码

$server = new swoole_websocket_server("0.0.0.0", 9501);

$server->on('open', function (swoole_websocket_server $server, $request) {
    $redis = new \Redis();
    //连接
    $redis->connect('127.0.0.1', 6379);
    $redis->sAdd('all_fd' , $request->fd);
    echo "long-server: handshake success with fd{$request->fd}".PHP_EOL;
});

$server->on('message', function (swoole_websocket_server $server, $frame) {
    echo "long-receive from {$frame->fd}:{$frame->data},opcode:{$frame->opcode},fin:{$frame->finish}".PHP_EOL;
    $redis = new \Redis();
    $redis->connect('127.0.0.1', 6379);
    $all_fd=$redis->sMembers('all_fd');
    foreach ($all_fd as $v){
        $server->push($v, "this is server");
    }

});

$server->on('close', function ($ser, $fd) {
    $redis = new \Redis();
    //连接
    $redis->connect('127.0.0.1', 6379);
    $redis->sRem('all_fd' , $fd); // 移除容器中的TK
    echo "long-client {$fd} closed".PHP_EOL;
});

$server->start();

后台守护进行

nohup php websocket.php >/dev/null 2>&1 &

 查看进程

ps -aux |grep "php websocket.php" 

杀死进程

kill -9 22234 

5. 开机自启

通过前面的步骤,我们知道如何开启和关闭一个php进程,但是,在实际的应用中,我们不可能每次都是手动开启,这样我们就会损失掉一部分业务数据,所以我们必须要让该进程开机自动运行,步骤如下:

在/etc/rc.local文件中,将nohup php websocket.php >/dev/null 2>&1 &这个命令加入即可。

6.当然swoole没这么麻烦。只要在set方法加 'daemonize' => 1即可,这里只是提供参照对比一下是不是能达到同样的效果

猜你喜欢

转载自blog.csdn.net/weixin_41858542/article/details/81241259