gpt4 book ai didi

php - 让客户端与服务器上的进程通信

转载 作者:行者123 更新时间:2023-12-04 16:14:29 26 4
gpt4 key购买 nike

我在服务器上有一个交互式 cli 程序(一个游戏)。我想创建一个与该程序通信的网络应用程序。 proc_open 似乎可以解决问题,但我必须在处理每个请求后关闭该进程。

此过程输出需要发送到客户端,客户端将使用适当的输入进行响应。因为这是一个游戏,这个循环可以持续一段时间。

我的问题是:如何在等待客户端输入的同时保持服务器上的进程运行。

我做了一些研究,我想知道 Ratchet IO (websockets) 是否是最好的方法?

最佳答案

假设您有一个 php 标签,我建议您创建一个可以使用运行 Ratchet wsserver 的命令行运行的 php 脚本。

我可以举一个为 laravel 命令行编写的例子:

class StartServer extends Command {

/**
* The console command name.
*
* @var string
*/
protected $name = 'start:server';

/**
* The console command description.
*
* @var string
*/
protected $description = 'Start WebSocket server';

/**
* Create a new command instance.
*
* @return void
*/
public function __construct()
{
parent::__construct();
}

/**
* Execute the console command.
*
* @return mixed
*/
public function fire()
{
// This variable can be utilized before running the server
$socket_server = new SocketServer();
$server = IoServer::factory(new HttpServer(new WsServer($socket_server)), PORT);
$server->run();
}
}

您的 SocketServer 类将如下所示:
class SocketServer implements MessageComponentInterface
{
public function __construct()
{

}

public function onOpen(ConnectionInterface $conn) {
// New connection handle it, store it if necessary, make sure a session and connection is well mapped. Alternatively you can use Ratchet's SessionProvider
}

public function onMessage(ConnectionInterface $from, $msg) {
// Got message, do something with it
}

/**
* @param \Ratchet\ConnectionInterface $conn
*/
public function onClose(ConnectionInterface $conn) {
echo "Connection {$conn->resourceId} has disconnected\n";
}

/**
* socket Error
* @param \Ratchet\ConnectionInterface $conn
* @param \Exception $e
*/
public function onError(ConnectionInterface $conn, \Exception $e) {
echo "An error has occurred: {$e->getMessage()}\n";
$conn->close();
}
}

关于php - 让客户端与服务器上的进程通信,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25257233/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com