我想回答有关新的javascript、react、react-native和node的问题。那么,我如何知道用户在这些领域提出的新问题呢?
我想回答有关新的javascript、react、react-native和node的问题。那么,我如何知道用户在这些领域提出的新问题呢?
打开一个Websocket连接到wss://qa.sockets.stackexchange.com/
,然后发送消息1-questions-newest-tag-TAG
,其中TAG
是您想要关注的标签。当发布新问题时,您将收到带有问题ID的消息。
问题数据需要单独检索(截至SE的2021/2022冬季重新设计)。一种方法是像/newest
页面上的SE一样,使用问题ID POST到/posts/ajax-load-realtime-list/
,它将响应问题摘要。(不幸的是,由于跨源限制,这种方法无法嵌入到实时Stack Snippet中)
在Stack Overflow上打开一个空白页面,例如this one,然后将以下内容粘贴到控制台中,您将看到随着其发布而出现的新问题:
const socket = new WebSocket('wss://qa.sockets.stackexchange.com/');
socket.onopen = () => {
socket.send('1-questions-newest-tag-javascript');
socket.send('1-questions-newest-tag-java');
socket.send('1-questions-newest-tag-python');
socket.send('1-questions-newest-tag-php');
console.log('Listening...');
};
const seenQuestions = new Set();
socket.onmessage = ({ data }) => {
const obj = JSON.parse(data);
if (obj.action === 'hb') {
socket.send('pong');
return;
}
const { id, body } = JSON.parse(obj.data);
if (seenQuestions.has(id)) {
// Duplicate question, a message for it has already been handled:
return;
}
seenQuestions.add(id);
console.log('New question:', id);
insertQuestion(id)
};
socket.onerror = console.error; // just in case
const insertQuestion = (questionId) => {
const params = new URLSearchParams();
params.append('postIdsSemiColonDelimited', questionId);
fetch('https://stackoverflow.com/posts/ajax-load-realtime-list/', {
method: 'post',
body: params
})
.then(r => r.json())
.then((result) => {
document.body.insertAdjacentHTML('beforeend', result[questionId]);
})
.catch(console.error); // just in case
};
hb
消息并回复它,这样StackExchange就知道要保持连接。