在Web服务器中推送通知

时间:2018-04-15 07:48:48

标签: java tomcat servlets java-9 http2

我只是一个简单的问题。

是否可以在Web服务器中收到请求后发送推送通知?

  • 例如,用户A向用户B发送消息
  • 用户A的请求转到Web服务器(在本例中为Tomcat)

在收到用户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);
    } 

0 个答案:

没有答案