編輯:我通過網絡套接字將數據從應用程序A發送到應用程序B,其中A是其他應用程序的路由器應用程序,B是我的網路應用程式當B收到數據時,它應該將其發送給任何查看其主頁的客戶端,也通過web套接字。但是,由於roter應用程序和主頁客戶端連接到同一個web套接字服務器,我不知道哪些連接是查看主頁的客戶端,以及哪些連接是其他東西,比如我的路由器。只有主頁客戶端才能接收數據。NodeJS和網絡套接字:檢查套接字來源是否與網絡套接字服務器相同
我基本上想要將從我的路由器收到的日誌數據實時傳遞到我的主頁,以便我可以查看它。
========
我有一個明確的應用程序,服務器簡單的HTML頁面。它運行此腳本:
var host = window.document.location.host.replace(/:.*/, '');
var ws = new WebSocket('ws://' + host + ':5000');
ws.onmessage = function (event) {
console.log(JSON.parse(event.data));
};
在後端的NodeJS,我有一個簡單ws服務器上運行,監聽連接:
var WebSocketServer = require("ws").Server;
module.exports.init = function(server) {
var wss = new WebSocketServer({ server: server });
wss.on('connection', function (ws) {
...
});
};
我得到,此刻,2個不同地點連接。
- 我運行的一個路由器應用正在發送此Web應用日誌消息。
- 此Web應用程序正在提供的HTML頁面。
我想從路由器應用程序的數據管道到我的html頁面,但要做到這一點,我需要知道我需要哪些連接管道數據。理論上我可以有很多聯繫,但是至少在現在,只有其中的一個應該在接收後傳遞數據。
我想我可以將Web套接字連接的起源與Web套接字服務器運行的Web服務器的域進行比較。
我可以得到這樣的連接的起源:ws.upgradeReq.headers.origin
。這將返回例如:localhost:5000
。但我不知道我的網絡套接字服務器運行的域名。我試圖谷歌,它似乎要獲得域名,我需要從http請求中獲取它。我正在尋找的東西只是給了我名字,而不必等待http請求。
我試過os.hostname()
,但它不會給我我需要的結果。 我也試過server.address()
,其中server
是var server = require("http").createServer(app);
,但是這給了我這個:{ address: '::', family: 'IPv6', port: 5000 }
。
是不是隻有一種方法來獲得主機和端口?我能以某種方式使用上面的address
部分獲取主機名嗎?
網絡應用程序可能會在Heroku上運行。
我不是在追蹤你想要做的事情。我認爲你需要備份並描述高層次的問題,而不是你想要追求的解決方案。我得到你有一個nodejs服務器和一個假設服務於網頁的路由器。我知道你在那個nodejs進程中有一個webSocketServer,可能是在不同的端口上。我不明白你想要發送什麼數據。數據來自哪裏,你要把它發送到哪裏? – jfriend00
我加了編輯,試圖澄清。 – ptf