angularjs — используйте socket.io для объединения пула php rest api

у меня есть точка php, выставляя эти конечные точки, например,

[GET] /api/news --> [return] [ {id:1,title:'news1'},{id:1,title:'news1'} ];
[POST] /api/news?title=<string> --> [return] {id:NEW_ID,title:$title};

и мой веб-приложение использует угловой 1, чтобы получать новости.

//to get all news
$http.get('http://server.com/api/news').then(function(res){

$scope.news = res.data;

});
//to post a new news
$http.post('http://server.com/api/news',{title:'news3'}).then(function(res){

$scope.news.push(res.data);

});

это будет работать нормально, за исключением того, что мне придется объединять каждый интервал для получения новых новостей, поэтому я подумал, что что-то вроде socket.io может помочь.

Я пытаюсь достичь.

  1. пользователь подключается к io
  2. я отправляю все новости, как только пользователь подключается, используя мой php api
  3. когда пользователь публикует новое, он отправляет его на io-сервер, и io пересылает запрос на публикацию в мои остальные API и возвращает результат всем подключенным пользователям.

так что мое изменение в передний конец может быть что-то вроде

        var socket = io('http://localhost:3700');
socket.on('news', function (data) {
$timeout(()=>{$scope.news = data;});
});
socket.on('news_posted', function (data) {
$timeout(()=>{$scope.news.push(data);});
});
$scope.post = function(title){
socket.emit('post_news', { title: title });
}

Теперь, что я понятия не имею, как сделать такой простой сервер?

var express = require("express");
var app = express();
var port = 3700;
var io = require('socket.io').listen(app.listen(port));

//setting CORS
app.all('*', function(req, res, next) {
res.header("Access-Control-Allow-Origin", "http://localhost:8100");
res.header('Access-Control-Allow-Methods', 'GET,PUT,POST,DELETE,OPTIONS');
res.header('Access-Control-Allow-Headers', 'Content-type,Accept,X-Access-Token,X-Key,auth-client,auth-uid,auth-token');
if (req.method == 'OPTIONS') {
res.status(200).end();
} else {
next();
}
});

io.sockets.on('connection', function (socket) {
console.log('a user connected');
///BLOCK 1
///GET ALL POSTS FROM API AND EMIT news event BACK TO USER
///

socket.on('new_post', function(msg){
///BLOCK 2
///POST title TO API AND EMIT BACK news_posted WITH THE RESPONSE
});
});

0

Решение

Задача ещё не решена.

Другие решения

Других решений пока нет …