您如何在 Play Framework 的 Atmosphere 中将路径路由到 ManagedService

How do you route the path to ManagedService in Atmosphere on Play Framework

我正在使用 Play Framework 中的 atmosphere-play 插件,以及基本的 atmosphere-runtime。参见 https://github.com/Atmosphere/atmosphere-play

我正在尝试使用 ManagedService 注释设置 class,如教程中所述,但无法弄清楚如何通过 Play 路由器文件映射路径,而且一直无法找到其他人这样做过。文档完全跳过了这一步,我在尝试通过 atmosphere 客户端脚本连接到服务器时收到 404 错误。

示例代码:

@ManagedService(path = "/poll")
public class PostPoller {
  ...
}

客户:

var socket = $.atmosphere;
var subSocket;
var transport = 'websocket';

// We are now ready to cut the request
var request = { url: '/poll',
    contentType : "application/json",
    trackMessageLength : true,
    shared : true,
    transport : transport ,
    fallbackTransport: 'long-polling'};

如何在 Play 路由器中设置到 ManagedService 的路由?

万一其他人正在寻找这个,我可以通过将以下内容添加到主应用程序控制器来让它在 Atmosphere-Play 2.3.0 中工作:

import static org.atmosphere.play.AtmosphereCoordinator.instance;

public class Application extends Controller {

    @Inject
    public Application(ApplicationLifecycle lifecycle) {

        // replace PostPoller with the ManagedService class you are using
        instance.discover(PostPoller.class).ready();

        lifecycle.addStopHook(() -> {
            instance().shutdown();
            return CompletableFuture.completedFuture(null);
        });

        ...
    }

    ...
}

https://github.com/Atmosphere/atmosphere-play/issues/39 找到了答案。