我正在尝试在我的网站上实现WebSocket。在基础教程之后,我添加了此类:
@ServerEndpoint(value="/websocketendpoint") public class WebSocket { private static Set<Session> peers = Collections.synchronizedSet(new HashSet<Session>()); @OnMessage public String onMessage(String message){ return null; } @OnOpen public void onOpen(Session peer){ peers.add(peer); } @OnClose public void onClose(Session peer){ peers.remove(peer); } }
而这个JS:
var wsUri = "ws://" + document.location.host + document.location.pathname + "websocketendpoint"; var ws = new WebSocket(wsUri); ws.onopen = function(){ ws.send("Message to send"); alert("Message is sent..."); }; ws.onmessage = function (evt){ var received_msg = evt.data; alert("Message is received..."); }; ws.onclose = function(){ alert("Connection is closed..."); };
我将js添加到我的页面之一中,并且仅ws.onclose被调用,在控制台中出现以下错误:
ws.onclose
Firefox:Firefox无法在ws:// localhost:8080 / Mysite / websocketendpoint建立与服务器的连接 Chrome:WebSocket握手期间出错:意外的响应代码:404
Firefox:Firefox无法在ws:// localhost:8080 / Mysite / websocketendpoint建立与服务器的连接
Firefox
Chrome:WebSocket握手期间出错:意外的响应代码:404
Chrome
我尝试使用“ ws://echo.websocket.org”作为wsUri它,并且可以正常工作,所以我想问题出在服务器端。
wsUri
我正在使用以下库: javaee-api-7.0,javax.websocket-api-1.0 我的浏览器与websocket兼容(已检查)
类似的主题对我没有帮助,所以我要求您提出有关如何解决问题的建议
您可能要检查这是否是错误的根源:tomcat 7.0.50 java webscoket实现产生404错误
从7.0.47版本开始,Tomcat具有JSR-356(即websocket API)实现。它还提供了javax.websocket- api-1.0.jar库,因此您的应用程序不需要此库。您可能在编译时需要它,但是服务器会在运行时提供它(provided如果您不熟悉该工具,那么这在Maven中就意味着范围)
javax.websocket- api-1.0.jar
provided
确保javax.websocket- api-1.0.jar未在WAR中部署,在Eclipse服务器视图中右键单击,Clean...然后单击Clean Tomcat work directory...a Publish,然后重试。
Clean...
Clean Tomcat work directory...
Publish