首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >optaplanner护士排班系统中的XML文件可以与前台进行实时交互

optaplanner护士排班系统中的XML文件可以与前台进行实时交互
EN

Stack Overflow用户
提问于 2018-07-16 16:46:11
回答 2查看 138关注 0票数 0

我正在使用你的optaplanner作为医生日程安排系统。

我有个问题要问你:

我使用optaplanner作为后端系统,通过PHP将XML文件传递给optaplanner,并由optaplanner将计算出的XML结果返回给PHP后端系统。现在我想让医生实时看到网页上的变化。我能让它发生吗?它使optaplanner能够实时生成XML文件,而不是生成最终计算的XML文件。

EN

回答 2

Stack Overflow用户

发布于 2018-07-16 21:38:21

是的,这是可能的,但它可能需要您更改一下您的架构。

为了将结果从服务器发送到客户端(用户的浏览器),您需要使用websockets。

Optaplanner有一个SolverEventListener,每当最佳解决方案发生变化时都会调用它。您可以做的是每次在侦听器中调用bestSolutionChanged时通过websocket发送解决方案。出于性能原因,您可能希望websocket发送请求是非阻塞操作,并且解决方案的序列化应该很快发生。您可能还希望包含每个webocket send request/ best bestSolutionChanged调用之间的最短时间,因为在开始时Optaplanner可能会经常找到新的最佳解决方案。

我不知道你是如何在PHP中做到这一点的,但一般来说,对于这种类型的实时应用程序,vert.x非常适合我( optaplanner解决方案的计算是在worker verticle中处理的,新的解决方案通过sockjs eventbus桥通过eventbus发送出去)

票数 2
EN

Stack Overflow用户

发布于 2018-07-19 16:34:11

我主要是像Alex G描述的那样实现它。

因为我们的解决方案可能会变得非常大,所以我只发送了一个websocket事件,告诉它有新的最佳解决方案可用,并让应用程序请求该解决方案,而不是每次找到新的最佳解决方案时都序列化并推送完整的解决方案。

要获取xml:

如果我必须这样做(我更喜欢json,因为它更小,更容易在javascript前端处理),我的方法将是以下步骤:

1)创建SolverEventListener类

代码语言:javascript
复制
class SolverEventListenerImpl implements SolverEventListener<ProblemSolutionClass> {... 

2)在求解器中注册eventListener

代码语言:javascript
复制
solver.addEventListener(new SolverEventListenerImpl());

3)覆盖bestSolutionChanged方法

代码语言:javascript
复制
public void bestSolutionChanged( BestSolutionChangedEvent<ProblemSolutionClass> event) {      
  ProblemSolutionClass solution = event.getNewBestSolution();

4)将其转换为XML -例如,使用Optaplanner中已有的Xstream内容

代码语言:javascript
复制
XStream xStream = new XStream();
xStream.setMode(XStream.ID_REFERENCES);
xStream.processAnnotations(xStreamAnnotatedClasses);
String xml = xstream.toXML(solution);

原来你在这儿啊。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51357868

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档