我正在通过 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);
}
有任何想法吗?