1

在从 2015 perforce 服务器迁移到 2019 时,我遇到了来自 Java API for P4、P4JAVA 的并行登录问题。

在 2019 服务器上,如果多个 IServer 对象(例如server1server2)使用相同的 userId 连接到服务器,则注销 server1(即server1.logout())结束同时登录的所有其他 IServer 对象的会话。

2015 年的服务器不会发生这种情况,并且使用注销的 server1 结束 Seesion 不会导致 server2 的结果相同。

这是 2019 年服务器的预期工作吗?更改任何属性可以恢复 2019 身份验证以类似于 2015 服务器工作吗?我在下面附上了一段代码并输出以供进一步参考

  public static void main(String args[]) throws P4JavaException, URISyntaxException {
    IOptionsServer server1 = null, server2 =null;
    server1 = connectServer(server1,"p4javassl://127.0.0.1:1666");
    server2 = connectServer(server2,"p4javassl://127.0.0.1:1666");
    System.out.println(server1.getLoginStatus());
    System.out.println(server2.getLoginStatus());
    server1.logout();
    System.out.println(server1.getLoginStatus());
    System.out.println(server2.getLoginStatus());
  }
  public static IOptionsServer connectServer(IOptionsServer server,String URL)
      throws P4JavaException, URISyntaxException {
    Properties defaultProps = new Properties();
    defaultProps.put(RpcPropertyDefs.RPC_SOCKET_SO_TIMEOUT_NICK, "90000");
    defaultProps.putAll(System.getProperties());
    server = ServerFactory.getOptionsServer(URL, defaultProps);
    TrustOptions trustOptions = new TrustOptions(true, false, true);
    ((IOptionsServer) server).addTrust(trustOptions);
    server.connect();
    server.setUserName("usr");
    server.login("pass");
    return server;
  }

2019 年服务器的输出

用户超级票在 11 小时 59 分钟后到期。用户超级票在 11 小时 59 分钟后到期。Perforce 密码 (P4PASSWD) 无效或未设置。

Perforce 密码 (P4PASSWD) 无效或未设置。

2015 年服务器的输出

用户超级票在 11 小时 59 分钟后到期。用户超级票在 11 小时 59 分钟后到期。Perforce 密码 (P4PASSWD) 无效或未设置。

用户超级票在 11 小时 59 分钟后到期。

4

1 回答 1

0

所有客户端票据都存储在票据文件 ( P4TICKETS) 中,以用户名和服务器端口为关键字。p4 tickets您可以通过运行命令查看所有票证。

当您执行 ap4 logout时,当前用户/端口的票证将从本地票证文件中删除,需要您p4 login再次从服务器获取它的新副本。由于常规logout不会使服务器上的票证失效,因此只要保留票证副本,您就可以保持“登录”状态;您可以通过拥有多个票证文件来做到这一点,或者只需保存哈希然后恢复它(您也可以传递票证哈希,就P4PASSWD好像它不在票证文件中一样)。

于 2020-05-18T14:14:58.320 回答