我正在尝试使用tyrus 1.8.2的编程端点创建一个websocket服务器。我发现构造函数:
public Server(String hostName,
int port,
String contextPath,
Map<String,Object> properties,
Class<?>... configuration)
不接受实现ServerEndpointConfig的类。当我尝试时,它抛出DeploymentException"Class XXX不是ServerApplicationConfig子代,也没有@ServerEndpoint注释。"
由于我使用的是编程端点(未注释),这似乎意味着我必须实现ServerApplicationConfig。这与websocket API文档相反。
因此,当我实现ServerApplicationConfig时,我不再得到这个异常,服务器似乎启动时没有问题,但它返回404到我认为有效的连接尝试(正确的主机、端口和上下文路径)
我错过了什么?
附加信息:我扩展了TyrusServerEndpointConfigurator,并为modifyHandshake()方法提供了覆盖。服务器返回404,而从未调用过此方法。
问题是Tyrus构建上下文路径的方式混乱。有一个路径传递给Server构造函数,还有一个路径由ServerEndpointConfig getPath()方法返回。这些链接起来形成完整的上下文路径。
因此,如果在server构造函数中指定"/server",在ServerEndpointConfig.getPath()中指定"/endpoint",则服务器将接受"/server/endpoint"上的连接请求。