websocket的等效404

时间:2016-06-01 11:37:23

标签: java-websocket jsr356

我正在使用websockets将有关资源的信息从服务器传递到客户端。 websocket Endpoint使用pathparam来标识特定资源。例如:

@ServerEndpoint("/resources/{resource-id}/updates")

Endpoint类在其onOpen方法中具有以下逻辑:

@OnOpen
public void onOpen(@PathParam("resource-id")int resourceId, Session session) throws IOException {
     boolean resourceExists = checkIfResourceExists(resourceId);
     if (!resourceExists) {
         // what should I do here?
     }
}

使用AJAX长轮询时,如果资源不存在,我会发送404响应。然后客户知道不要再试一次。是否有用于websockets的等效技术?我的两个想法是:

  1. 在上面的if (!resourceExists)块中使用以下代码:

    session.close(new CloseReason(CUSTOM_NOT_FOUND_CODE, "Resource ID not found")); return;

    CUSTOM_NOT_FOUND_CODE是4000-4999范围内的CloseCode。

  2. 在此端点的ServerEndpointConfig.Configurator实现中的某处执行此逻辑,并在连接升级发生之前返回404。这听起来对我来说是最好的方法,但似乎没有办法从modifyHandshake方法发送标准的HTTP错误响应。

  3. 在过滤器中执行此逻辑。但问题是,如果我在过滤器中加载资源,如何将其传递给端点?使用HTTP请求,我可以在过滤器中添加一个请求属性,然后在servlet中可用。但似乎没有一种简单的方法来实现与websockets相同的东西。当然,我可以在Endpoint类中再次加载资源,但这是重复工作。

  4. 我确信这必须是一个常见的场景,所以这里有一种公认的最佳实践方法吗?

0 个答案:

没有答案