用于appengine / Spring和前端之间通信的持久和异步流

时间:2017-10-13 14:40:27

标签: java spring angular sockets google-app-engine

目前我的网站正在使用Spring处理来自前端的http(s)请求,如下所示:

@RestController
public class ComputeController {

    @RequestMapping(value = "/api/compute", method = RequestMethod.POST)
    public String compute(@RequestBody CodeToken code, OAuth2Authentication OAuth2) {
        Map<String, String> userInfo = UserInformation.getUserInfo(OAuth2);

        String sourceCode = code.getSource();
        String filename = code.getFilename();
        String email = userInfo.get("email");

        try {
            DataStorage dateStorage = new DataStorage();
            Compiler compiler = new Compiler(dateStorage);

            return compiler.compile(filename, sourceCode, email);
        } catch (Exception e) { // TODO Don't catch all exceptions
            return e.getStackTrace().toString();
        }
    }
}

问题是我需要我的前端(内置Angular)能够从前端发送的http(s)请求异步接收和发送信息。就像运行“compiler.compile(...)”时服务器中间请求的连续I / O流一样。

我认为我需要使用套接字,但我正在寻找有关实现它们的好方法的建议。

1 个答案:

答案 0 :(得分:1)

如果我理解你的意图正确,你会在代码编译时尝试在客户端显示一些进展。您有两种选择:

  1. 正如您所建议的那样,请使用WebSockets。 Spring很好地支持它们。您可以在此处查看示例:https://github.com/AlexeySoshin/SpringWebSockets/tree/master/src/main/java/com/alexeysoshin/chat
  2. 不是阻止你的回复,
    1. 在单独的线程池上进行编译。
    2. 提交此任务时分配每个编译UUID。
    3. 立即返回客户端此任务。
    4. 使用UUID
    5. 轮询另一个端点