belgattitude/pjbserver-tools

PHP Java 桥接服务器工具

4.1.0 2021-04-25 17:32 UTC

This package is auto-updated.

Last update: 2024-08-26 00:35:15 UTC


README

PHP Version PHP Version PHP Version Build Status codecov Scrutinizer Code Quality Latest Stable Version Total Downloads License

当前,`pjbserver-tools` 包提供了一个易于安装的 PHP Java 桥接独立服务器。有关 PHP/Java 集成的更多信息,请参阅 soluble/japhaphp-java-bridge 项目。

注意,`pjbserver-tools` 独立服务器工具是为了方便在开发或测试时使用 composer 安装而制作的。

对于生产环境,构建定制的 PHPJavaBridge 服务器非常简单。请参阅推荐的 php/java/bridge 安装说明

用例

Java 桥接独立服务器可以用作替代常规桥接安装,以简化开发、单元测试或小型项目中的 PHP/Java 集成。

特性

  • 易于设置 PHP Java 桥接独立服务器 (*nix)。
  • 控制服务器(启动/停止/重启/状态)的命令行工具。
  • API 库以自定义行为。
  • 包括编译好的 JavaBridge.jar 7.1.3 文件。

要求

  • PHP 5.5+, 7.0 或 HHVM >= 3.2。
  • Linux/Unix (已报告 Mac OSX 10.1+ 可用)
  • Java 1.7+(请参阅 安装说明)。

安装

警告:phpjavabridge 服务器不应该在面向公众的服务器上运行,其使用应限制在与 PHP 客户端在同一主机/网络上的交互。不要以 root 身份运行它,因为它通过网络公开了 JVM 方法,这可能被远程利用。不要以 root 身份启动它。

根据您的需求,您可以使用 pjserver-tools 两种方式。

  1. 选项 1:Composer 安装

    您可以将 pjbserver-tools 容易地添加到现有的 composer 项目中。

    $ composer require belgattitude/pjbserver-tools

    它也可以添加到您的开发依赖中(在上一条命令中用 require 替换 require --dev)。如果您打算使用 Travis 进行测试,这将非常有帮助...

    测试命令行。

    ./vendor/bin/pjbserver-tools pjbserver:status ./vendor/belgattitude/pjbserver-tools/config/pjbserver.config.php.dist -vvv
  2. 选项 2:控制台,克隆存储库。

    首先在您的文件系统中创建一个路径,用于存储服务器安装。

    $ mkdir -p /my/path/pjbserver-tools
    $ cd /my/path/pjbserver-tools

    克隆存储库并运行 composer update。

    $ git clone https://github.com/belgattitude/pjbserver-tools.git
    $ cd pjbserver-tools
    $ composer update

    测试命令行

    ./bin/pjbserver-tools pjbserver:status ./config/pjbserver.config.php.dist -vvv
    

用法

命令行

命令行取决于您的安装方法(composer 或克隆/下载)。

  • 使用 composer 时,二进制文件的位置为 ./vendor/bin/pjbserver-tools,默认配置位于 ./vendor/belgattitude/pjbserver-tools/config/pjbserver.config.php.dist

  • 使用克隆方法时,二进制文件为 ./bin/pjbserver-tools,默认配置为 ./config/pjbserver.config.php.dist

为了清晰,控制台命令的文档基于克隆方法。在需要时,只需替换您的路径即可。

您可以使用命令 pjbserver:startpjbserver:stoppjbserver:restartpjbserver:status 后跟 pjbserver.config.php 文件来控制或查询服务器状态。

$ ./bin/pjbserver-tools pjbserver:start -vvv ./config/pjbserver.config.php.dist
$ ./bin/pjbserver-tools pjbserver:stop -vvv ./config/pjbserver.config.php.dist
$ ./bin/pjbserver-tools pjbserver:restart -vvv ./config/pjbserver.config.php.dist
$ ./bin/pjbserver-tools pjbserver:status -vvv ./config/pjbserver.config.php.dist

$ # for listing the java cli command issued :
$ ./bin/pjbserver-tools pjbserver:reveal ./config/pjbserver.config.php.dist

如果您使用./config/pjbserver.config.php.dist配置文件,服务器将在端口8089启动。

您可以随意创建此文件的本地副本,并根据自己的需求进行修改。

$ cp ./config/pjbserver.config.php.dist /my/path/pjbserver.config.php

注意,命令行中的-v、-vv、-vvv选项可以定义脚本的详细程度。

通过API进行控制

