从服务器端调用客户端函数

时间:2019-10-10 06:41:07

标签: node.js

我无法从服务器端调用客户端功能。我当前在服务器端使用文件监视程序。我想发生的是,当文件被更改时,它将触发一个客户端功能。

来自服务器端的代码

const fs = require( `fs` ),
           filewatcher = require('filewatcher');

watcher = filewatcher();
watcher.add(messageBox);
watcher.on('change', function(folder, stat) {
           callThisFunction();
});

客户端

中的代码
function callThisFunction() {
           //insert code here
}

2 个答案:

答案 0 :(得分:0)

实际的代码看起来并不像您从后端调用callThisFunction,而是查找https://socket.io/docs/会有所帮助。

您应该做的是在前端创建一个套接字和该套接字的侦听器。触发该套接字后,您就可以在客户端中运行任何内容。

不良做法: 除了使用套接字,您还可以每秒(setInterval(sendRequest, 1000))向服务器发送一个请求,该请求检查后端是否有更新,并且您将以类似{ response: { data: { fireThisFunction: true } } }的方式进行响应。 我只是提供此解决方案,因为它速度更快,您可能会发现甚至不需要从后端启动功能。

答案 1 :(得分:0)

您可以使用WebSocket将更改从服务器传递到客户端,有效地使用此方法可以在客户端上调用函数。

在本地运行服务器,然后在浏览器中打开index.html。

server.js

const WebSocketServer = require("websocket").server;
const http = require("http");
const filewatcher = require("filewatcher");

const server = http.createServer((request, response) => {
});

server.listen(8080, function() {
    console.log("Server is listening on port 8080");
});

webSocketServer = new WebSocketServer({
    httpServer: server,
    autoAcceptConnections: false
});

let webConn = null;
webSocketServer.on("request", function(request) {
    console.log("New Connection...");
    const connection = request.accept("some-protocol", request.origin);
    webConn = connection;
    connection.on("message", function(message) {
        if (message.type === "utf8") {
            console.log("New Message from client:" + message.utf8Data);
        }
    });
});

// Start watching directory..
const watcher = filewatcher();

watcher.add("./watch_dir");
watcher.on("change", function(folder, stat) {
    console.log("file change:", folder, stat);
    if (webConn) {
        webConn.sendUTF(JSON.stringify({ folder, stat}));
    }
});

index.html

<html lang="en">
<meta charset="utf-8">
<head>
    <title>Websocket demo</title>
    <script>
        console.log("Sending hello..")
        const webSocket = new WebSocket("ws://localhost:8080/", "some-protocol");
        webSocket.onopen = function (event) {
            webSocket.send("Ping from client.."); 
        };

        webSocket.onmessage = function (event) {
            console.log("Message from server:", event.data);
            callThisFunction(event.data);
        }

        function callThisFunction(data) {
            document.getElementById("output").innerHTML += "<br><li>Message from server:" + (data) + "</li>";
        }

    </script>
</head>
<body>
    <div>
        <ul id="output">
        </ul>
    </div>
</body>
</html>