Websocket示例不起作用
我尝试运行这个例子:
import java.util.logging.Level; import java.util.logging.Logger; import javax.websocket.OnClose; import javax.websocket.OnError; import javax.websocket.OnMessage; import javax.websocket.OnOpen; import javax.websocket.Session; import javax.websocket.server.ServerEndpoint; @ServerEndpoint(value = "/chat") public class ChatServer { private static final Logger LOGGER = Logger.getLogger(ChatServer.class.getName()); @OnOpen public void onOpen(Session session) { LOGGER.log(Level.INFO, "New connection with client: {0}", session.getId()); } @OnMessage public String onMessage(String message, Session session) { LOGGER.log(Level.INFO, "New message from Client [{0}]: {1}", new Object[] {session.getId(), message}); return "Server received [" + message + "]"; } @OnClose public void onClose(Session session) { LOGGER.log(Level.INFO, "Close connection for client: {0}", session.getId()); } @OnError public void onError(Throwable exception, Session session) { LOGGER.log(Level.INFO, "Error for client: {0}", session.getId()); } }
我使用Tomcat 7.0.47
,我查看链接: ws://localhost/Tests/chat
。 我是否需要注册此websocket或在web.xml
添加一些内容? 知道为什么不适合我吗?
尝试在Tomcat 7.0.47上使用WebSocket API时遇到了同样的问题。 客户端显示的错误消息根本没有任何帮助,我的服务器端端点从未被创建过。
在浪费了很多时间之后,我发现这是因为我设置了javax.websocket-api
的依赖关系。 我正在使用默认范围为compile
Maven,这会导致问题,因为Tomcat在其lib文件夹中有websocket-api.jar
。 将依赖关系provided
解决。
javax.websocket javax.websocket-api 1.0 provided
希望这可以帮助
值得注意的是,如果在Apache后面运行,则需要mod_proxy_wstunnel
,如果使用IIS,则需要8.0版,因为之前的任何内容都不支持websockets。