我的目标是将从我的html文件触发的文本left
或right
发送到连接到服务器的所有客户端(我的nodejs服务器文件)。我尝试了许多在线解决方案,但我无法理解,其中一些无法正常工作,因为我不是常规的nodejs程序员。
我已在html中创建了带有两个按钮left
和right
的网络应用。当我点击html文件上的左键时,我所有连接的客户端都应该得到文本" left"。我还创建了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 file
与server.js
进行沟通,而不是client
。
答案 0 :(得分:0)
使用SSE,服务器发送事件将服务器中的事件发送到您的所有连接。
来自客户: 每当你点击左/按钮,你就会点击你的NODE的api。命中时,相同的API会将SSE发布给所有客户端。
在Subscriber End中,
var source = new EventSource("/pageTell"); (an API which your server exposes)
source.onmessage = function(event) {
document.getElementById("result").innerHTML += event.data + "<br>";
};
答案 1 :(得分:0)
默认情况下,HTTP是一个短期请求响应连接,并不总是连接。意思是,服务器发送HTML或相关页面,然后断开连接。根据您的用例,您需要服务器保持连接打开,以便可以通知所有连接的客户端状态更改。
对于您的用例,您需要类似WebSockets的东西(在html5rocks https://www.html5rocks.com/en/tutorials/websockets/basics/上非常整齐地记录)。或者,如果您打算支持旧浏览器,请查看socket.io。 Socket IO基本样本应该能够帮助您实现您的要求
答案 2 :(得分:0)