命令行虽然不错,但API提供了更多的控制能力,特别是在设置单元测试和CI时。

以下是一个简单的示例

<?php

use PjbServer\Tools\StandaloneServer;
use PjbServer\Tools\StandaloneServer\Config;

$tcp_port = 8089;

$config = new Config([
    // Port on which php java bridge server listen (required)
    'port' => $tcp_port,

    /**
     * Location of log and pid files...
     * Defaults is to put them in the project 'pjbserver-tools/var/...' directory
     * which is fine for unit testing, but to prevent loosing those files
     * set a safe directory (not /tmp as it might be cleared by the OS)
     */
    //'log_file'   => "/my/path/var/pjbserver-port${tcp_port}.log",
    //'pid_file'   => "/my/path/var/pjbserver-port${tcp_port}.pid",


    // Optional but often more than useful
    'classpaths'  => [
          '/my/path/*.jar',
          '/another/path/mylib.jar'
    ],

    // Standalone server tuning
    // Number of threads for standalone server is 50, increase if needed
    //'threads'    => 50,

    // Java binary
    // change location if you like, for example
    // /usr/lib/jvm/java-8-oracle/bin/java
    'java_bin' => 'java',

    /**
     * Location of the JavaBridge.jar,
     * Default is to use the default (included) one
     * available in pjbserver-tools/resources/pjb713_standalone/JavaBridge.jar
     */
    //'server_jar' => "/my/path/pjb713_standalone/JavaBridge.jar",
]);

$server = new StandaloneServer($config);

try {
    $server->start();
} catch(\Exception $e) {
    // Exception message
    echo $e->getMessage();
    // Server output logs
    echo $server->getOutput();
    die();
}

echo "Started: " . ($server->isStarted() ? 'yes' : 'no') . PHP_EOL;
echo "Running: " . ($server->isProcessRunning() ? 'yes' : 'no') . PHP_EOL;
echo "Pid    : " . $server->getPid() . PHP_EOL;

// Stopping the server

$server->stop();

您还可以将任何PSR-3兼容的日志记录器注入到StandaloneServer中。

// any PSR-3 compatible logger
$logger = new \Psr\Log\NullLogger();
$server = new StandaloneServer($config, $logger);

配置

分发配置文件./config/pjbserver.config.php.dist包含了在控制台模式下使用的默认参数。

参数

一些考虑因素

  • 在选择端口时,请确保该端口不对外公开(安全性)。
  • 默认配置在./var目录中设置了log_filepid_file,请将默认位置更改为您的数据目录。
  • 避免在全局临时目录'/tmp'中存储log_filepid_file,因为它可能会在任意时刻被操作系统清除。

类路径配置

每次需要添加Java库时,只需编辑配置文件,查找classpaths选项,并添加所需的jar文件。

例如

<?php

return [
    'port'       => 8089,
    'classpaths' => [
        '/my/path/autoload/mysql-connector.jar',
        '/my/autoload_path/*.jar'
    ],
];

不要忘记重启独立服务器以反映更改。

使用通配符**/my/path/*.jar**是可能的,但应谨慎使用。所有匹配的文件将通过shell exec中的参数追加到类路径。存在限制...

调试

一些有用的命令,用于监视、调试并最终终止Java独立服务器进程

获取状态(运行/未运行)

$ ./bin/pjbserver-tools pjbserver:status -vvv ./config/pjbserver.config.php.dist

显示发出的命令

$ ./bin/pjbserver-tools pjbserver:reveal -vvv ./config/pjbserver.config.php.dist

例如,默认配置发出的命令可以是

$ java -cp "/xxx/pjbserver-tools/resources/pjb713_standalone/JavaBridge.jar" -Dphp.java.bridge.daemon="false" -Dphp.java.bridge.threads=50 php.java.bridge.Standalone SERVLET:8089

进程管理

如果由于某种原因服务器无法通过控制台停止,您可以通过命令行查找进程。

$ # Searching by listening port
$ netstat -nlp | grep :<port>   # might require sudo if server started as root

$ # Searching by name
$ ps ax | grep JavaBridge.jar

$ # Searching by custom filter
$ pgrep -f "(.*)java(.*)JavaBridge.jar(.*)SERVLET:8089"

您可以终止进程

$ kill <pid_standalone_server>

常见问题解答

如何在启动时自动运行

在谷歌上搜索“supervisord”,您会找到一些食谱,但首选的方法是在Tomcat上部署,参见

关于pjbserver-tools独立的替代方案。

编码规范