我有以下nodeJS服务器似乎工作正常。我想编写一个客户端,它从服务器接收消息并根据消息调用一些JS。
所涉及的步骤是:
http://server.xyz.com:8080/pa
pa
是收到的api呼叫。pa
操作相关的一些JS。我的问题是:
1. How do I make sure the server broadcasts that message like Step 2?
2. How do I write a client that performs Step 3 above.
对于客户端,我看到很多对socket.io的引用,但我不确定这种情况下最好的框架是什么。
server.js
var http = require('http');
http.createServer(function(request, response) {
request.on('error', function(err) {
console.error(err);
response.statusCode = 400;
response.end();
});
response.on('error', function(err) {
console.error(err);
});
response.writeHead(200, {'Content-Type': 'application/json'});
var body=[];
if (request.method === 'GET' && request.url === '/pa') {
response.end(JSON.stringify({"action": "pa"}));
}
else if (request.method === 'GET' && request.url === '/pi') {
response.end(JSON.stringify({"action": "pi"}));
}
else {
response.statusCode = 404;
response.end();
}
}).listen(8080);
答案 0 :(得分:0)
如果客户端也在Node.js中,那么您应该能够设置webhook / push服务。 Webhooks今天在每个主要API中使用,它们在Slack和Microsoft中非常流行。以下内容受到Microsoft Office 365 push和streaming服务API的启发。
添加客户端可以POST的路由,让我们调用此/subscribe
。在/subscribe
路由的请求正文中,它们包含一个url,我们将其称为paReceiverUrl。
如果客户希望在其他人向/pa
端点发送消息时收到通知,则客户端可以向/subscribe
端点发送请求并包含通知他们的位置 - {{1} }(以及任何其他信息,可能是一些身份验证数据)。您应该将订阅的客户端信息存储在非易失性存储中以确保安全,让数据库为您执行此操作,或者只是将其写入文件,直到它变得更复杂。
现在,您的paReceiverUrl
路线变得更像这样(您的第2步):
'/pa'
现在,对于您的步骤3,客户只需要让他们的服务器接受if (request.method === 'GET' && request.url === '/pa') {
// Send response to the request sender
response.end(JSON.stringify({"action": "pa"}));
// Get subscribed clients' information
var subscribedClients = <Read from file or db>
// Broadcast
for(var i = 0; i < subscribedClientsUrls.length; i++) {
// Send them a request at subscribedClients[i].paReceiverUrl
}
}
的请求,然后他们就可以调用他们想要的任何JS。
如果您需要它更实时,那么我将使用Web套接字协议来设置持久的HTTP连接以流式传输数据。