我是游戏框架的新手,我已经创建了一个应用程序来轻松管理帖子和评论。现在作为概念证明,我想实现一个 websocket 来在页面中推送实时评论(添加、更新和删除)。
我的想法是在我的控制器的其余操作中发送更新消息,但是,我不知道什么是最好的方法(akka?)
编辑。目前我将使用 Akka,但我不知道如何设置基本的 POC。
我已经改变了我的 Application.java :
package controllers;
import play.*;
import play.mvc.*;
import views.html.*;
import java.util.*;
import akka.MyWebSocketActor;
import play.libs.F.*;
import play.mvc.WebSocket;
public class Application extends Controller {
public static Result index() {
return ok(index.render("Your new application is ready."));
}
// ///////////////////////////////////////////////////////////////////////////
//
// Socket and Actors definition
//
// ///////////////////////////////////////////////////////////////////////////
public static WebSocket<String> socket() {
return WebSocket.withActor(MyWebSocketActor::props);
}
// ///////////////////////////////////////////////////////////////////////////
//
// Socket and Actors definition
//
// ///////////////////////////////////////////////////////////////////////////
}
我写了一个简单的 MyWebSocketActor.java 为:
package akka;
import akka.actor.*;
public class MyWebSocketActor extends UntypedActor {
public static Props props(ActorRef out) {
return Props.create(MyWebSocketActor.class, out);
}
private final ActorRef out;
public MyWebSocketActor(ActorRef out) {
this.out = out;
}
public void onReceive(Object message) throws Exception {
if (message instanceof String) {
out.tell("I received your message: " + message, self());
}
}
}
不幸的是,我遇到了编译错误:
! @6ipf58l8c - Internal server error, for (GET) [/] ->
play.PlayExceptions$CompilationException: Compilation error[error: cannot find symbol]
at play.PlayReloader$$anon$1$$anonfun$reload$2$$anonfun$apply$14$$anonfun$apply$16.apply(PlayReloader.scala:304) ~[na:na]
at play.PlayReloader$$anon$1$$anonfun$reload$2$$anonfun$apply$14$$anonfun$apply$16.apply(PlayReloader.scala:304) ~[na:na]
at scala.Option.map(Option.scala:145) ~[scala-library-2.10.3.jar:na]
at play.PlayReloader$$anon$1$$anonfun$reload$2$$anonfun$apply$14.apply(PlayReloader.scala:304) ~[na:na]
at play.PlayReloader$$anon$1$$anonfun$reload$2$$anonfun$apply$14.apply(PlayReloader.scala:298) ~[na:na]
at scala.Option.map(Option.scala:145) ~[scala-library-2.10.3.jar:na]
at play.PlayReloader$$anon$1$$anonfun$reload$2.apply(PlayReloader.scala:298) ~[na:na]
at play.PlayReloader$$anon$1$$anonfun$reload$2.apply(PlayReloader.scala:296) ~[na:na]
at scala.util.Either$LeftProjection.map(Either.scala:377) ~[scala-library-2.10.3.jar:na]
at play.PlayReloader$$anon$1.reload(PlayReloader.scala:296) ~[na:na]
at play.core.ReloadableApplication$$anonfun$get$1.apply(ApplicationProvider.scala:104) ~[play_2.10-2.2.3.jar:2.2.3]
at play.core.ReloadableApplication$$anonfun$get$1.apply(ApplicationProvider.scala:102) ~[play_2.10-2.2.3.jar:2.2.3]
at scala.concurrent.impl.Future$PromiseCompletingRunnable.liftedTree1$1(Future.scala:24) ~[scala-library-2.10.3.jar:na]
at scala.concurrent.impl.Future$PromiseCompletingRunnable.run(Future.scala:24) ~[scala-library-2.10.3.jar:na]
at scala.concurrent.forkjoin.ForkJoinTask$AdaptedRunnableAction.exec(ForkJoinTask.java:1361) ~[scala-library-2.10.3.jar:na]
at scala.concurrent.forkjoin.ForkJoinTask.doExec(ForkJoinTask.java:260) ~[scala-library-2.10.3.jar:na]
at scala.concurrent.forkjoin.ForkJoinPool$WorkQueue.runTask(ForkJoinPool.java:1339) ~[scala-library-2.10.3.jar:na]
at scala.concurrent.forkjoin.ForkJoinPool.runWorker(ForkJoinPool.java:1979) ~[scala-library-2.10.3.jar:na]
at scala.concurrent.forkjoin.ForkJoinWorkerThread.run(ForkJoinWorkerThread.java:107) ~[scala-library-2.10.3.jar:na]
这似乎与:
return WebSocket.withActor(MyWebSocketActor::props);
^
在 Application.java 文件中。我错过了什么?