我只是一个简单的问题。
是否可以在Web服务器中收到请求后发送推送通知?
在收到用户A的请求后,服务器向APN发送请求,向用户B发送通知(之前已检索到用户B的令牌)。
当用户A向Web服务器发送请求时,我正在尝试使用jdk9.incubator.http向doPost()方法中的用户B设备发送推送通知。
我的课程扩展了HttpServlet
public class AuthenticationController extends HttpServlet
尝试在验证用户身份时发送推送通知
@SuppressWarnings("exports")
public void doPost(HttpServletRequest req, HttpServletResponse resp) {
try {
LOGGER.debug("POST requested from a client");
Authenticate(req, resp);
sendNotification();
} catch (Exception e) {
LOGGER.error("Oops",e);
}
}
请给我建议正确地做到这一点。
编辑:
我了解到在HttpServlet中刷新响应后套接字关闭了,所以我尝试在刷新响应之前发送另一个请求来发送通知。
private void sendResponse(
HttpServletResponse resp, Gson gson ,Object obj) throws IOException, NoSuchAlgorithmException {
sendTestRequest()
resp.getOutputStream().print(gson.toJson(obj));
resp.getOutputStream().flush();
}//sendResponse()
我在我工作的另一个项目的主线程中测试了JDK9.incubator,它运行得很漂亮;但是,我不能以某种方式让它在我的tomcat服务器环境中工作。
当我尝试发送一个简单的请求来测试jdk9.incubator.request时,没有任何反应。 sendTestRequest()方法只是发出一个http请求。示例可以显示为http://grepcode.com/file/repository.grepcode.com/java/root/jdk/openjdk/8u40-b25/java/util/concurrent/ConcurrentHashMap.java/。
下面的代码段是我的http / 2请求的示例
final HttpRequest request = setHttpRequest(notification);
NotificationResponse resp = new NotificationResponse(null);
try {
HttpResponse<String> response =
getHttpClient().send(request, BodyHandler.asString());
resp.setResult(response.statusCode(), response.body());
if (resp.isAccepted()) {
System.out.println("Push Notification was accepted by APNs");
} else {
System.out.println("Request rejected reason: " + resp.getFailureReason());
}
} catch (IOException | InterruptedException e) {
System.out.println("Exception was thrown; check the log");
LOGGER.fatal("Failed to send request synchronously", e);
}