2013-10-21 50 views
6

因此,我正在使用Ratchet和PHP,並且目前已經向我的服務器上傳了一個成功的websocket示例。即使在我關閉SSH終端之後,如何讓websocket服務器仍然運行?

它在我進入SSH後運行,然後手動運行「php bin/chat-server.php」。

我想知道的是,在商業環境中,我該如何保持聊天服務器正常運行?

謝謝。

+0

本教程介紹了打開的WebSocket成* nix的服務的一個非常酷的方式,使之持續即使你關閉你的SSH連接。 http://blog.samuelattard.com/the-tutorial-for-php-websockets-that-i-wish-had-existed/ – MarshallOfSound

回答

6

做一個守護進程。

如果您使用symfony2,則可以使用Process Component

// in your server start command 
$process = new Process('/usr/bin/php bin/chat-server.php'); 
$process->start(); 
sleep(1); 
if ($process->isRunning()) { 
    echo "Server started.\n"; 
} else { 
    echo $process->getErrorOutput(); 
} 

// in your server stop command 
$process = new Process('ps ax | grep bin/chat-server.php'); 
$process->run(); 
$output = $process->getOutput(); 
$lines = preg_split('/\n/', $output); 
// kill everything (there can be multiple processes if they are spawned) 
$stopped = False; 
foreach ($lines as $line) { 
    $ar = preg_split('/\s+/', trim($line)); 
    if (in_array('/usr/bin/php', $ar) 
     and in_array('bin/chat-server.php', $ar)) { 
     $pid = (int) $ar[0]; 
     posix_kill($pid, SIGKILL); 
     $stopped = True; 
    } 
} 
if ($stopped) { 
    echo "Server stopped.\n"; 
} else { 
    echo "Server not found. Are you sure it's running?\n"; 
} 

如果您使用原生PHP,請不要擔心,popen是您的朋友!

// in your server start command 
_ = popen('/usr/bin/php bin/chat-server.php', 'r'); 
echo "Server started.\n"; 

// in your server stop command 
$output = array(); 
exec('ps ax | grep bin/chat-server.php', &$output); 
$lines = preg_split('/\n/', $output); 
// kill everything (there can be multiple processes if they are spawned) 
$stopped = False; 
foreach ($lines as $line) { 
    $ar = preg_split('/\s+/', trim($line)); 
    if (in_array('/usr/bin/php', $ar) 
     and in_array('bin/chat-server.php', $ar)) { 
     $pid = (int) $ar[0]; 
     posix_kill($pid, SIGKILL); 
     $stopped = True; 
    } 
} 
if ($stopped) { 
    echo "Server stopped.\n"; 
} else { 
    echo "Server not found. Are you sure it's running?\n"; 
} 

當然還有其他有用的PHP庫用於處理守護進程。谷歌搜索「PHP守護進程」會給你很多指針。

+0

關閉控制檯後,它仍然無法工作。 – itsazzad

+0

@mattexx你是什麼意思'/ /在你的服務器啓動命令??? – SlimenTN

0

對於* nix服務器,從/etc/rc.d/rc開始。這應該在服務器啓動時啓動您的PHP腳本。

我實際上並不知道這個行業是怎麼做的,因爲我現在只是一個編程/ Linux愛好者和學生,但這就是我將在個人服務器上使用的路線。

-1

棘輪文檔有一個deploy頁面。你檢查過了嗎?

老答案: 它可能是一個督促服務器(這是個人的假設)在一個糟糕的主意,但是你可以使用screen命令打開一個終端,啓動你的守護進程,然後按下Ctrl-A,按Ctrl - D,並且你的終端仍然是alive,在後臺打開。要重新連接到此終端,請連接到您的服務器並鍵入screen -r

1

本教程展示了一種非常酷的將WebSocket轉換爲* nix服務的方式,即使在關閉SSH連接時也能保持它。

基本上你犯了一個文件/etc/init/socket.conf具有以下內容

# Info 
description "Runs the Web Socket" 
author  "Your Name Here" 

# Events 
start on startup 
stop on shutdown 

# Automatically respawn 
respawn 
respawn limit 20 5 

# Run the script! 
# Note, in this example, if your PHP script (the socket) returns 
# the string "ERROR", the daemon will stop itself. 
script 
    [ $(exec /usr/bin/php -f /path/to/socket.php) = 'ERROR' ] && (stop; exit 1;) 
end script 

博客文章:
http://blog.samuelattard.com/the-tutorial-for-php-websockets-that-i-wish-had-existed/

+1

雖然這個鏈接可能回答這個問題,但最好在這裏包含答案的重要部分,並提供供參考的鏈接。如果鏈接頁面更改,則僅鏈接答案可能會失效。 –

+1

@Uchiha答案已經更新,包括相關內容,謝謝指出, – MarshallOfSound

+0

不是一個錯誤的答案 - 可能是更多的評論,但謝謝! :d – think123

相關問題