【发布时间】:2014-04-08 06:21:25
【问题描述】:
我有 2 个客户端和一个 node.js 服务器 url - localhost:8888/ServerRequest。第一个客户端从该 url 获取并等待 20 秒,以查看第二个客户端是否在 20 秒超时期限内为第一个客户端发布了一些数据。如果第二个客户端在超时之前进行了 POST,则返回该值GET 请求,否则返回 GET 请求的默认值。我不确定实现这一点的最佳方法是什么。我正在尝试这样的事情,但它没有按预期工作 -
function ServerRequest(response, postData , request)
{
var id;
if(request.method == "GET")
{
id= setTimeout(function( )
{
// handle timeout here
console.log("Got a timeout, sending default value");
cmd = "DefaultVal";
response.write("<?xml version=\"1.0\" encoding=\"UTF-8\"?><list id=\"20101001\"><com type=\"" + cmd + "\"></com></list>")
response.end()
},20000);
}
else if(request.method == "POST")
{
console.log("Received POST, sending POSTed value");
cmd = postData;
//Cancel Timeout
clearTimeout(id);
console.log(" \n Received POST")
response.write("<?xml version=\"1.0\" encoding=\"UTF-8\"?><list id=\"20101001\"><com type=\"" + cmd + "\"></com></list>")
response.end()
}
}
我想到的另一种方法是使用 2 个单独的 URL - 一个用于 GET 请求 (/ServerRequest),另一个用于 POST 请求 (/PostData)。但是,如果在超时之前收到,我将如何将 POSTed 数据从一个 URL 传递到另一个?
编辑:我想我现在知道我到底需要什么。我需要实现一个长轮询,客户端发送一个 GET 请求,并等待一个超时时间(数据可能无法立即使用,因此它等待 20 秒让其他客户端为第一个客户端发布一些数据消费)。如果发生超时,则返回默认值以响应来自第一个客户端的 GET 请求。我正在研究我找到的 here 的 longpoll 实现,如果我能够成功完成我正在尝试的事情,我会更新。如果有人能指点我或给我提供一个更好的例子,那将会很有帮助。
【问题讨论】:
标签: node.js post get nonblocking