簡體   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