繁体   English   中英

如何使 REST-API url 通过 Socket.IO 发出数据?

[英]How to make a REST-API url emit data via Socket.IO?

我是 NodeJS/ExpressJS 和 Socket.io 的新手,我的问题可能听起来很有趣。 就我所经历的 REST-API 和 Socket.io 而言,它们有完整的不同应用程序。

但是如果……

我有一个流 API,它从传感器流式传输数据,现在我将数据保存在数据库中,但除了仅将数据保存在数据库中之外,如果我的 API 在特定路由上获得调用,则还将即将到来的数据流式传输到客户端并将其保存到数据库中,当客户端断开连接时,它只是保存到数据库中,当客户端再次建立连接时,旧的看不见的数据被流式传输,流继续在客户端发出数据。

例如:假设我的rest-api的网址为-

  1. http://:/toWatch

  2. http://:/分析

  3. http://:/showLiveSensersData

现在前 2 个 url 有直接的方法来发送响应。

但是在第三个 url 上,我想通过套接字将数据流式传输到客户端。 现在我的问题是,如果该方法可以,并且可以完成,那么如何完成? 那么我看到的是在expressjs的路由文件中无法访问Socket.io实例。

任何建议和解决方案或帮助将不胜感激。

您可以通过请求对象将 io 实例传递给其他路由。 像这样的东西:

app.use(function(req,res,next){ req.io = io; next(); });

然后使用 req.io 在你的路由中引用它。 不确定以这种方式使用它是否有问题,但我之前已经这样做过并且它已经与 express router 一起使用了。

甚至我都在为您以前遇到的相同功能而苦苦挣扎。 我很困惑如何从传感器的URL中获取响应以及如何返回响应,以便可以将其显示为仪表板上的图表。 您能帮我提供示例代码吗? 但在此之前,请在此处检查我的示例代码。 这是Server.js文件。 我想获得链接变量的动态响应,并将其发送到发出事件。

const express = require('express');
const app = express();
const port = 3000;
var url = require('url');
var fs = require('fs');
const server = require('http').createServer();
var link = "http:www.xample.com/usr/api/data/:deviceId";
server.listen(port,function(){
    console.log("Server Listening on port: "+port);
});

const io = require('socket.io')(server);
io.on('connection',function(socket){
setInterval(function(){
    socket.emit('date', 
    {
        'date': new Date().getDate(),
        'hour': new Date().getHours(),
        'minutes': new Date().getMinutes(),
        'seconds': new Date().getSeconds()
    });           
}, 1000);

socket.emit("welcome","Socket Connection is successful!");
});

const iot = require('socket.io-client');
let socket = iot.connect("http://localhost:3000");
socket.on("date",function(data){
    console.log(data);
});

socket.on("welcome",function(data){
    console.log("Connection Status: ", data);
});

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM