Play框架返回结果后如何执行代码

How execute code after returning result in Play framework

返回结果给客户端后如何执行代码? 示例:

return ok("first");

之后我需要向我的 websocket actor 发送响应

myActor.tell("second",null)

主要目标 - 我需要在发送响应后向套接字发送消息

您不能直接执行此操作,因为 return 语句会结束操作。

如果问题是模板渲染过长,可以先渲染,再发送消息,最后发送pre-rendered结果,喜欢

Result res = ok("first");
myActor.tell("second",null);
return res;

如果仍然不能满足您,您可以使用 Akka 调度程序来安排消息,假设延迟 1 秒。 (查看 Akka 的文档了解详情)

最后,您可以在当前结果中同时发送内容和消息,即将其包装在 JSON object 中,或者将消息添加为响应 header - 当然,如果您在客户端用 JS 处理它。

Action Composition怎么样?

在 Java 中,动作组合 class 可能是这样的:

public class WebSocketAction extends play.mvc.Action.Simple {
    public F.Promise<Result> call(Http.Context ctx) throws Throwable {
        Promise<SimpleResult> call = delegate.call(ctx);
        // Do your websocket stuff here
        return call;
    }
}

然后用 @With(WebSocketAction.class).

注释你的操作方法