성공했을때도 무한정 가는건 똑같지만 long polling은 연결이 길게 유지되므로 한도까지 보내지지는 않는다.
경우에따라서 시간간격을 더 줄일수도 있고 늘릴수도 있다. 이는 순전히 구현하는 사람 마음이다.
resMsg();
마지막에 함수를 실행하면서 재귀의 시작을 알리게된다.
클라이언트의 코드는 큰 특징은 없지만 보내는 부분이 어떠한 경우에도 무한정 보낸다는것을 알 수 있다.
long polling은 서버쪽도 짝짝꿍이 잘 맞아야한다.
이제 서버쪽 코드를 보도록하자.
서버쪽은 express framework위에서 돌아간다.
/*session.js*/ let count = 0; let resList = []; module.exports = {count, resList};
전역 데이터 저장을 위해서 session이라는 스크립트파일을 하나 새로만들었다.
이름은 중요하지 않다. 전역으로 만들 수 있는 거라면 뭐든 상관없다. 어디에있든 상관없다.
/*msg.js*/ var express = require('express'); var router = express.Router(); var session = require('../session'); router.post('/', function (req, res, next) { let data = req.body.sendData; for (let atom of session.resList) { atom.send({data}); } session.resList = []; res.send({data}); }); router.get('/', function (req, res, next) { session.resList.push(res); }); module.exports = router;
이 부분이 서버에서 처리로직이다.
먼저 get부분부터 보도록하자.
router.get('/', function (req, res, next) { session.resList.push(res); });
요청이 들어오면 바로 응답하지 않는다.
바로 응답하지 않는 정도가 아니라 사실 그냥 응답 자체를 하지 않으면된다.
그리고 응답을 list에 담아둔다.
router.post('/', function (req, res, next) { let data = req.body.sendData; for (let atom of session.resList) { atom.send({data}); } session.resList = []; res.send({data}); });
이제 post코드가 중요하다. 이 부분이 바로 위에서 reqMsg가 발송됬을 때의 상황이다.
reqMsg가 작동하면 서버에 post로 보내게된다.
이 때 받은 데이터를 여러분의 session.resList의 모든 원소(Response객체)에 응답값으로 던져버린다.