{"id":4734,"date":"2018-04-16T13:52:58","date_gmt":"2018-04-16T17:52:58","guid":{"rendered":"https:\/\/www.redline13.com\/blog\/?p=4734"},"modified":"2018-04-16T13:52:58","modified_gmt":"2018-04-16T17:52:58","slug":"load-testing-socket-io-applications-chat-gaming","status":"publish","type":"post","link":"https:\/\/www.redline13.com\/blog\/2018\/04\/load-testing-socket-io-applications-chat-gaming\/","title":{"rendered":"Improve Your WebSocket Application Performance"},"content":{"rendered":"<p>Writing a chat application with popular web applications has traditionally been very hard. It involves polling the server for changes, keeping track of timestamps, and it\u2019s a lot slower than it should be. In this post we&#8217;ll walk through how to improve your WebSocket application performance.<\/p>\n<h3>Socket.io<\/h3>\n<p>Sockets have traditionally been the solution around which most realtime chat systems are architected.<\/p>\n<p>Socket.io is a JavaScript library for realtime web applications. It enables realtime, bi-directional communication between web clients and server.<\/p>\n<p>Besides chat applications, socket.io is the best choice for gaming applications. The benefit of using socket.io is the fact that it ties into Node.js seamlessly. When coupled with Express on connection, it can serve the client-side includes, game files, and data, making the integration clean and easy.<\/p>\n<p>Read more about <a href=\"https:\/\/www.redline13.com\/blog\/2016\/01\/cloud-based-jmeter-websocket-testing\/\">JMeter WebSockets<\/a>.<\/p>\n<h3>Example<\/h3>\n<p>For this post we will share an example about connecting to websocket and joining the room.<\/p>\n<p><a href=\"https:\/\/socket.io\/\">Socket.io<\/a> \/ Engine.io has its own protocol that it uses on top of the ws connection. JMeter doesn&#8217;t support WebSocket testing naturally. So first we need to install the WebSocket Sampler plugin. Follow these steps:<\/p>\n<p>\u2013 Run JMeter, click Options \u2192 Plugin Manager<br \/>\n\u2013 In the \u201cAvailable plugins\u201d section check the Websocket sampler by Maciej Zaleski, then click \u201cApply Changes and Restart JMeter\u201d.<\/p>\n<p>Also, in some circumstances, JMeter\u2019s \u201cRecording Controller\u201d might not record all required transactions. But thanks to \u201cChrome Dev tools\u201d we can capture which requests are needed and simulate these requests through JMeter.<\/p>\n<p>After completing the installation we can record our application.<\/p>\n<h3>Recording the Application<\/h3>\n<p>Our example site is <a href=\"https:\/\/socket-io-chat.now.sh\/\">https:\/\/socket-io-chat.now.sh\/<\/a>.\u00a0JMeter\u2019s Recording Controller can capture some requests. However, for connecting to a socket server and emitting data, we have to use \u201cChrome dev tools\u201d for understanding which data we should simulate. After capturing the beginning requests our test plan is simply:<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" width=\"678\" height=\"184\" class=\"wp-image-4735\" src=\"https:\/\/d1u7j79bg1ays7.cloudfront.net\/blog\/wp-content\/uploads\/2018\/04\/word-image.png\" srcset=\"https:\/\/www.redline13.com\/blog\/wp-content\/uploads\/2018\/04\/word-image.png 678w, https:\/\/www.redline13.com\/blog\/wp-content\/uploads\/2018\/04\/word-image-300x81.png 300w\" sizes=\"auto, (max-width: 678px) 100vw, 678px\" \/><\/p>\n<p>Before focusing on the Socket connection and sending the data to it, we have to handle the \u201csid\u201d parameter. First, the \u201csid\u201d parameter occurs in the second request\u2019s response. So we need to capture this variable and use it for the next request. As you see below, when the request is sent, the response contains the \u201csid\u201d parameter.<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" width=\"908\" height=\"105\" class=\"wp-image-4736\" src=\"https:\/\/d1u7j79bg1ays7.cloudfront.net\/blog\/wp-content\/uploads\/2018\/04\/word-image-1.png\" srcset=\"https:\/\/www.redline13.com\/blog\/wp-content\/uploads\/2018\/04\/word-image-1.png 908w, https:\/\/www.redline13.com\/blog\/wp-content\/uploads\/2018\/04\/word-image-1-300x35.png 300w, https:\/\/www.redline13.com\/blog\/wp-content\/uploads\/2018\/04\/word-image-1-768x89.png 768w\" sizes=\"auto, (max-width: 908px) 100vw, 908px\" \/><\/p>\n<p>In order to establish the correlation, I created the following Regular Expression Extractor.<\/p>\n<p><img decoding=\"async\" class=\"wp-image-4737\" src=\"https:\/\/d1u7j79bg1ays7.cloudfront.net\/blog\/wp-content\/uploads\/2018\/04\/word-image-2.png\" \/><\/p>\n<p>After correlation is done, we can pass our \u201csid\u201d parameter like below:<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" width=\"1167\" height=\"387\" class=\"wp-image-4738\" src=\"https:\/\/d1u7j79bg1ays7.cloudfront.net\/blog\/wp-content\/uploads\/2018\/04\/word-image-3.png\" srcset=\"https:\/\/www.redline13.com\/blog\/wp-content\/uploads\/2018\/04\/word-image-3.png 1167w, https:\/\/www.redline13.com\/blog\/wp-content\/uploads\/2018\/04\/word-image-3-300x99.png 300w, https:\/\/www.redline13.com\/blog\/wp-content\/uploads\/2018\/04\/word-image-3-1024x340.png 1024w, https:\/\/www.redline13.com\/blog\/wp-content\/uploads\/2018\/04\/word-image-3-768x255.png 768w\" sizes=\"auto, (max-width: 1167px) 100vw, 1167px\" \/><\/p>\n<p>After completing the correlation operations, we should be able to add the WebSocketSampler. However, we must know how we communicate with the websocket server. As I mentioned before, JMeter can\u2019t record these communications, so we should use Chrome dev tools for this. When we inspect the request to send data to the server, we see that we have to use this syntax: <code>42[\u201cadd user\u201d,\u201dusername\u201d]<\/code>.<\/p>\n<p><img decoding=\"async\" class=\"wp-image-4739\" src=\"https:\/\/d1u7j79bg1ays7.cloudfront.net\/blog\/wp-content\/uploads\/2018\/04\/word-image-4.png\" \/><\/p>\n<p>We need to simulate our WebSocketSampler just as above.<\/p>\n<p>The crucial and tricky part before sending the join the room command is to first send a command of <code>5<\/code>. This is an upgrade command. You should refer to the documents below for understanding the protocols:<\/p>\n<p><a href=\"https:\/\/github.com\/socketio\/engine.io-protocol\">https:\/\/github.com\/socketio\/engine.io-protocol<\/a><\/p>\n<p><img loading=\"lazy\" decoding=\"async\" width=\"1132\" height=\"593\" class=\"wp-image-4740\" src=\"https:\/\/d1u7j79bg1ays7.cloudfront.net\/blog\/wp-content\/uploads\/2018\/04\/word-image-5.png\" srcset=\"https:\/\/www.redline13.com\/blog\/wp-content\/uploads\/2018\/04\/word-image-5.png 1132w, https:\/\/www.redline13.com\/blog\/wp-content\/uploads\/2018\/04\/word-image-5-300x157.png 300w, https:\/\/www.redline13.com\/blog\/wp-content\/uploads\/2018\/04\/word-image-5-1024x536.png 1024w, https:\/\/www.redline13.com\/blog\/wp-content\/uploads\/2018\/04\/word-image-5-768x402.png 768w\" sizes=\"auto, (max-width: 1132px) 100vw, 1132px\" \/><\/p>\n<p>After sending <code>5<\/code>, the next WebSocket Sampler configuration is below. We can then send the join the room command as seen below:<\/p>\n<p><img decoding=\"async\" class=\"wp-image-4741\" src=\"https:\/\/d1u7j79bg1ays7.cloudfront.net\/blog\/wp-content\/uploads\/2018\/04\/word-image-6.png\" \/><\/p>\n<p>After the configuration is completed, we can run our scripts and look at the response. We successfully connected to the socket and emitted data.<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" width=\"670\" height=\"255\" class=\"wp-image-4742\" src=\"https:\/\/d1u7j79bg1ays7.cloudfront.net\/blog\/wp-content\/uploads\/2018\/04\/word-image-7.png\" srcset=\"https:\/\/www.redline13.com\/blog\/wp-content\/uploads\/2018\/04\/word-image-7.png 670w, https:\/\/www.redline13.com\/blog\/wp-content\/uploads\/2018\/04\/word-image-7-300x114.png 300w\" sizes=\"auto, (max-width: 670px) 100vw, 670px\" \/><\/p>\n<p>We can now run load tests on RedLine13 across multiple regions.<\/p>\n<ul>\n<li><b>Enabling Web Sockets:<\/b> You don\u2019t need to include all the dependencies and plugins, just use the WebSocket checkbox and <a href=\"http:\/\/www.redline13.com\" target=\"_blank\" rel=\"noopener\">RedLine13<\/a> will include the dependency automatically.<\/li>\n<\/ul>\n<p><img loading=\"lazy\" decoding=\"async\" width=\"1003\" height=\"400\" class=\"wp-image-4743\" src=\"https:\/\/d1u7j79bg1ays7.cloudfront.net\/blog\/wp-content\/uploads\/2018\/04\/screen-shot-2016-01-21-at-12-23-42-am.png\" alt=\"Screen Shot 2016-01-21 at 12.23.42 AM\" srcset=\"https:\/\/www.redline13.com\/blog\/wp-content\/uploads\/2018\/04\/screen-shot-2016-01-21-at-12-23-42-am.png 1003w, https:\/\/www.redline13.com\/blog\/wp-content\/uploads\/2018\/04\/screen-shot-2016-01-21-at-12-23-42-am-300x120.png 300w, https:\/\/www.redline13.com\/blog\/wp-content\/uploads\/2018\/04\/screen-shot-2016-01-21-at-12-23-42-am-768x306.png 768w\" sizes=\"auto, (max-width: 1003px) 100vw, 1003px\" \/><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Writing a chat application with popular web applications has traditionally been very hard. It involves polling the server for changes, keeping track of timestamps, and it\u2019s a lot slower than it should be. In this post we&#8217;ll walk through how to improve your WebSocket application performance. Socket.io Sockets have traditionally been the solution around which most realtime chat systems are architected. Socket.io is a JavaScript library for realtime web applications. It enables realtime, bi-directional communication between<a class=\"more-link\" href=\"https:\/\/www.redline13.com\/blog\/2018\/04\/load-testing-socket-io-applications-chat-gaming\/\">Read More &rarr;<\/a><\/p>\n","protected":false},"author":1,"featured_media":4748,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[2,23,31,46],"tags":[],"class_list":{"0":"entry","1":"post","2":"publish","3":"author-user","4":"post-4734","6":"format-standard","7":"has-post-thumbnail","8":"category-blog","9":"category-chat","10":"category-gaming","11":"category-socket-io"},"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v20.12 - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Improve Your WebSocket Application Performance - RedLine13<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.redline13.com\/blog\/2018\/04\/load-testing-socket-io-applications-chat-gaming\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Improve Your WebSocket Application Performance - RedLine13\" \/>\n<meta property=\"og:description\" content=\"Writing a chat application with popular web applications has traditionally been very hard. It involves polling the server for changes, keeping track of timestamps, and it\u2019s a lot slower than it should be. In this post we&#8217;ll walk through how to improve your WebSocket application performance. Socket.io Sockets have traditionally been the solution around which most realtime chat systems are architected. Socket.io is a JavaScript library for realtime web applications. It enables realtime, bi-directional communication betweenRead More &rarr;\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.redline13.com\/blog\/2018\/04\/load-testing-socket-io-applications-chat-gaming\/\" \/>\n<meta property=\"og:site_name\" content=\"RedLine13\" \/>\n<meta property=\"article:published_time\" content=\"2018-04-16T17:52:58+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.redline13.com\/blog\/wp-content\/uploads\/2018\/04\/socket.io_.png\" \/>\n\t<meta property=\"og:image:width\" content=\"225\" \/>\n\t<meta property=\"og:image:height\" content=\"225\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\n<meta name=\"author\" content=\"RedLine13\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"RedLine13\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"3 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/www.redline13.com\/blog\/2018\/04\/load-testing-socket-io-applications-chat-gaming\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/www.redline13.com\/blog\/2018\/04\/load-testing-socket-io-applications-chat-gaming\/\"},\"author\":{\"name\":\"RedLine13\",\"@id\":\"https:\/\/www.redline13.com\/blog\/#\/schema\/person\/4acbcdcb8a9c72ec5a274e69c0ebea28\"},\"headline\":\"Improve Your WebSocket Application Performance\",\"datePublished\":\"2018-04-16T17:52:58+00:00\",\"dateModified\":\"2018-04-16T17:52:58+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/www.redline13.com\/blog\/2018\/04\/load-testing-socket-io-applications-chat-gaming\/\"},\"wordCount\":595,\"publisher\":{\"@id\":\"https:\/\/www.redline13.com\/blog\/#organization\"},\"articleSection\":[\"Blog\",\"Chat\",\"Gaming\",\"Socket.io\"],\"inLanguage\":\"en-US\"},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.redline13.com\/blog\/2018\/04\/load-testing-socket-io-applications-chat-gaming\/\",\"url\":\"https:\/\/www.redline13.com\/blog\/2018\/04\/load-testing-socket-io-applications-chat-gaming\/\",\"name\":\"Improve Your WebSocket Application Performance - RedLine13\",\"isPartOf\":{\"@id\":\"https:\/\/www.redline13.com\/blog\/#website\"},\"datePublished\":\"2018-04-16T17:52:58+00:00\",\"dateModified\":\"2018-04-16T17:52:58+00:00\",\"breadcrumb\":{\"@id\":\"https:\/\/www.redline13.com\/blog\/2018\/04\/load-testing-socket-io-applications-chat-gaming\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.redline13.com\/blog\/2018\/04\/load-testing-socket-io-applications-chat-gaming\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/www.redline13.com\/blog\/2018\/04\/load-testing-socket-io-applications-chat-gaming\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/www.redline13.com\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Improve Your WebSocket Application Performance\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/www.redline13.com\/blog\/#website\",\"url\":\"https:\/\/www.redline13.com\/blog\/\",\"name\":\"RedLine13\",\"description\":\"(Almost) Free Load Testing in the Cloud\",\"publisher\":{\"@id\":\"https:\/\/www.redline13.com\/blog\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/www.redline13.com\/blog\/?s={search_term_string}\"},\"query-input\":\"required name=search_term_string\"}],\"inLanguage\":\"en-US\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/www.redline13.com\/blog\/#organization\",\"name\":\"RedLine13\",\"url\":\"https:\/\/www.redline13.com\/blog\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/www.redline13.com\/blog\/#\/schema\/logo\/image\/\",\"url\":\"https:\/\/www.redline13.com\/blog\/wp-content\/uploads\/2013\/06\/cropped-rl13-header-logo.jpg\",\"contentUrl\":\"https:\/\/www.redline13.com\/blog\/wp-content\/uploads\/2013\/06\/cropped-rl13-header-logo.jpg\",\"width\":300,\"height\":68,\"caption\":\"RedLine13\"},\"image\":{\"@id\":\"https:\/\/www.redline13.com\/blog\/#\/schema\/logo\/image\/\"}},{\"@type\":\"Person\",\"@id\":\"https:\/\/www.redline13.com\/blog\/#\/schema\/person\/4acbcdcb8a9c72ec5a274e69c0ebea28\",\"name\":\"RedLine13\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/www.redline13.com\/blog\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/b4c9a289323b21a01c3e940f150eb9b8c542587f1abfd8f0e1cc1ffc5e475514?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/b4c9a289323b21a01c3e940f150eb9b8c542587f1abfd8f0e1cc1ffc5e475514?s=96&d=mm&r=g\",\"caption\":\"RedLine13\"},\"sameAs\":[\"http:\/\/127.0.0.1\"],\"url\":\"https:\/\/www.redline13.com\/blog\/author\/user\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Improve Your WebSocket Application Performance - RedLine13","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.redline13.com\/blog\/2018\/04\/load-testing-socket-io-applications-chat-gaming\/","og_locale":"en_US","og_type":"article","og_title":"Improve Your WebSocket Application Performance - RedLine13","og_description":"Writing a chat application with popular web applications has traditionally been very hard. It involves polling the server for changes, keeping track of timestamps, and it\u2019s a lot slower than it should be. In this post we&#8217;ll walk through how to improve your WebSocket application performance. Socket.io Sockets have traditionally been the solution around which most realtime chat systems are architected. Socket.io is a JavaScript library for realtime web applications. It enables realtime, bi-directional communication betweenRead More &rarr;","og_url":"https:\/\/www.redline13.com\/blog\/2018\/04\/load-testing-socket-io-applications-chat-gaming\/","og_site_name":"RedLine13","article_published_time":"2018-04-16T17:52:58+00:00","og_image":[{"width":225,"height":225,"url":"https:\/\/www.redline13.com\/blog\/wp-content\/uploads\/2018\/04\/socket.io_.png","type":"image\/png"}],"author":"RedLine13","twitter_card":"summary_large_image","twitter_misc":{"Written by":"RedLine13","Est. reading time":"3 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.redline13.com\/blog\/2018\/04\/load-testing-socket-io-applications-chat-gaming\/#article","isPartOf":{"@id":"https:\/\/www.redline13.com\/blog\/2018\/04\/load-testing-socket-io-applications-chat-gaming\/"},"author":{"name":"RedLine13","@id":"https:\/\/www.redline13.com\/blog\/#\/schema\/person\/4acbcdcb8a9c72ec5a274e69c0ebea28"},"headline":"Improve Your WebSocket Application Performance","datePublished":"2018-04-16T17:52:58+00:00","dateModified":"2018-04-16T17:52:58+00:00","mainEntityOfPage":{"@id":"https:\/\/www.redline13.com\/blog\/2018\/04\/load-testing-socket-io-applications-chat-gaming\/"},"wordCount":595,"publisher":{"@id":"https:\/\/www.redline13.com\/blog\/#organization"},"articleSection":["Blog","Chat","Gaming","Socket.io"],"inLanguage":"en-US"},{"@type":"WebPage","@id":"https:\/\/www.redline13.com\/blog\/2018\/04\/load-testing-socket-io-applications-chat-gaming\/","url":"https:\/\/www.redline13.com\/blog\/2018\/04\/load-testing-socket-io-applications-chat-gaming\/","name":"Improve Your WebSocket Application Performance - RedLine13","isPartOf":{"@id":"https:\/\/www.redline13.com\/blog\/#website"},"datePublished":"2018-04-16T17:52:58+00:00","dateModified":"2018-04-16T17:52:58+00:00","breadcrumb":{"@id":"https:\/\/www.redline13.com\/blog\/2018\/04\/load-testing-socket-io-applications-chat-gaming\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.redline13.com\/blog\/2018\/04\/load-testing-socket-io-applications-chat-gaming\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/www.redline13.com\/blog\/2018\/04\/load-testing-socket-io-applications-chat-gaming\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.redline13.com\/blog\/"},{"@type":"ListItem","position":2,"name":"Improve Your WebSocket Application Performance"}]},{"@type":"WebSite","@id":"https:\/\/www.redline13.com\/blog\/#website","url":"https:\/\/www.redline13.com\/blog\/","name":"RedLine13","description":"(Almost) Free Load Testing in the Cloud","publisher":{"@id":"https:\/\/www.redline13.com\/blog\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.redline13.com\/blog\/?s={search_term_string}"},"query-input":"required name=search_term_string"}],"inLanguage":"en-US"},{"@type":"Organization","@id":"https:\/\/www.redline13.com\/blog\/#organization","name":"RedLine13","url":"https:\/\/www.redline13.com\/blog\/","logo":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.redline13.com\/blog\/#\/schema\/logo\/image\/","url":"https:\/\/www.redline13.com\/blog\/wp-content\/uploads\/2013\/06\/cropped-rl13-header-logo.jpg","contentUrl":"https:\/\/www.redline13.com\/blog\/wp-content\/uploads\/2013\/06\/cropped-rl13-header-logo.jpg","width":300,"height":68,"caption":"RedLine13"},"image":{"@id":"https:\/\/www.redline13.com\/blog\/#\/schema\/logo\/image\/"}},{"@type":"Person","@id":"https:\/\/www.redline13.com\/blog\/#\/schema\/person\/4acbcdcb8a9c72ec5a274e69c0ebea28","name":"RedLine13","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.redline13.com\/blog\/#\/schema\/person\/image\/","url":"https:\/\/secure.gravatar.com\/avatar\/b4c9a289323b21a01c3e940f150eb9b8c542587f1abfd8f0e1cc1ffc5e475514?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/b4c9a289323b21a01c3e940f150eb9b8c542587f1abfd8f0e1cc1ffc5e475514?s=96&d=mm&r=g","caption":"RedLine13"},"sameAs":["http:\/\/127.0.0.1"],"url":"https:\/\/www.redline13.com\/blog\/author\/user\/"}]}},"_links":{"self":[{"href":"https:\/\/www.redline13.com\/blog\/wp-json\/wp\/v2\/posts\/4734","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.redline13.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.redline13.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.redline13.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.redline13.com\/blog\/wp-json\/wp\/v2\/comments?post=4734"}],"version-history":[{"count":0,"href":"https:\/\/www.redline13.com\/blog\/wp-json\/wp\/v2\/posts\/4734\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.redline13.com\/blog\/wp-json\/wp\/v2\/media\/4748"}],"wp:attachment":[{"href":"https:\/\/www.redline13.com\/blog\/wp-json\/wp\/v2\/media?parent=4734"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.redline13.com\/blog\/wp-json\/wp\/v2\/categories?post=4734"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.redline13.com\/blog\/wp-json\/wp\/v2\/tags?post=4734"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}