您好,我正在使用Ionic框架并表示要在我的应用程序,服务器API和JavaScript游戏之间进行通讯。游戏使用XMLHttpRequest将一些信息发送到API并发布,而我的应用程序使用Angular / http中的Http检索了这些信息。
发布部分运行良好,我能够将信息发送到服务器,但是我在get部分方面苦苦挣扎。每次刷新页面时都会调用get方法,但是此时游戏尚未发送数据,并且每次调用时都不会再次调用get方法,因此我从服务器上从未获取数据。>
游戏发送这样的信息:
function sendFriendToInvite(friend, callback) {
var req = new XMLHttpRequest();
req.open('POST', 'http://localhost:3001/sendInvite');
req.setRequestHeader('Content-Type', 'application/json');
req.send(JSON.stringify({friend: friend}));
req.addEventListener('load', () => {
console.log(req.responseText);
var results = JSON.parse(req.responseText);
//if(results.error) return console.log(results.error);
if(callback) callback(results);
});
req.addEventListener('error', (e) => {
console.log('an error occured');
console.log(e);
});
}
服务器的get和post方法是:
var friendToInvite;
/**Send from the game**/
api.post('/sendInvite', function(req, res) {
console.log("posts! " + req.body.friend);
friendToInvite = req.body.friend;
res.send({message: 'friend reçu'})
});
/**retrive by the application **/
api.get('/sendInvite', function(req, res) {
console.log("get friend to invite");
//here I need friendToInvite be initialised by the post method before sending the response
res.json({friend: friendToInvite});
});
应用程序获取这样的信息:
this.http.get('http://localhost:3001/sendInvite').pipe(
map(res => res.json())
).subscribe(response => {
console.log('GET Response:', response);
});
我希望应用程序在游戏发送数据时检索数据。
答案 0 :(得分:0)
我认为您应该使用套接字在服务器和您的应用之间进行通信。
另一个更简单,效率更低的选项可能是在间隔函数中执行GET,因此您可以每隔X秒(例如,说1分钟)调用一次服务器来更新数据。这意味着您的应用程序一直在调用服务器,因此我强烈不建议这样做。
编辑:
我建议使用套接字,因为我偶尔使用此方法在服务器和应用程序之间进行通信,但是如果您只需要从服务器到应用程序的通信而反之亦然,则使用推送通知也是一个不错的选择。