2016-07-15 13 views
0

Ich entwickle ein Zahlungs-Gateway (mit 2-Faktor-Autorisierung, 2FA) mit Knoten/Express für Serverseite und eckige js für Client-Seite.Zahlung Gateway mit socket.io und nodejs

Die Kommunikation vom Client -> Server kann über eine POST Anfrage erfolgen, aber ich möchte die Kommunikation vom Server -> Client über socket.io passieren.

Jetzt für neue Benutzer, die eine Zahlung initiiert, wird eine POST Anfrage vom Client an den Server gesendet, Daten werden verarbeitet und eine Antwort wird zurück gesendet. Aus einem sehr speziellen Grund kann die Antwort nicht als Teil der res in der empfangenen POST Anfrage gesendet werden.

app.post('/receive', function(req,res){ 
    data = req.body 
    res.send('success') 
    // do something with the data 
    // Details regarding 2FA will be sent later via socket.io 
} 

Nach einiger Verarbeitung werden die Daten an den Client 2 Faktor in Bezug auf Genehmigung gesendet werden.

io.on('2fa', {name:name, oneTimePassword:qwerty //and additional details}) 

kann ich den Kanal 2fa von der Client-Seite hören, aber jede Nachricht auf diesen emited werden zu allen Kunden gehen. Ich brauche eine Möglichkeit, eine Nachricht nur an bestimmte Kunden zu senden, die diesen bestimmten Zahlungsprozess einleiten.

Jede Transaktion wird mit ECDH verschlüsselt. Für die Transaktion steht eine UUID zur Verfügung, die den Kunden sowie die Auftragsnummer, für die die Zahlung erfolgt, initiiert.

Schätzen Sie alle Hinweise für die oben genannten.

Antwort

1

Socket.io hat Räume. Wenn Sie möchten, sagen wir, dass nur der Käufer und der Verkäufer über das Authentifizierungsergebnis erfahren, legen Sie sie in einen Raum und senden Sie Ihre Nachrichten an den Raum selbst. Die Clientseite wird nicht geändert. Sie nur socket.emit vom Client zum Server und der Server wird den Client in einen Raum mit allen anderen geeigneten Parteien setzen und die gesamte nachfolgende Kommunikation wird nur an den Raum anstelle des Kanals 2fa emittiert werden.

Dies ist aus einem html5-Multiplayer-Spiel, das ich entwickeln, wenn der Client über ein Spielzimmer verbindet, ist das, was auf der Server Seite passiert:

socket.on('joingame', function(data){ 
    if(livingplayers[data.room] && livingplayers[data.room][data.id]){ 
    socket.emit('joinfail', 'That name is taken'); 
    } else { 
    socket.join(data.room); 
    socket.emit('joingame', data); 
    } 
}); 

So, wie Sie hier sehen können, ich beitreten der Kunde in das Spiel, und ich reagierte vom selben Kanal und ich informierte den Kunden, dass er erfolgreich das Spiel beigetreten ist und auf der Serverseite habe ich den Kunden in den Raum, dem er beigetreten ist. Alle nachfolgenden Aktionen im Spiel werden nur in den Raum gesendet, dem der Client gerade beigetreten ist.

+0

Danke. Werde das am Wochenende überprüfen und wissen lassen, wie es läuft. Nur eine weitere Frage, weißt du etwas über 'Session Management' in Verbindung mit' socket.io'? –

+0

tue ich nicht aber es wäre wirklich enttäuscht wenn man express (das man schon in deiner app benutzt) nicht für session management und socket.io zum managen von echtzeit in verbindung benutzen kann. – ardilgulez

Verwandte Themen