【发布时间】:2020-07-16 12:19:09
【问题描述】:
有一个question (and comment) 提出了我的确切问题,但从未得到体面的回答。我找不到其他任何地方可以帮助我解决这个非常烦人的问题。
我有这个产品,它位于连接到他们网络的用户家中。当他们在他们的网络之外时,我希望他们能够在世界任何地方通过互联网连接安全地访问所述产品。当我的应用需要数据(仅存储在家里的产品上)时,它会执行以下步骤:
- 应用程序向服务器发送请求,要求其在家中的产品中获取数据
- 服务器获取请求并通过 socket.io 向其产品发送消息
- 产品接收请求并获取数据(存储在本地)并将其返回给服务器(回调)
- 服务器接收到回调发送的数据,返回给用户App。
现在我知道使用 socket.io 你可以在客户端进行回调,但为什么不能在服务器端回调呢?
目前,使用我现在拥有的代码,我收到错误 Callbacks are not supported when broadcasting:
服务器端代码(Nodejs):
app.get('/hueapi/lights', verifyToken, (req,res) => {
const bridgeIDFromApp = req.header('bridgeID');
const socketID = socketRefDic[bridgeIDFromApp]['socketID'];
io.to(socketID).emit('getAllLights', function(data){
res.send(data); // The callback function that shows the data given by the python client
});
});
客户端代码(python):
def getAllLights(data):
lightData = requests.get('http://localhost:4000/lights/')
return lightData
有没有办法解决这个问题,我觉得不支持服务器端回调很愚蠢,还是我做错了什么?
问题是,多个不同的产品将同时连接到该服务器,因此回调是唯一合乎逻辑的方式将数据发送到正确的位置。我见过人们制作自己的回调的解决方案,但我需要它,以便可以一次性执行和发送此代码的多个实例,而不是在不同的发出函数中分解它。
【问题讨论】:
标签: javascript python node.js python-3.x socket.io