2016-11-28 79 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

相关问题