1. 程式人生 > >linux nohup守護程序

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即可,這裡只是提供參照對比一下是不是能達到同樣的效果