belgattitude / pjbserver-tools
PHP Java 桥接服务器工具
Requires
- php: ^7.4 || ^8.0
- psr/log: ^1.0
- symfony/console: ^4.0 || ^5.0
Requires (Dev)
- captainhook/captainhook: ^5.7.0
- captainhook/plugin-composer: ^5.2.4
- composer/composer: ^2.0.12
- friendsofphp/php-cs-fixer: ^v2.18.5
- phpstan/phpstan: ^0.12.83
- phpstan/phpstan-phpunit: ^0.12.18
- phpstan/phpstan-strict-rules: ^0.12.9
- phpunit/phpunit: ^9.5.4
- soluble/japha: ^2.5.0 || ^3.0.0
Suggests
- monolog/monolog: Monolog or other PSR-3 compatible logger
README
当前,`pjbserver-tools` 包提供了一个易于安装的 PHP Java 桥接独立服务器。有关 PHP/Java 集成的更多信息,请参阅 soluble/japha 和 php-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: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:控制台,克隆存储库。
首先在您的文件系统中创建一个路径,用于存储服务器安装。
$ 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:start
、pjbserver:stop
、pjbserver:restart
、pjbserver: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_file
和pid_file
,请将默认位置更改为您的数据目录。 - 避免在全局临时目录'/tmp'中存储
log_file
和pid_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上部署,参见
- pjb-starter-springboot以构建您自己的生产、自容器或可部署servlet,或
- php-java-bridge项目。
关于pjbserver-tools独立的替代方案。