Grails控制器服务-属性值的src/groovy轮询控制器

Grails控制器服务-属性值的src/groovy轮询控制器,grails,websocket,Grails,Websocket,我基本上是想得到一个任务在覆盖模板中显示给用户的时间百分比 我有一个正在计算进程百分比的服务: def progressCalculation(requestsToSend, requestsSent, requestsFailed, progressPercentage) { progressPercentage = 100 / requestsToSend * (requestsSent + requestsFailed) progressPercentage = Math.

我基本上是想得到一个任务在覆盖模板中显示给用户的时间百分比

我有一个正在计算进程百分比的服务:

def progressCalculation(requestsToSend, requestsSent, requestsFailed, progressPercentage) {

   progressPercentage = 100 / requestsToSend * (requestsSent + requestsFailed)

   progressPercentage = Math.round(progressPercentage * 1) / 1

   MyController upCont = new MyController()
   upCont.progress(progressReport.progressPercentage)
}
这将继续向控制器发送
progressReport.progressPercentage

def progress(progressData) {

    int statusToView = progressData

    if (statusToView % 5==0) {
        [statusToView: statusToView]
    }
}
我在这里创建了一个使用WebSocket的src/groovy文件: 我的连接正在工作,但我需要使用正在工作的websocket在视图上显示百分比

@OnMessage
public String handleMessage(String message) {

    message = MyController.progressPercentage

    String replyMessage = "echo "+message
    return replyMessage
}

现在我要做的是将progressPercentage值从控制器返回到src/groovy文件,这样在任务完成时,我的视图可以不断更新为最新的属性值。

MyController upCont=new MyController()
真的吗

最好将承载和修改
progressPercentage
变量的代码移动到服务层,并使用服务而不是控制器访问它

myService.progressPercentage
而不是
MyController.progressPercentage

另外,您必须注入
myService
,而不是将其实例化为
myService=new myService()
,服务是单例的,您不能这样实例化它们。他们由政府管理

实际上,如果您执行
MyController upCont=newmycontroller()
如果您尝试访问
upCont
的属性,您将收到以下漂亮的错误消息:


java.lang.IllegalStateException:未找到线程绑定请求:您是指实际web请求之外的请求属性,还是在原始接收线程之外处理请求?如果您实际上在web请求中操作,并且仍然收到此消息,那么您的代码可能在DispatcherServlet/DispatcherPortlet之外运行:在这种情况下,请使用RequestContextListener或RequestContextFilter公开当前请求



我把这些说明放在一起,所以如果我能以任何方式帮助你,请告诉我

WebSocket需要和后端一样多的前端工作。因此,要通过websocket获取数据,您需要在java脚本上展开,也需要在后端websocket上展开,将信息发送到java脚本

因此,如果你在前端普惠制上有一个按钮,那不是典型的 你可以看看我的一些插件,它们已经做到了这一点。有一种ping/pong是离散发生的,在这种情况下,如果用户在taglib中定义了websocket连接,则会触发一个pong,前端javascript会接收和发送ping,并且他们会继续这样做

下面是您可能需要使用的另一个示例:

这是从websocket返回的结果

收到时,更新此范围或分区id:

因此,您需要让websocket以某种json格式将其发送回去,前端javascript将接收json请求,如果有某种约定,则在前端查找值并更新div

我在wschat上做了一个很好的视频,显示了使用websocket客户端/服务器更新前端。它可以帮助你更好地理解它

或 不确定是哪一个

E2A:它需要是一种服务:


然后前面的几行在websocket端点中注册这些服务。现在回到代码的历史记录中,或者如果您按照onMessage到verifyAction进行操作,您将需要从前端发送一些内容,或者在建立连接后向前端发送消息。您可以使用userSession直接向进行套接字连接的人发送消息。如上所述,在网页上使用javascript解析json和更新div

MyController仅用于堆栈溢出。我可以按照您的建议进行更改,将进度计算移到服务中,但我仍然存在将该值获取到src/groovy文件的问题,这正是我正在努力解决的问题。thanksYep您需要将其移动到服务中,以便通过src/groovy与之交互。我将在以上回答中添加一些与此评论相关的注释