2013-10-21 15 views
6

Vì vậy, tôi đang sử dụng Ratchet với PHP, và hiện đã tải lên một ví dụ websocket thành công đến máy chủ của tôi.Làm cách nào để giữ máy chủ websocket chạy ngay cả sau khi tôi đóng thiết bị đầu cuối SSH?

Nó hoạt động sau khi tôi truy cập SSH và sau đó chỉ chạy thủ công "php bin/chat-server.php".

Điều tôi đang băn khoăn là, trong một tình huống thương mại, làm cách nào để giữ cho máy chủ trò chuyện hoạt động?

Cảm ơn.

+0

Hướng dẫn này cho thấy một cách thực sự mát mẻ của biến WebSocket vào một dịch vụ * nix để làm cho nó tồn tại ngay cả khi bạn đóng kết nối SSH của mình. http://blog.samuelattard.com/the-tutorial-for-php-websockets-that-i-wish-had-existed/ – MarshallOfSound

Trả lời

6

Tạo một daemon.

Nếu bạn đang sử dụng symfony2, bạn có thể sử dụng 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"; 
} 

Nếu bạn đang sử dụng PHP gốc, không bao giờ sợ hãi, popen là bạn của bạn!

// 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"; 
} 

Có tất nhiên các thư viện PHP hữu ích khác để làm việc với daemon. Googling "php daemon" sẽ cung cấp cho bạn rất nhiều con trỏ.

+0

Nó vẫn không hoạt động sau khi đóng bảng điều khiển. – itsazzad

+0

@mattexx ý của bạn là gì // // trong lệnh khởi động của máy chủ? – SlimenTN

0

Khởi động số điện thoại trong /etc/rc.d/rc cho máy chủ * nix. Điều này sẽ khởi chạy kịch bản PHP của bạn bất cứ khi nào máy chủ khởi động.

Tôi thực sự không biết ngành này hoạt động như thế nào, vì tôi chỉ là một người có sở thích và sinh viên lập trình/linux ngay bây giờ, nhưng đó là tuyến đường tôi sẽ đi trên máy chủ cá nhân.

-1

Tài liệu về ratchet có trang deploy. Bạn đã kiểm tra nó chưa? Bạn có thể sử dụng lệnh screen để mở một thiết bị đầu cuối, khởi chạy trình nền của bạn, sau đó nhấn Ctrl-A, Ctrl- D và thiết bị đầu cuối của bạn vẫn là còn sống, được mở ở chế độ nền. Để kết nối lại với thiết bị đầu cuối này, hãy kết nối lại với máy chủ của bạn và nhập screen -r.

1

Hướng dẫn này cho thấy một cách thực sự tuyệt vời để biến WebSocket thành Dịch vụ * nix để làm cho nó tồn tại ngay cả khi bạn đóng kết nối SSH của mình.

Về cơ bản bạn thực hiện một tập tin /etc/init/socket.conf với các nội dung sau

# 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 

Blog Post:
http://blog.samuelattard.com/the-tutorial-for-php-websockets-that-i-wish-had-existed/

+1

Trong khi liên kết này có thể trả lời câu hỏi, tốt hơn nên bao gồm các phần thiết yếu của câu trả lời ở đây và cung cấp liên kết để tham khảo. Câu trả lời chỉ liên kết có thể trở thành không hợp lệ nếu trang được liên kết thay đổi. –

+1

@ Uchiha câu trả lời đã được cập nhật để bao gồm các nội dung relavent, nhờ chỉ ra rằng ra – MarshallOfSound

+0

Không phải là một câu trả lời xấu - có thể được nhiều hơn một bình luận, nhưng cảm ơn dù sao! : D – think123

Các vấn đề liên quan