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

时间:2015-03-28 15:36:33

标签: playframework playframework-2.3

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

return ok("first");

之后我需要向我的websocket演员发送回复

myActor.tell("second",null)

主要目标 - 发送回复后我需要向套接字发送消息

2 个答案:

答案 0 :(得分:1)

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

如果模板的渲染问题太长,您可以先渲染它,然后发送消息,最后发送预渲染的结果,如

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

如果它仍然不能满足你,你可以使用Akka调度程序安排消息,让我们说1秒延迟。 (查看Akka的文件了解详情)

最后,您可以在当前结果中立即发送内容和消息,即将其包装在JSON对象中,或者将消息添加为响应标头 - 当然,如果您在客户端使用JS处理它。 / p>

答案 1 :(得分:1)

Action Composition怎么样?

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

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)注释您的操作方法。