tyrus websocket服务器编程端点

tyrus websocket服务器编程端点,websocket,endpoint,tyrus,Websocket,Endpoint,Tyrus,我正在尝试使用tyrus 1.8.2中的编程端点创建websocket服务器。我发现构造器: public Server(String hostName, int port, String contextPath, Map<String,Object> properties, Class<?>... configuration) 公共服务器(字符串主机名, 国际港口, 字符串contextPath, 地图属性, 类…配置) 不接受实现ServerEnd

我正在尝试使用tyrus 1.8.2中的编程端点创建websocket服务器。我发现构造器:

public Server(String hostName,
  int port,
  String contextPath,
  Map<String,Object> properties,
  Class<?>... configuration)
公共服务器(字符串主机名,
国际港口,
字符串contextPath,
地图属性,
类…配置)
不接受实现ServerEndpointConfig的类。当我尝试抛出DeploymentException时,“类XXX不是ServerApplicationConfig子代,也没有@ServerEndpoint注释。”

由于我使用的是编程端点(没有注释),这似乎意味着我必须实现ServerApplicationConfig。这与websocket API文档相反

因此,当我实现ServerApplicationConfig时,我不再得到这个异常,服务器似乎启动时没有问题,但它返回404到我认为有效的连接尝试(正确的主机、端口和上下文路径)

我错过了什么


其他信息:我扩展了TyrusServerEndpointConfigurator,并为modifyHandshake()方法提供了覆盖。服务器返回404而从未调用此方法。

问题原来是Tyrus构造上下文路径的方式混乱。有一个传递给服务器构造函数的路径,以及ServerEndpointConfig getPath()方法返回的路径。这些连接在一起形成完整的上下文路径


因此,如果您在服务器构造函数中指定“/server”,在ServerEndpointConfig.getPath()中指定“/endpoint”,服务器将接受“/server/endpoint”上的连接请求。

我看到您已经回答了自己的问题,但您不正确,Tyrus违反了规范。在部署编程端点时,必须实现ServerApplicationConfig。没有注释的端点也可以。(绝对正确的规范:独立服务器不是规范的一部分,因此Tyrus在本例中可以做任何它想做的事情)。我所指的文档是Tyrus 1.8.2服务器构造函数文档:这完全可以。上下文路径是部署应用程序的位置,端点路径在该应用程序中标识为端点。这与处理servlet部署时完全相同。