等待事件在Node.js进程

时间:2017-02-06 10:19:50

标签: javascript node.js sockets authentication xmpp

首先,我很清楚Node.js在其他任何事情之前是非阻塞的,但在这个非常具体的情况下,它必须阻塞并在这里等待。

我有一个以这种方式工作的身份验证过程(使用API​​,我没有设计这个,所以我无法修改auth的工作方式):

我向REST API发送PUT请求,我得到一个HTTPResponse代码,用于确定API是否理解该请求。

我刚刚通过其API请求的服务器通过XMPP协议发送完整的响应(包括错误代码等)。

这意味着,当我发送请求时,我无法知道接下来发生了什么,并且必须等待XMPP事件触发(基本上是on(" message",callback)事件)。

我想知道如何使用Node.js。

还有两件事要知道:

1)我正在研究客户端/服务器架构,我的Node.js服务器正在执行此身份验证过程,并通过websocket向客户端发送响应并等待套接字应答。问题(不是我的电话,但我的老板希望这个过程一次完成)。

2)不能使用客户端套接字,并且必须出于各种原因通过完整的Node.js进程。

非常感谢您的帮助! \ O /

3 个答案:

答案 0 :(得分:0)

我不太了解XMPP,但这只是"将依赖逻辑置于回调中#34;

class CustomerSerializer(serializers.ModelSerializer):

    latest_event_name = serializers.ReadOnlyField()

    class Meta:
        model = Customer
        fields = '__all__'

答案 1 :(得分:0)

在你的情况下,我将继续进行事件emitter(或任何以发布订阅方式)。

触发您的http调用并在处理程序内添加一个发射器侦听器,并检查事件是否用于相应的身份验证。 同时你的xmpp连接一旦收到授权就会发出一条消息。 侦听器将成功接收消息,并将使用http调用的回调。

答案 2 :(得分:0)

很抱歉以前没有回答,我们在工作时遇到了严重的硬件故障。 无论如何,我没有直接回答你的一条评论,因为我找到了一个我更喜欢的解决方案,即使我感谢你的帮助。我决定使用一个承诺并等待它的答案,以确保得到适当的回应。

以下是代码:

var answer = await new Promise((accept, reject) => {

    // If there are no stanza in 30 seconds, then the process failed or the stanza got missed.

    setTimeout(() => {

        reject("timed out");

    }, (30 * 1000));

    // Waiting for the xmpp event to trigger.

    xmpp.on("stanza", function(stanza) {

        // Processing of the received stanza goes here.

    });

});

@gkatzioura解决方案很有意思,但看起来带宽有点沉重,我们正在开发大型应用程序,或者我可能没有完全理解它,那么这是我的错误。

@pspi解决方案也很有趣,但考虑到XMPP事件监听器在请求中,这将是一个问题,并且PUT请求需要在其end()事件上发送一个正文,在这里它不会真正起作用我想要做。我认为那是因为我发的原帖有点不清楚。

非常感谢你的帮助! :