Title: feat(http): helpers/guides for short polling · Issue #2822 · angular/angular · GitHub
Open Graph Title: feat(http): helpers/guides for short polling · Issue #2822 · angular/angular
X Title: feat(http): helpers/guides for short polling · Issue #2822 · angular/angular
Description: Short polling consists of an application requesting data from the same endpoint at a specified interval (i.e. request any new comments on this github issues every 10 seconds), as opposed to long polling, which consists of making a reques...
Open Graph Description: Short polling consists of an application requesting data from the same endpoint at a specified interval (i.e. request any new comments on this github issues every 10 seconds), as opposed to long po...
X Description: Short polling consists of an application requesting data from the same endpoint at a specified interval (i.e. request any new comments on this github issues every 10 seconds), as opposed to long po...
Opengraph URL: https://github.com/angular/angular/issues/2822
X: @github
Domain: github.com
{"@context":"https://schema.org","@type":"DiscussionForumPosting","headline":"feat(http): helpers/guides for short polling","articleBody":"Short polling consists of an application requesting data from the same endpoint at a specified interval (i.e. request any new comments on this github issues every 10 seconds), as opposed to long polling, which consists of making a request, and the backend waiting to complete that request until there's data to send. (i.e. request new comments on a github issue, wait until comments are returned, then open a new request). \n\nWith RxJS, short polling is relatively easy to do, if one understands semantics of Rx well enough. \n\nExample (Some Http APIs shown here are not yet implemented):\n\n``` typescript\nvar lastCommentsUpdatedTime = '';\nvar requestOptions = new RequestOptions({\n url: 'https://api.github.com/repos/angular/angular/issues/123/comments',\n params: {\n sort: 'updated',\n since: lastCommentsTime\n }\n});\n// Create an observable that emits a new value every 5 seconds\nRx.Observable.interval(5000)\n //Create new http request, automatically cancel any pending requests.\n .flatMapLatest((_) =\u003e {\n var request = new Request(requestOptions.merge({\n params: {\n since: lastCommentsTime\n }\n }));\n //Return Observable\n return http.request(request);\n })\n //Get the response body\n .map(res =\u003e res.json())\n //Set the timestamp of last comments updated\n .do(comments =\u003e this.lastCommentsUpdatedTime = comments \u0026\u0026 comments.length ? comments[0].updatedAt : this.lastCommentsUpdatedTime)\n //Give the new or updated comments to the view to handle displaying the comments.\n .subscribe(comments =\u003e this.appendOrMergeComments(comments));\n```\n\nThe only part about this that I think requires deeper Rx understanding is the creation of the interval observable and piping it into the function to generate the request. Perhaps this could be made simpler, and could also be made to provide similar functionality to Dart Streams.\n\nIn addition to providing framework help, there should be good docs on how to properly do polling with `Http`.\n","author":{"url":"https://github.com/jeffbcross","@type":"Person","name":"jeffbcross"},"datePublished":"2015-07-01T18:41:45.000Z","interactionStatistic":{"@type":"InteractionCounter","interactionType":"https://schema.org/CommentAction","userInteractionCount":3},"url":"https://github.com/2822/angular/issues/2822"}
| route-pattern | /_view_fragments/issues/show/:user_id/:repository/:id/issue_layout(.:format) |
| route-controller | voltron_issues_fragments |
| route-action | issue_layout |
| fetch-nonce | v2:0e552c10-cbd9-9b86-ca39-67c966f0dfb2 |
| current-catalog-service-hash | 81bb79d38c15960b92d99bca9288a9108c7a47b18f2423d0f6438c5b7bcd2114 |
| request-id | D996:137F5:580A9A:753FF6:6A5FCE39 |
| html-safe-nonce | bfc1a9677c35cd7198269344b9fe3e0788f831c4bc00aa39389119e6e4c08aad |
| visitor-payload | eyJyZWZlcnJlciI6IiIsInJlcXVlc3RfaWQiOiJEOTk2OjEzN0Y1OjU4MEE5QTo3NTNGRjY6NkE1RkNFMzkiLCJ2aXNpdG9yX2lkIjoiNzAwNTQxMjc5MTk3MDQxODIzNCIsInJlZ2lvbl9lZGdlIjoiaWFkIiwicmVnaW9uX3JlbmRlciI6ImlhZCJ9 |
| visitor-hmac | 5cbc36b774f227d0eef980cddc3d97cd096de96f3cb93a118102a93d328f70c2 |
| hovercard-subject-tag | issue:92458119 |
| github-keyboard-shortcuts | repository,issues,copilot |
| google-site-verification | Apib7-x98H0j5cPqHWwSMm6dNU4GmODRoqxLiDzdx9I |
| octolytics-url | https://collector.github.com/github/collect |
| analytics-location | / |
| fb:app_id | 1401488693436528 |
| apple-itunes-app | app-id=1477376905, app-argument=https://github.com/_view_fragments/issues/show/angular/angular/2822/issue_layout |
| twitter:image | https://opengraph.githubassets.com/7620a9fcb4fac55c9e71b7329f59fb62680a010585be3146ed0e16fdc7698cbc/angular/angular/issues/2822 |
| twitter:card | summary_large_image |
| og:image | https://opengraph.githubassets.com/7620a9fcb4fac55c9e71b7329f59fb62680a010585be3146ed0e16fdc7698cbc/angular/angular/issues/2822 |
| og:image:alt | Short polling consists of an application requesting data from the same endpoint at a specified interval (i.e. request any new comments on this github issues every 10 seconds), as opposed to long po... |
| og:image:width | 1200 |
| og:image:height | 600 |
| og:site_name | GitHub |
| og:type | object |
| og:author:username | jeffbcross |
| hostname | github.com |
| expected-hostname | github.com |
| None | 53a28a7799cbf673993ab89fc44869fea4c4a6545a861a4d1445e83e8d03aabd |
| turbo-cache-control | no-preview |
| go-import | github.com/angular/angular git https://github.com/angular/angular.git |
| octolytics-dimension-user_id | 139426 |
| octolytics-dimension-user_login | angular |
| octolytics-dimension-repository_id | 24195339 |
| octolytics-dimension-repository_nwo | angular/angular |
| octolytics-dimension-repository_public | true |
| octolytics-dimension-repository_is_fork | false |
| octolytics-dimension-repository_network_root_id | 24195339 |
| octolytics-dimension-repository_network_root_nwo | angular/angular |
| turbo-body-classes | logged-out env-production page-responsive |
| disable-turbo | false |
| browser-stats-url | https://api.github.com/_private/browser/stats |
| browser-errors-url | https://api.github.com/_private/browser/errors |
| release | dc08399f879d576f0edbb8c52a0a1a30d498b203 |
| ui-target | full |
| theme-color | #1e2327 |
| color-scheme | light dark |
Links:
Viewport: width=device-width