Я разрабатываю платежный шлюз (с 2-мя факторами авторизации, 2FA
) с узлом/экспресс для серверной стороны и угловой js для клиентской стороны.
Связь с клиентом → сервер может выполняться через запрос POST
но я хочу, чтобы связь с сервером → клиент socket.io
через socket.io
.
Теперь для нового пользователя, который инициирует платеж, запрос POST
будет отправлен с клиента на сервер, данные будут обработаны и ответ будет отправлен обратно. По очень определенной причине ответ не может быть отправлен как часть res
в полученном POST
запросе.
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
}
После некоторой обработки данные будут отправлены клиенту в отношении 2-х факторов авторизации.
io.on('2fa', {name:name, oneTimePassword:qwerty //and additional details})
Я могу прослушивать канал 2fa
с клиентской стороны, но каждое сообщение, выпущенное на этом, будет отправлено всем клиентам. Мне нужен способ отправить сообщение только конкретным клиентам, которые инициируют этот конкретный процесс оплаты.
Каждая транзакция будет зашифрована с помощью ECDH. Для транзакции будет доступен UUID, инициирующий клиент, а также номер заказа, для которого выполняется платеж.
Оцените любые рекомендации для вышесказанного.
В номерах Socket.io есть номера. Если вы хотите, скажем, только покупатель и продавец услышать об итогах аутентификации, поместите их в комнату и выпустите свои сообщения в саму комнату. Клиентская сторона не изменится. Вы просто socket.emit от клиента к серверу, и сервер будет помещать клиента в комнату со всеми другими соответствующими сторонами, и вся последующая связь будет выходить только в комнату вместо канала 2fa.
Это из многопользовательской игры html5, которую я разработал, когда клиент присоединяется к игровой комнате, это то, что происходит на стороне сервера:
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);
}
});
Итак, как вы можете видеть здесь, я присоединяюсь к клиенту в игре, и я ответил на тот же канал, и я сообщил клиенту, что он успешно присоединился к игре, и на стороне сервера я положил клиента в комнату, в которую он присоединился. Любые последующие внутриигровые действия будут транслироваться только в комнату, к которой только что присоединился клиент.
session management
в сочетании с использованиемsocket.io
?