我在NodeJS服務器端進行編程,我希望在客戶端瀏覽器端調用一個javascript函數。希望我可以隨時在服務器端的客戶端瀏覽器端調用函數,就好像我只是在服務器端調用函數一樣。如何從NodeJS服務器端調用客戶端瀏覽器的javascript函數?
是否有某種形式或彗星或RPC可以做到這一點?
我在NodeJS服務器端進行編程,我希望在客戶端瀏覽器端調用一個javascript函數。希望我可以隨時在服務器端的客戶端瀏覽器端調用函數,就好像我只是在服務器端調用函數一樣。如何從NodeJS服務器端調用客戶端瀏覽器的javascript函數?
是否有某種形式或彗星或RPC可以做到這一點?
我檢出了Socket.IO,但最終使用了Faye。 Faye可能比你想要的功能多一點,但它的設置和使用非常簡單。我發現它比Socket.IO更直觀。並不是說Socket.IO看起來很難,但是Faye看起來更容易。
這裏是網站:
有一個谷歌用戶羣也和筆者已經回答了我的夫妻查詢。
你所需要的是下面的代碼:
節點側:
var faye = require('faye');
var faye_server = new faye.NodeAdapter({mount: '/faye', timeout: 120});
console.log('Firing up faye server. . . ');
faye_server.listen(8089);
//send message out every 1 second
setInterval(function()
{
var currentTime_secsSinceEpoch = new Date().getTime()/1000;
faye_server.getClient().publish('/heartbeat',
{
pageName: 'app.js',
timeMessageSent_secs_since_epoch: currentTime_secsSinceEpoch,
iFrame1CycleCount: iFrame1CycleCount
});
}, 1000);
瀏覽器端:
<script type='text/javascript'>
//create faye client
var faye_client = new Faye.Client('http://127.0.0.1:8089/faye');
var faye_message_subscription = faye_client.subscribe('/heartbeat', function(message)
{
//record the time message was received
var receiveTime_secSinceEpoch = new Date().getTime()/1000;
console.log("Got heartbeat at " + receiveTime_secsSinceEpoch + "with a delay of " +
receiveTime_secsSinceEpoch - message.currentTime_secsSinceEpoch + " secs");
//Do something else important here!!
}
</script>
這就是它!現在,每當您的服務器發送「心跳」消息時,您的網頁都會調用我們指定的功能,並向控制檯吐出一條消息。死簡單。你可能想使用很多其他很酷的功能,但這主要是你想要我想的。
您可以非常輕鬆地將Faye附加到節點中的快速服務器,這使得它可以很好地與Web服務器一起工作。
我可能會用Faye。 – Phil
Socket.IO將允許您建立node.js和前端JS之間的持久通信。
您可以發出消息並訂閱來自雙方的任何其他消息。由於它是雙向通信,你不需要任何請求/響應的東西,只是從任何一方發出,它會通過回調在另一端緩存。
您將不得不使用Socket.IO來形成網絡套接字連接,該連接允許在完成一次初始連接後將數據從任何一方發送到另一端。如果用戶的瀏覽器中不允許使用web-socket,則Socket.IO會使用許多回退方法。
因此,您可以在客戶端代碼中添加一個事件綁定器,它將響應從nodejs服務器端發送的任何數據,因此您可以從服務器本身執行客戶端功能。
但是,如果您尋找的東西,你在客戶端定義一個函數,你可以直接從nodejs調用它,比你錯了。儘管它們都是javascript,但它們在執行方面完全不同。 NodeJs是在服務器端的JavaScript,而不是一次。 但仍然如上所述,您可以使用Socket.IO和事件綁定執行客戶端函數。
使用socket.io從客戶端偵聽的服務器(本例中爲「for_client」)發出事件併爲客戶端事件(本例中爲「for_server」)設置偵聽器。可以有任意數量的事件,並且可以有一個可用於調用方法的回調函數。
var io = require('socket.io').listen(80);
io.sockets.on('connection', function (socket) {
socket.emit('for_client', { someData: 'if necessary' });
socket.on('for_server', function(data) {
doSomethingServerSide(data);
});
});
function doSomethingServerSide(data){ console.log(data); }
在客戶端
<script src="/socket.io/socket.io.js"></script>
<script>
var socket = io.connect('http://localhost');
socket.on('for_client', function (data) {
console.log(data);
socket.emit('for_server', { data: 'data' });
});
</script>
您正在尋找Socket.io。 – SLaks