2015-04-16 2 views
1

J'essaie de faire une application de chat en utilisant Websockets dans JavaEE en utilisant le serveur Glassfish et Javascript AngularJS pour le côté client. J'utilise Nginx pour proxy les connexions.Websocket utilisant Glassfish + Nginx + Javascript

config Nginx:

location /ws/ { 
     proxy_pass http://10.10.127.78:8080; 
     proxy_http_version 1.1; 
     proxy_set_header Upgrade $http_upgrade; 
     proxy_set_header Connection "upgrade"; 
    } 

Dans la page Glassfish admin, j'activé le mode de prise Web et je me suis assuré que le port est réglé sur 8080.

Le chemin du côté serveur est réglé sur: @ServerEndpoint(value = "/ws/chat/{room}").

OK, maintenant la question est que, j'ai essayé de se connecter à plusieurs adresses et chacun donne quelques problèmes:

  1. essayé de se connecter localhost: var serviceLocation = 'ws://localhost:8080/ws/chat/all/'; ici les résultats de connexion dans un WebSocket connection to 'ws://localhost:8080/ws/chat/all/' failed: Error in connection establishment: net::ERR_CONNECTION_REFUSED

  2. tenté de se connecter au serveur ip: var serviceLocation = 'ws://10.10.127.78:8080/ws/chat/'; il en résulte le délai de connexion WebSocket connection to 'ws://10.10.127.78:8080/ws/chat/all/' failed: Error in connection establishment: net::ERR_CONNECTION_TIMED_OUT

  3. tenté de se connecter au domaine: service var Location = 'ws: //test.domaine.com: 8080/ws/chat /'; il en résulte un résultat négatif. 404 WebSocket connection to 'ws://test.domain.com:8080/ws/chat/all/' failed: Error during WebSocket handshake: Unexpected response code: 404

Impossible de commencer à travailler. Que puis-je essayer ensuite? Ou qu'est-ce que je fais mal? Si vous avez besoin de plus d'informations, laissez un commentaire. Merci, et j'espère que quelqu'un pourra vous aider. J'héberge tous ces environnements sur Jelastic.

MISE À JOUR: code Javascript

var wsocket; 
var serviceLocation = 'ws://localhost:8080/ws/chat/'; 
//var serviceLocation = 'ws://10.10.127.78:8080/ws/chat/'; 
var nickName = $rootScope.loggedUser.user.firstName + " " + 
     $rootScope.loggedUser.user.lastName; 
var room = 'all'; 
var $chatWindow = $('#response'); 


function onMessageReceived(evt) { 
    var msg = JSON.parse(evt.data); 
    var $appendedLine = $('<tr class="hidden-xs"><td>'+msg.received+' | '+msg.sender+'</td><td>'+msg.message+'</td></tr>\n\ 
         <tr class="visible-xs"><td>'+msg.sender+': '+msg.message+'</td></tr>'); 
    $chatWindow.append($appendedLine); 
} 

function sendMessage() { 
    var msg = '{"message":"' + $scope.message + '", "sender":"' 
        + nickName + '", "received":""}'; 
    wsocket.send(msg); 
    $scope.message = ""; 
} 

function connectToChatserver() { 
    console.log(serviceLocation + room); 
    wsocket = new WebSocket(serviceLocation + room); 
    console.log("> ok"); 
    wsocket.onmessage = onMessageReceived; 
    console.log("> connected to Web Socket server"); 
} 


$scope.submitMessage = function() { 
    sendMessage(); 
}; 


connectToChatserver(); 

MISE À JOUR: test local

j'ai essayé de refléter le serveur sur la machine locale et le tester localement sans Nginx et cela a fonctionné. Est-ce que j'ai manqué quelque chose sur Nginx, et cela pourrait être la cause du problème? Vérifié le proxy passer l'adresse IP et le port et ils vérifient.

+0

Il me semble que le premier est le bon. Basé sur les autres erreurs (timeout et un 404, qui est HTTP non trouvé) il semble que la ressource n'est même pas trouvée. Une connexion *** refusée ***, cependant, ressemble à la ressource a été trouvée, mais il y avait une mauvaise configuration qui a entraîné le serveur à rejeter la connexion. Avez-vous essayé d'utiliser quelque chose comme JS Runtime Inspector dans Chrome pour ajouter des points de rupture et déboguer votre Javascript? – Mike

+0

Salut Mike, merci pour le conseil, mais il est venu vide. J'ai mis à jour le post avec le code Javascript complet, peut-être que vous pouvez repérer quelque chose que je n'ai pas fait. – ashcrok

+0

Afin d'exécuter WebSockets correctement, il est nécessaire d'ajouter IP publique à l'instance, je pense que cela devrait vous aider. En outre, avez-vous contacté le support de votre fournisseur d'hébergement? – leo

Répondre

1

Ok, j'ai découvert ce qui n'allait pas et je veux partager. Le problème était le déploiement sur un serveur glassfish 3.1.4 avec jdk 7 à partir d'une build faite sur un glassfish 4.1 avec un serveur jdk 8. Le problème est survenu à cause de la version jdk, mais à cause de la différence de version du serveur, le serveur n'a pas soulevé de problèmes d'exception de version, donc je n'ai pas vu d'où venait le problème (j'ai oublié de construire à partir d'un serveur jdk 8).