2016-03-19 5 views
1

Ich verwende Websocket für die Echtzeitkommunikation für mein mobiles App-Projekt. Ich implementiert grundlegende Sicherheitslogik: mit dem Server zu verbinden, muss der Kunde einen Schlüssel hat,Websocket-basierte App, Sicherheit und gute Praxis in Echtzeit?

-wenn der Client eine Verbindung zum Server sendet er sofort eine JSON-Objekt enthalten Authentifizierungsinformationen

{ 
    action:"auth", 
    device_id: "string", 
    auth_key: "string", 
    user: "string" 
} 

-Der Server antwortet mit einer Session-ID, wenn der Schlüssel korrekt ist, oder die Verbindung abbricht - Davon werden alle vom Client gesendeten Daten ein JSON-Objekt mit dieser Sitzungs-ID sein, so dass der Server alle unbekannten Clients erkennen kann fallen gelassen.

Jetzt ist das große Problem, dass das WebSocket-Protokoll JSON nicht unterstützt, also muss ich JSON.stringify() und JSON.parse() verwenden, um meine Daten zu senden, auch muss ich überprüfen, ob die Sitzungs-ID ist gültig das braucht Zeit und die Anwendung ist nicht mehr glatt (vorher war es).

Zum Beispiel, wenn es Mauszeiger Bewegungen aufzeichnet, werden solche Daten an den Server gesendet werden, wie die Maus bewegt, so dass es Daten in kurzer Zeit sendet, und weil die Logik ich implementiert habe, ist es nicht glatt überhaupt

{ 
    session_id: "string", 
    user: "string" 
    action:"mousemove", 
    position: { 
     x: int, 
     y: int 
    } 
} 

Meine Bedenken sind:

- den Server sichern, so dass niemand es und Befehle senden zugreifen können, ohne Genehmigung.

- Halten Sie es wirklich in Echtzeit

- ein gutes Datenformat (wie JSON wenn möglich)

Antwort

2

wirklich um Ihre Kommunikation sicher zu machen, müssen Sie TLS-Verbindung verwenden. Dinge, die Sie mit den Benutzern tun, Authentifizierung sieht ok aus.

Aber es ist seltsam, dass die Authentifizierungszeit ein Problem für Sie ist, wahrscheinlich müssen Sie Sitzungscache implementieren, um Session-ID-Validierung schneller zu machen.

JSON ist nicht das beste Format für Netzwerkdatenübertragung aus Größenperspektive, aber die WebSocket-Spezifikation legt keine Formate fest, es liegt bei Ihnen, was zu verwenden ist, und JSON ist auch in Ordnung, außer Sie sind wirklich besorgt über Traffic-Einsparungen.

Um die Kommunikation reibungslos zu gestalten, können Sie Daten auf der Clientseite aggregieren und diese Daten beispielsweise einmal pro Sekunde senden. Ich glaube, du brauchst nicht wirklich so viele Mauskoordinaten.

+0

JSON wäre perfekt, wenn ich nicht codieren und decodieren müsste. Allerdings bewegt die Maus Befehle einen Zeiger (roter Punkt) aus der Ferne, so dass eine pro Sekunde sendet, wird sehr schlecht sein, so brauche ich es in Echtzeit – Xsmael

+0

Wie Echtzeit, Mausbewegung Ereignis löst Hunderte Mal pro Sekunde aus, wirklich brauchen so viele Anfragen? –

+0

schauen, was ist, wenn ich eine Linie auf einem Computer zeichnen, und ich möchte die gleiche Linie auf einem Remote-Computer gezeichnet werden, wenn es nicht schnell genug ist, muss der Remote-Benutzer, dafür warten, und das ist unangenehm , schlimmer, fange ich an, andere Dinge zu zeichnen, bevor es fertig ist, auf dem Remote-Computer gerendert zu werden – Xsmael

Verwandte Themen