[英]How to make a REST-API url emit data via Socket.IO?
我是 NodeJS/ExpressJS 和 Socket.io 的新手,我的問題可能聽起來很有趣。 就我所經歷的 REST-API 和 Socket.io 而言,它們有完整的不同應用程序。
但是如果……
我有一個流 API,它從傳感器流式傳輸數據,現在我將數據保存在數據庫中,但除了僅將數據保存在數據庫中之外,如果我的 API 在特定路由上獲得調用,則還將即將到來的數據流式傳輸到客戶端並將其保存到數據庫中,當客戶端斷開連接時,它只是保存到數據庫中,當客戶端再次建立連接時,舊的看不見的數據被流式傳輸,流繼續在客戶端發出數據。
例如:假設我的rest-api的網址為-
http://:/toWatch
http://:/分析
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.