gpt4 book ai didi

java - 使用 SseEmitter 的 Spring rest 服务

转载 作者:太空宇宙 更新时间:2023-11-03 12:16:01 33 4
gpt4 key购买 nike

当我调用服务器上的 Controller 时,我试图通知一个简单的 html 页面。我有一个调用我的 Controller 的 android 应用程序,完成后我想通知我的网页调用了 Controller 。

这是我的一些代码:

    @RequestMapping("/user") 
public class UserController {

/**
* Returns user by id.
*
* @param user IMEI
* @return
*/
@RequestMapping(value = "/{imei}", method = RequestMethod.GET)
public User getUser(@PathVariable String imei) {

User myUser = null;
try {
myUser = DbConnector.getUserWithImei(imei);
} catch (Exception e) {
System.out.println("Couldn't get user from database");
e.printStackTrace();
}
SseEmitter emitter = new SseEmitter();
try {
emitter.send("Hallokes");
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
emitter.complete();
return myUser;
}
}

我看到的所有教程, Controller 返回 SseEmitter 但我必须返回一个用户。我必须用另一个映射制作另一个 Controller 并监听那个 url 吗?我将如何在现有 Controller 中调用该 Controller 方法?我的 EventSource 必须监听什么 URL?

预先感谢您的帮助!

亲切的问候。

最佳答案

我想你快到了,Allinone51。

您对 SseEmitter.send() 的调用可能应该在 getUser 方法中。一般模式是,当您创建 SseEmitter 时,您需要将它“存储”在某个地方以供其他代码获取它。您正确地从 getSseEmitter 方法返回了 SseEmitter,您只是忘记存储它以便其他方法能够调用它的“发送”。

调整你上面的例子,它可能是这样的:

//...
private SseEmitter emitter;

@RequestMapping(value = "/{imei}", method = RequestMethod.GET)
public User getUser(@PathVariable String imei) {
User myUser = null;

// .. do resolving of myUser (e.g. database etc).

// Send message to "connected" web page:
if (emitter != null) {
emitter.send(myUser.toString()); // Or format otherwise, e.g. JSON.
}

// This return value goes back as a response to your android device
// i.e. the caller of the getUser rest service.
return myUser;
}

@RequestMapping(value = "/sse")
public SseEmitter getSseEmitter() {
emitter = new SseEmitter();
return emitter;
}

当然,上面的代码仅适用于一个连接/发射器。有更智能的方法来存储该发射器。例如,在我的在线游戏应用程序中,我将发射器挂接到每个玩家对象中。这样,每当我的服务器上的播放器对象有东西要告诉播放器设备时,它就可以访问其内部的正确发射器。

关于java - 使用 SseEmitter 的 Spring rest 服务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35504419/

33 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com