2

我正在通过 web 服务为一些游戏构建一个框架,由于各种原因需要在没有应用程序容器的情况下运行。

在这一点上,我所追求的是每个玩家都将进行身份验证,并点击登录服务。在所有玩家都登录之前,登录服务不会返回,因此玩家知道一旦他们的呼叫完成,他们就可以开始玩了。

我遇到的问题是,这在没有身份验证的情况下可以正常工作,但是一旦我启用身份验证,第一个玩家就会进行身份验证并正确连接,但是只要第一个玩家正在等待登录服务,第二个玩家就无法连接返回。

服务如下所示:

public void login()
{
    Game game = Game.getInstance();
    while (game.getStatus() != Status.RUNNING)
    {
        try
        {
            Thread.sleep(10);               
        } 
        catch (InterruptedException e)
        {
            // swallow it, doesn't matter
        }
    }
}

客户端看起来像(精简到连接逻辑):

public void clientLogin()
{
    Authenticator.setDefault(new Authenticator()
    {
        @Override
        protected PasswordAuthentication getPasswordAuthentication()
        {
            return new PasswordAuthentication(getUsername(), getPassword());
        }
    });

    QName qName = new QName("http://namespace/", "ChallengeService");
    URL url = new URL(endPoint);
    ChallengeService wsClient = new ChallengeService(url, qName);
    System.out.println("Got Client");
    wsPort = wsClient.getChallengePort();
    wsPort.login();
}

服务器启动:

public void startServer()
{
    server.start();
    endpoint = Endpoint.create(new ChallengeService());
    server = HttpServer.create(new InetSocketAddress(7070), 5);
    context = server.createContext("/Challenge/ChallengeService");
    context.setAuthenticator(new StandaloneAuthenticator("Challenge")); // disabling this works
    endpoint.publish(context);
}

有任何想法吗?

4

0 回答 0