WebSocket erreur 404
Je suis en train de mettre en œuvre des WebSocket sur mon site. Suivant des tutoriels, j'ai ajouté cette classe:
@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); }
}
Et ce 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...");
};
J'ai ajouté le js à l'une de mes pages, et seulement ws.onclose
est appelé, dans la console, j'obtiens cette erreur:
Firefox
: Firefox ne peut pas établir une connexion avec le serveur à
ws://localhost:8080/Monsite/websocketendpoint
Chrome
: Erreur lors de WebSocket poignée de main: réponse Inattendue code:
404
J'ai essayé d'utiliser 'ws://echo.websocket.org' comme wsUri
et ça fonctionne, donc je suppose que le problème est du côté serveur.
Je suis en utilisant les bibliothèques suivantes: javaee-api-7.0, javax.websocket-api-1.0
Mes navigateurs sont compatibles avec les websockets (j'ai vérifié)
Des sujets similaires ne m'a pas aidé, donc je m'adresse à vous pour des suggestions sur la façon de résoudre le problème
Mysite
viennent? Est le fichier WAR déployé sous ce nom? Est-il un autre élément du chemin que le serveur utilise pour le WS point de terminaison?Mysite
est le nom de mon projet dans tomcat, je ne suis pas sûr de ce que tu veux dire dans la deuxième question.OriginalL'auteur Alexandru Severin | 2014-07-16
Vous devez vous connecter pour publier un commentaire.
Vous pourriez vouloir vérifier si c'est la racine de votre erreur: tomcat 7.0.50 java webscoket mise en œuvre donne erreur 404
Tomcat a un JSR 356 (c'est à dire l'API websocket) mise en œuvre depuis la version 7.0.47. Il fournit également la
javax.websocket-api-1.0.jar
bibliothèque ce n'est donc pas nécessaire dans l'application. Vous pourriez avoir besoin au moment de la compilation, mais le serveur va les fournir au moment de l'exécution (c'est ce queprovided
champ moyen dans maven si vous n'êtes pas familier avec l'outil)Assurez-vous que
javax.websocket-api-1.0.jar
n'est pas déployé dans votre GUERRE, faire un clic droit dans votre Eclipse vue serveur,Clean...
suivie parClean Tomcat work directory...
puis unPublish
et essayez à nouveau.J'ai le même problème, et le correctif mentionné ci-dessus n'ont pas le fixer. C'est étrange, car il fonctionne sur ma machine locale, mais pas quand je le déployer sur un centos7 serveur. Seule différence entre les deux set ups est ma machine locale utilise tomcat 8.0.23 et le serveur utilise 8.0.36, toute aide serait grandement appréciée
OriginalL'auteur Bogdan
J'ai rencontré ce même problème et l'a résolu en utilisant tomcat7-websocket.jar au lieu de javax.websocket-api.jar. L'utilisation de cette dépendance:
<dépendance org="org.apache.tomcat" name="tomcat7-websocket" rev="7.0.52"/>
ou placer l'tomcat7-websocket.jar dans /usr/share/tomcat7/lib/
OriginalL'auteur Jim
J'ai couru dans le même ensemble de symptômes, qui avait une cause différente, que les gens de l'atterrissage sur cette question pourriez être conscients de. Tout fonctionnait très bien en local, mais a échoué 404 dans tomcat et les mêmes messages d'erreur que cette question lorsque le serveur a été déployé dans AWS. Le problème s'est avéré être que dans AWS mon web socket a été transmise par le biais de Apache httpd avant la fin de la via directives ProxyPass.
Cependant, cela a provoqué la demande d'être transformé en un
http://
demande pas unws://
demande lorsqu'il a été transmise à tomcat.La solution a été d'écrire un plus spécifiques
Location
qui couvre les websocket seulement.OriginalL'auteur Gus
J'ai souffert de ce problème pendant des jours.
J'ai été en utilisant
tomcat7.
j'ai essayé d'ajouter les bocaux à la jvm, mais pas de point.Enfin, j'ai mis à
tomcat8.5
lien ici et a travaillé comme un charme!OriginalL'auteur Waleed Abdalmajeed