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 处理它。
在 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)
.
注释你的操作方法
返回结果给客户端后如何执行代码? 示例:
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 处理它。
在 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)
.