2016-11-28 133 views
0

我的目標是從我的html文件觸發的文本leftright發送到連接到服務器(我的nodejs服務器文件)的所有客戶端。我嘗試了許多在線解決方案,但我無法理解,其中一些不能正常工作,因爲我不是常規nodejs程序員。通過nodejs中的HTML文件從服務器發送數據

我使用兩個按鈕leftright在html中創建了web應用程序。當我點擊html文件上的左鍵時,我所有連接的客戶端都應該看到文字「左」。我還創建了server.js nodejs文件,它完全與所有客戶端進行通信。問題是我如何獲得html文件和服務器文件之間的通信。

注意:html文件是服務器端觸發點不是client

server.js

var net = require('net'); 

var HOST = '127.0.0.1'; 
var PORT = 8888; 

net.createServer(function (sock) { 
console.log('connected : ' + sock.remoteAddress + ':'+sock.remotePort); 
var ip = sock.remoteAddress.split(':')[3]; 
console.log(ip); 
sock.write('hello client you are connected with server 10.0.0.19...'); 

sock.on('data', function (data) { 
    console.log('DATA '+ sock.remoteAddress+' - '+data); 
    sock.write('you said : '+data); 
}); 

function sendto(result) { //tried call from html file 
    console.log('sent '+result); 
    sock.write('data : '+result); 
} 

sock.on('close', function (data) { 
    console.log('closed'); 
}); 

}).listen(PORT); 

console.log('server running on '+PORT); 

幫我的溝通方式我html fileserver.js,但不能作爲client

回答

0

使用SSE,服務器發送事件從您的服務器向所有連接發送事件。

來自客戶端: 無論何時您點擊左/按鈕,您都會點擊節點的api。點擊時相同的API將向所有客戶端發佈SSE。

在訂戶終端,

var source = new EventSource("/pageTell"); (an API which your server exposes) 

source.onmessage = function(event) { 
    document.getElementById("result").innerHTML += event.data + "<br>"; 
}; 
+0

我很困惑這個'Subscriber End'意味着客戶端的權利,但客戶端代碼是由其他程序員和c#完成的。我不在客戶端工作,我需要用套接字編程向他發送字符串。那個字符串將會從我的html文件中觸發的「左」或「右」。 –

+0

訂戶可以位於雙方。是的,前端開發者/客戶端開發者必須實現訂閱者/聽衆接受消息。 –

0

HTTP,默認情況下,是其並不總是連接一個短暫的請求響應的連接。意思是,服務器發出一個HTML或相關頁面,然後連接斷開。根據您的使用情況,您需要服務器保持連接處於打開狀態,以便可以向所有連接的客戶端通知狀態更改。

對於你的用例,你需要一些像WebSockets(非常整潔地記錄在html5rocks https://www.html5rocks.com/en/tutorials/websockets/basics/)。或者如果您打算支持舊版瀏覽器,請查看socket.io。 Socket IO基本示例應該能夠幫助您實現您的要求

0

爲此使用socket.io。它具有節點模塊以及客戶端庫。 在所有客戶端上實現套接字偵聽器。無論客戶在收聽該事件,都將收到數據。使用套接字io的客戶端JavaScript單擊按鈕時,用事件名稱發出數據。同樣查看這個example

相關問題