由于Netty是一个非阻塞服务器,将操作更改为使用会产生什么影响.async?
def index = Action { ... }
Run Code Online (Sandbox Code Playgroud)
与
def index = Action.async { ... }
Run Code Online (Sandbox Code Playgroud)
我明白,.async你会得到一个Future[SimpleResult].但是既然Netty没有阻止,那么Play会不会做类似的事情呢?
这会对吞吐量/可扩展性产生什么影响?这是一个难以回答的问题,它取决于其他因素吗?
我问的原因是,我有自己的自定义Action,我想重置每个页面请求的cookie超时,所以我这样做是一个async调用:
object MyAction extends ActionBuilder[abc123] {
def invokeBlock[A](request: Request[A], block: (abc123[A]) => Future[SimpleResult]) = {
...
val result: Future[SimpleResult] = block(new abc123(..., result))
result.map(_.withCookies(...))
}
}
Run Code Online (Sandbox Code Playgroud)
从上面的代码片段拿走是我使用的Future[SimpleResult],这类似于调用,Action.async但这是在我的Action内部吗?
我想了解这会对我的应用程序设计产生什么影响.似乎只是为了能够在每个请求的基础上设置我的cookie,我已经从阻塞变为非阻塞.但是我很困惑,因为Netty没有阻塞,也许我真的没有改变现实,因为它已经是异步的?
或者我只是创建了另一个嵌入另一个异步调用?
希望有人能够通过一些细节来阐明这一点,以及这将在性能/吞吐量方面产生的影响.
我有一个控制器,ask在回答之前是一个演员和两个测试用例:
play test第二次测试失败play testOnly ApplicationSpec和play testOnly IntegrationSpec,既成功我认为Akka系统在第一次测试时关闭,第二次测试没有再次启动,但为什么呢?我该如何解决这个问题?
控制器:
object Application extends Controller {
implicit val _ = Timeout(3 seconds)
val gamesManagerRef = Akka.system().actorOf(GamesManager.props)
def index = Authenticated.async { implicit request =>
(gamesManagerRef ? GamesManager.ListWaitingGames).map {
case GamesManager.MultipleOperationOk(games) =>
Ok(views.html.index(GameInformation.getWaitings(request.jedis)))
}
}
}
Run Code Online (Sandbox Code Playgroud)
单元测试:
class ApplicationSpec extends Specification {
"Application" should {
"send 404 on a bad request" in new WithApplication{
route(FakeRequest(GET, "/boum")) must beNone
}
"render the index page" in …Run Code Online (Sandbox Code Playgroud) 我有以下代码
<a href="#example" id="showtext">view text</a>
$("#showtext").click (function () {
$.post('/app/foo/bar/1', function (data){
$("#msg").html(data);
});
$('#example').modal()
});
Run Code Online (Sandbox Code Playgroud)
当view text点击我正在做一个POST请求出去/app/foo/bar/1,并把这些数据在一个div id为#msg.所有这一切都运行正常,但是,现在我希望能够传递不同ids的这个URL,例如:/app/foo/bar/2或者/app/foo/bar/3等等.
有什么好办法来实现这个目标?
我想到的一种方法是将id附加到属性,如下所示:
<a href="#example" id="showtext${id}">view text</a>
Run Code Online (Sandbox Code Playgroud)
然后id使用正则表达式解析jQuery中的jQuery.但是,这种方法看起来很混乱.是否有更优雅的方式来实现这一目标?
我有这个:
<!-- <div class="fieldcontain ${hasErrors(bean: azafataInstance, field: 'localidad', 'error')} required" style="margin-left: 10px">-->
<!--<label for="localidad">Localidad</label> -->
<!--<g:if test="${params?.localidad }">-->
<!--<g:select id="localidad" title="${g.message(code: 'infoPersonal.localidad')}" name="localidad" value="${params?.localidad}" from="${[' ',params.localidad]}" noSelection="${['':message(code:'localidadSelect')]}" onClick="this.style.color='black'" onFocus="this.style.color='black'" style="max-width:168px" />-->
<!--</g:if>-->
<!--<g:else>-->
<!--<g:select id="localidad" title="${g.message(code: 'infoPersonal.localidad')}" name="localidad" value="${params?.localidad}" from="${['']}" noSelection="${['':message(code:'localidadSelect')]}" onClick="this.style.color='black'" onFocus="this.style.color='black'" style="max-width:168px" />-->
<!--</g:else>-->
<!--</div>-->
Run Code Online (Sandbox Code Playgroud)
如你所见......行被评论.我运行该项目,我得到了这个:
URI
/com.publidirecta.azafatas/azafataCertificada/registro_page
Class
org.codehaus.groovy.grails.web.taglib.exceptions.GrailsTagException
Message
Tag [else] cannot have non-whitespace characters directly preceding it.
Around line 95 of grails-app/views/azafataCertificada/registro.gsp
92:<!--<g:if test="${params?.localidad }">-->
93:<!--<g:select id="localidad" title="${g.message(code: 'infoPersonal.localidad')}" name="localidad" value="${params?.localidad}" from="${[' ',params.localidad]}" noSelection="${['':message(code:'localidadSelect')]}" onClick="this.style.color='black'" …Run Code Online (Sandbox Code Playgroud)