chekun/gremlin-php

此包的最新版本(1.0.0)没有可用的许可信息。

php的gremlin-server客户端

1.0.0 2015-07-04 13:13 UTC

This package is not auto-updated.

Last update: 2024-09-18 09:06:39 UTC


README

这是一个PHP的Gremlin服务器客户端。 支持版本:M9-RC3

变更

有很多变更,以下是一些如果您之前使用过rexpro-php可能会注意到的最显著的变更

  • 客户端现在会抛出错误,您需要捕获这些错误
  • 连接参数已更改
  • 消息类已重写,并且与连接独立(请参阅文档了解如何使用此功能)
  • 单元测试需要一些额外的配置
  • 默认情况下无会话运行(rexpro-php 2.3 & 2.4+ 以会话作为默认运行)
  • Gremlin代码更改g.V/E应现在写成g.V()/E()

安装

PHP Gremlin-Server客户端

对于Gremlin-Server 3.0.0-M5+

推荐的方法是通过composer。将以下内容添加到您的composer.json文件中

{
    "repositories": [
        {
            "type": "git",
            "url": "https://github.com/PommeVerte/gremlin-php.git"
        }
    ],
    "require": {
        "brightzone/gremlin-php": "master"
    }
}

如果您只想拉取并使用库,请执行以下操作

git clone https://github.com/PommeVerte/gremlin-php.git
cd gremlin-php
composer install --no-dev # required to set autoload files

命名空间

连接类存在于rexpro命名空间中。(历史:rexpro曾经是Tinkerpop2中驱动程序使用的旧协议)。这意味着您必须执行以下两种操作之一

require_once('vendor/autoload.php');
use \brightzone\rexpro\Connection;

$db = new Connection;

或者

require_once('vendor/autoload.php');

$db = new \brightzone\rexpro\Connection;

示例

您可以通过阅读wiki中的API来找到更多信息。

以下是一些基本用法。

示例 1

$db = new Connection;
//you can set $db->timeout = 0.5; if you wish
$db->open('localhost', 'graph');

$result = $db->send('g.V(2)');
//do something with result
$db->close();

请注意,“graph”是gremlin-server中配置的图的名字(而不是遍历的引用,即g = graph.traversal()

示例 1 bis(使用消息对象编写相同的内容)

$db = new Connection;
//you can set $db->timeout = 0.5; if you wish
$db->open('localhost', 'graph');

$db->message->gremlin = 'g.V(2)';
$result = $db->send(); //automatically fetches the message
//do something with result
$db->close();

示例 2(使用绑定)

$db = new Connection;
$db->open('localhost:8182', 'graph');

$db->message->bindValue('CUSTO_BINDING', 2);
$result = $db->send('g.V(CUSTO_BINDING)'); //mix between Example 1 and 1B
//do something with result
$db->close();

示例 3(使用会话)

$db = new Connection;
$db->open('localhost:8182');
$db->send('cal = 5+5', 'session');
$result = $db->send('cal', 'session'); // result = [10]
//do something with result
$db->close();

示例 4(事务)

$db = new Connection;
$db->open('localhost:8182','graphT');

$db->transactionStart();

$db->send('n.addVertex("name","michael")');
$db->send('n.addVertex("name","john")');

$db->transactionStop(FALSE); //rollback changes. Set to true to commit.
$db->close();

请注意,“graphT”上方指的是支持事务的图。事务会自动开始会话。

示例 5(使用消息对象)

$message = new Messages;
$message->gremlin = 'g.V()';
$message->op = 'eval';
$message->processor = '';
$message->setArguments([
				'language' => 'gremlin-groovy',
				// .... etc
]);
$message->registerSerializer('\brightzone\rexpro\serializers\Json');

$db = new Connection;
$db->open();
$result = $db->send($message);
//do something with result
$db->close();

当然,您也可以通过$db->message以相同的方式影响当前数据库消息。

添加序列化器

此库附带Json和一个未使用的旧Msgpack序列化器。任何实现了SerializerInterface的序列化器都可以通过以下方式动态添加

$db = new Connection;
$serializer = $db->message->getSerializer() ; // returns an instance of the default JSON serializer
echo $serializer->getName(); // JSON
echo $serializer->getMimeType(); // application/json

$db->message->registerSerializer('namespace\to\my\CustomSerializer', TRUE); // sets this as default
$serializer = $db->message->getSerializer(); // returns an instance the CustomSerializer serializer (default)
$serializer = $db->message->getSerializer('application/json'); // returns an instance the JSON serializer

您可以通过这种方式添加多个序列化器。当gremlin-server响应对您的请求时,gremlin-client-php将能够使用适当的一个来反序列化消息。

单元测试

您需要运行以下配置文件来运行gremlin-server:src/tests/gremlin-server-php.yaml

只需将此文件复制到<gremlin-server-root-dir>/conf/,然后使用以下命令运行服务器:

bin/gremlin-server.sh conf/gremlin-server-php.yaml

请注意,如果没有titan09-SNAPSHOT安装和自定义配置,您将无法测试事务。如果您需要更多信息,请开始一个问题。