2016-07-28 72 views
1

Zusammenfassung zu Openshift bereit:Sails.js WebSockets Arbeit in localhost aber nicht funktioniert, nachdem ich

ich auf einem Admin-Panel für eine sails.js basierte Website arbeite. Ich habe websockets konfiguriert, um in meinem localhost zu arbeiten. Aber wenn ich in openshipt bereitstellen, nur die io.socket.on ('connect', ...); feuert. Aber wenn ich einen Eintrag hinzufüge, wird nichts im Client empfangen.


Details:

Zunächst einige Details über meine Konfiguration:

  • Sails.js Version: 0.12.3
  • Node.js Version: v0.10.36 (it Changed Um dies zu openshift Version v0.10.35)
  • Socket-Client: sails.io.js
  • versucht, mit beiden Speichersockel Speicher und redis Buchse zu speichern und das Verhalten ist das gleiche

Aktuelles Verhalten:

Ich versuche, ein Benachrichtigungssystem, um meine Anwendung zu ermöglichen, so verwende ich der Standard sails.io.js um einen Websocket zu verbinden (Unter Verwendung des Standard-io.socket-Objekts), in meinem clientseitigen Code verwende ich console.log() für jetzt, um irgendwelche Ereignisse zu protokollieren. Der Code sieht wie folgt in der Client js-Datei:

$(document).ready(function() { 
    io.sails.environment = "development"; 

    if(window.location.hostname === "localhost") { 
    io.sails.url = 'http://localhost:1337'; 
    } else { 
    io.sails.url = 'http://myapp-username.rhcloud.com:8000'; 
    } 

    var adminSocket = io.socket; 

    // Access socket's connect event to initialize functions 
    adminSocket.on('connect', function() { 
    console.log("Connected to socket"); 
    // Subscribe to admin model of current user 
    adminSocket.get('/admin/subscribeToModel'); 
    }); 

    // Access notification (adminAlerts) model's socket events 
    adminSocket.on('admin', function(event) { 
    console.log(event); 
    }); 

    // Log Errors 
    adminSocket.on('error', function (event) { 
    console.log(event); 
    }); 
}); 

Wie Sie den Code läuft io.socket.get sehen (...) nach der Steckdose verbindet. Dies funktioniert sowohl für localhost als auch für openShift und protokolliert "Connected to socket" und auch die Standardverbindungsnachricht von sails.io.js. Wenn der Server ausgeschaltet wird, versucht der Client, die Verbindung als Standardverhalten wiederherzustellen.

io.socket.get eine Funktion individuelle Steuerung läuft im Admin-Controller:

subscribeToModel: function(req, res, next) { 
    if (!req.isSocket) { 
     console.log("Not Socket"); 
     return res.badRequest(); 
    } 
    console.log("Socket"); 
    Admin.subscribe(req, [req.session.userid]); //Subscribes to Admin model's entry with the user's id 

    return res.json({message: "Subscribed"}); 
    } 

Dieser meldet "Socket" in Sowohl Openshift und localhost aber die Rückmeldung ist nicht verfügbar. Ich weiß nicht, ob subscribe funktioniert oder nicht in openshift, aber es funktioniert sicher in localhost.

Dies ist das Setup. Jetzt habe ich eine Funktion zum Testen des Socket-Verhaltens entwickelt. In Admin-Controller ich erstellt:

createAndBroadcastNotification: function (req, res, next) { 
    AdminAlerts.create({ 
     admin: req.session.admin.id, 
     alertHeader: 'Some Header', 
     alertBody: 'Some Message', 
     alertType: 'label-info', 
     url: '/somepage' 
    }).exec(function (err, alert) { 
     if (err) { 
     res.serverError(err); 
     } 
     Admin.findOne({ where: {id: req.session.admin.id} }).populate('alerts').exec(function (err, admin) { 
       if (err) { 
      res.serverError(err); 
      } 
       Admin.publishAdd(req.session.userid, 'alerts', alert.id); 
       return res.json({message: "Done"}); 
     }); 
    }); 
    } 

Nach dieser Sowohl Openshift und localhost zeigen {Nachricht: Fertig} im Browser und der Datensatz in der mySQL-Datenbank erstellt und zugeordnet wird. Aber nur Localhost postet diese Nachricht in der Konsole als erwartet:

Object {id: 1, verb: "addedTo", attribute: "alerts", addedId: 10} 

Openshift keine solche Meldung angezeigt wird. Es werden auch keine Fehlermeldungen angezeigt.

Ich habe versucht, das Problem für 5 Tage herauszufinden.Ich konnte keinen Hinweis darauf finden, warum dies geschieht.


Ziel:

Ich wünsche die console.log() Nachricht in dem Client bekommen eine Warnung hinzugefügt, um anzuzeigen, zu werden.

Antwort

0

Ich fand es heraus. Für alle, die das gleiche oder ein ähnliches Problem haben, ist die Dokumentation für OpenShift (im Blog) veraltet. Sails.io.js lässt Host und Port "gut" laufen. Es gibt jedoch einen Verbindungsfehler in Firefox zurück. Hier sind die Änderungen:

// client-side-code.js 
$(document).ready(function() { 
    // io.sails.environment = "development"; 

    // if(window.location.hostname === "localhost") { 
    // io.sails.url = 'http://localhost:1337'; 
    // } else { 
    // io.sails.url = 'http://myapp-username.rhcloud.com:8000'; 
    // } 

    var adminSocket = io.socket; 

    // Access socket's connect event to initialize functions 
    adminSocket.on('connect', function() { 
    console.log("Connected to socket"); 
    // Subscribe to admin model of current user 
    adminSocket.get('/admin/subscribeToModel'); 
    }); 

    // Access notification (adminAlerts) model's socket events 
    adminSocket.on('admin', function(event) { 
    console.log(event); 
    }); 

    // Log Errors 
    adminSocket.on('error', function (event) { 
    console.log(event); 
    }); 
});