{"id":1723,"date":"2011-07-14T12:41:21","date_gmt":"2011-07-14T17:41:21","guid":{"rendered":"http:\/\/blog.vortexbird.com\/?p=1124"},"modified":"2011-07-14T12:41:21","modified_gmt":"2011-07-14T17:41:21","slug":"optimizando-la-comunicacion-asincrona-en-aplicaciones-icefaces","status":"publish","type":"post","link":"https:\/\/vortexbird.com\/en\/optimizando-la-comunicacion-asincrona-en-aplicaciones-icefaces\/","title":{"rendered":"Optimizando la comunicaci\u00f3n as\u00edncrona en aplicaciones ICEFACES"},"content":{"rendered":"<p style=\"text-align: justify;\">\u00a1Hola!<\/p>\n<p style=\"text-align: justify;\">El modelo tradicional de entrada y salida usado por los servlet<strong>Request\/Response<\/strong>\u00a0I\/O, soportado por la mayor\u00eda de servidores de aplicaciones <u>JavaEE<\/u>, consume un hilo por conexi\u00f3n por la duraci\u00f3n del ciclo de vida de la petici\u00f3n-respuesta (Request-Response).<\/p>\n<p style=\"text-align: justify;\">Cuando\u00a0<em><u>ICEfaces<\/u>\u00a0<\/em>utiliza el modo de actualizaci\u00f3n as\u00edncrona en este escenario un hilo es efectivamente consumido en el servidor para mantener la conexi\u00f3n asincr\u00f3nica para cada navegador conectado al servidor.<\/p>\n<p style=\"text-align: justify;\">Adem\u00e1s, la interacci\u00f3n del usuario se traducir\u00e1 en otro ciclo transitorio de petici\u00f3n-respuesta (Request-Response), que a su vez temporalmente consumen otro hilo en el servidor, lo que resulta en un m\u00e1ximo de dos hilos de ejecuci\u00f3n en el servidor que se requiere para soportar a cada usuario <em>ICEfaces<\/em>. En la pr\u00e1ctica, el n\u00famero es algo entre uno y dos hilos por usuario, dependiendo de la frecuencia de interacci\u00f3n por parte del usuario. Si bien esto no suele suponer un problema cuando el n\u00famero de usuarios concurrentes es relativamente baja (&lt;100), puede convertirse en un problema cuando un mayor n\u00famero de usuarios concurrentes debe ser soportado por la aplicaci\u00f3n web.<\/p>\n<p style=\"text-align: center;\"><span style=\"color: #f9af4c;\">Hay dos soluciones establecidas para esta limitaci\u00f3n:<\/span><\/p>\n<p><strong>1.<\/strong> Aumentar el tama\u00f1o de los hilos del servidor (<strong>thread-pool<\/strong>)\u00a0 utilizados para las solicitudes de los <em>servlet<\/em>. Por ejemplo,\u00a0<u>Tomcat 5.5<\/u>\u00a0usa por defecto un <em>thread pool<\/em> de 150. Las pruebas han demostrado que esto es suficiente para soportar a 100 o m\u00e1s usuarios <em>ICEfaces <\/em>simult\u00e1neos en el modo de actualizaci\u00f3n as\u00edncrona.<\/p>\n<p>Sin embargo, al aumentar el grupo de subprocesos del <em>Tomcat<\/em> a un tama\u00f1o m\u00e1s grande (por ejemplo, 500 o 1000), un n\u00famero mucho mayor de usuarios simult\u00e1neos pueden ser soportado. El factor limitante en este escenario es el n\u00famero de hilos que la plataforma de <em>hardware<\/em> y <em>software<\/em> puedan soportar eficazmente. Dependiendo de las capacidades de su servidor, aumentar el tama\u00f1o del <em>thread-pool<\/em> es a menudo todo lo que se requiere para cumplir con los requisitos de escalabilidad en muchas aplicaciones web que usan <em>IceFaces<\/em><\/p>\n<p><strong>2.<\/strong> Aprovechar el soporte que ofrecen algunos servidores para el\u00a0 procesamiento de peticiones\u00a0 asincr\u00f3nico (<strong>ARP<\/strong>). Este enfoque utiliza los recursos disponibles de manera m\u00e1s eficiente aprovechando las t\u00e9cnicas de ARP para comunicaciones as\u00edncronas con el apoyo de un n\u00famero cada vez mayor de servidores de aplicaciones.<\/p>\n<p style=\"text-align: justify;\">En el escenario\u00a0ARP, un <em>thread-pool<\/em> se utiliza para el servicio de peticiones as\u00edncronas. Cuando se recibe una petici\u00f3n, un hilo es asignado temporalmente para atender la solicitud y se lanza al <em>thread-pool<\/em>, mientras que el servidor de aplicaciones procesa la solicitud y crea una respuesta. Cuando una respuesta esta lista se asigna a un hilo nuevo del <em>thread-pool<\/em> para enviar la respuesta al navegador.<\/p>\n<p style=\"text-align: justify;\">Las conexiones as\u00edncronas son a menudo inactivadas durante per\u00edodos relativamente largos de tiempo entre la solicitud y la respuesta. Por esta raz\u00f3n, ARP est\u00e1 bien adaptado para el uso de aplicaciones <em>ICEfaces<\/em> as\u00edncronas y puede proporcionar escalabilidad en t\u00e9rminos de usuarios concurrentes asincr\u00f3nicos mucho mayor que el <em>servlet<\/em> tradicionales (Request-Response) en el mismo <em>hardware<\/em>.<\/p>\n<p style=\"text-align: justify;\"><em>ICEfaces<\/em> opcionalmente puede soportar configuraciones\u00a0<strong>ARP<\/strong>\u00a0para los siguientes servidores de aplicaciones JavaEE:<\/p>\n<ul style=\"text-align: justify;\">\n<li><u>GlassFish v2, v3<\/u><\/li>\n<li><u>Jetty 6.1<\/u><\/li>\n<li><u>Tomcat 6<\/u>\u00a0y\u00a0<u>JBoss 4.2<\/u><\/li>\n<\/ul>\n<p><\/br><\/p>\n<p style=\"text-align: justify;\"><strong><em>Jboss <\/em><\/strong><strong>4.2<\/strong>\u00a0<u>Jboss<\/u>\u00a0usa como contenedor web por defecto <em>Tomcat<\/em> el cual cuenta con un soporte para peticiones de entrada y salida no bloqueante (NIO).<\/p>\n<p style=\"text-align: justify;\">Este soporte puede ser configurado para obtener una eficiente comunicaci\u00f3n as\u00edncrona con las aplicaciones desarrolladas en <em>IceFaces<\/em> que utilizan el modo de actualizaci\u00f3n as\u00edncrono.<\/p>\n<p style=\"text-align: justify;\">Para configurar el uso de NIO en <em>Jboss <\/em>4.2 usando <em>Tomcat<\/em> 6 se debe hacer lo siguiente: Se debe modificar el protocolo HTTP\/1.1 por org.apache.coyote.http11.Http11NioProtocol\u00a0 en el archivo server.xml que se encuentra en jboss-4.2.XX \/server\/default\/deploy\/jboss-web.deployer\/server.xml<\/p>\n<pre lang=\"xml\" escaped=\"true\">\n<connector port=\"9090\" address=\"${jboss.bind.address}\"\n          maxthreads=\"250\" maxhttpheadersize=\"8192\"\n          emptysessionpath=\"true\" protocol=\"org.apache.coyote.http11.Http11NioProtocol\"          \n\t  enablelookups=\"false\" redirectport=\"8443\" acceptcount=\"100\"          \t  connectiontimeout=\"20000\" disableuploadtimeout=\"true\" \/>\n\n<\/pre>\n<p>En la aplicaci\u00f3n se debe configurar el TomcatPushServlet, esto se hace en el web.xml agregando las siguientes l\u00edneas:<\/p>\n<pre lang=\"xml\" escaped=\"true\"><servlet>\n<servlet-name>Tomcat Push Servlet<\/servlet-name>\n<servlet-class> \ncom.icesoft.faces.webapp.http.servlet.TomcatPushServlet\n<\/servlet-class>\n<load-on-startup> 1 <\/load-on-startup>\n<\/servlet>\n<servlet-mapping> \n<servlet-name>Tomcat Push Servlet<\/servlet-name> \n<url-pattern>\/block\/receive-updated-views\/*<\/url-pattern> \n<\/servlet-mapping>\n<\/pre>\n<p style=\"text-align: justify;\">En el archive web.xml de Jboss que se encuentra en jboss-4.2.X.X\/server\/default\/deploy\/jboss-web.deployer\/conf\/web.xml se deben remplazar las siguientes l\u00edneas.<\/p>\n<p style=\"text-align: justify;\">Remplace las siguientes l\u00edneas:<\/p>\n<pre lang=\"xml\" escaped=\"true\"> \n<filter-mapping> \n<filter-name>CommonHeadersFilter<\/filter-name> \n<url-pattern>\/*<\/url-pattern> \n<\/filter-mapping>\n\n<\/pre>\n<p style=\"text-align: justify;\">Con estas l\u00edneas:<\/p>\n<pre lang=\"xml\" escaped=\"true\">CommonHeadersFilter \n<filter-mapping>\n<filter-name>CommonHeadersFilter<\/filter-name> \n<url-pattern>\/<\/url-pattern> \n<\/filter-mapping>\n\n<\/pre>\n<p style=\"text-align: justify;\">Despliegue el WAR con nombre push-server.war que se encuentra en icefaces\/ICEfaces-1.8.1-bin\/icefaces\/push-server\/ push-server.war Es todo ya su servidor de aplicaciones Jboss y sus aplicaciones IceFaces soportan (ARP y NIO).<\/p>","protected":false},"excerpt":{"rendered":"<p>\u00a1Hola! El modelo tradicional de entrada y salida usado por los servletRequest\/Response\u00a0I\/O, soportado por la mayor\u00eda de servidores de aplicaciones &#8230; <a class=\"cz_readmore cz_readmore_no_icon\" href=\"https:\/\/vortexbird.com\/en\/optimizando-la-comunicacion-asincrona-en-aplicaciones-icefaces\/\"><span>Read more<\/span><\/a><\/p>","protected":false},"author":1,"featured_media":1758,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"fifu_image_url":"","fifu_image_alt":"","footnotes":""},"categories":[15],"tags":[86,87,88,89,90,91,92,38,49,93,94],"class_list":["post-1723","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-javaee","tag-blockreceive-updated-views","tag-arp","tag-asincrona","tag-com-icesoft-faces-webapp-http-servlet-tomcatpushservlet","tag-commonheadersfilter","tag-glassfish-icefaces","tag-javaee","tag-jboss","tag-jsf","tag-nio","tag-tomcat"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.7 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Optimizando la comunicaci\u00f3n as\u00edncrona en aplicaciones ICEFACES - Vortexbird<\/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:\/\/vortexbird.com\/en\/optimizando-la-comunicacion-asincrona-en-aplicaciones-icefaces\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Optimizando la comunicaci\u00f3n as\u00edncrona en aplicaciones ICEFACES - Vortexbird\" \/>\n<meta property=\"og:description\" content=\"\u00a1Hola! El modelo tradicional de entrada y salida usado por los servletRequest\/Response\u00a0I\/O, soportado por la mayor\u00eda de servidores de aplicaciones ... Leer m\u00e1s\" \/>\n<meta property=\"og:url\" content=\"https:\/\/vortexbird.com\/en\/optimizando-la-comunicacion-asincrona-en-aplicaciones-icefaces\/\" \/>\n<meta property=\"og:site_name\" content=\"Vortexbird\" \/>\n<meta property=\"article:published_time\" content=\"2011-07-14T17:41:21+00:00\" \/>\n<meta name=\"author\" content=\"Vortex.bird\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Vortex.bird\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"4 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/vortexbird.com\\\/optimizando-la-comunicacion-asincrona-en-aplicaciones-icefaces\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/vortexbird.com\\\/optimizando-la-comunicacion-asincrona-en-aplicaciones-icefaces\\\/\"},\"author\":{\"name\":\"Vortex.bird\",\"@id\":\"https:\\\/\\\/vortexbird.com\\\/#\\\/schema\\\/person\\\/e69cef57e13dc876e812bed5602ce051\"},\"headline\":\"Optimizando la comunicaci\u00f3n as\u00edncrona en aplicaciones ICEFACES\",\"datePublished\":\"2011-07-14T17:41:21+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/vortexbird.com\\\/optimizando-la-comunicacion-asincrona-en-aplicaciones-icefaces\\\/\"},\"wordCount\":745,\"commentCount\":0,\"image\":{\"@id\":\"https:\\\/\\\/vortexbird.com\\\/optimizando-la-comunicacion-asincrona-en-aplicaciones-icefaces\\\/#primaryimage\"},\"thumbnailUrl\":\"\",\"keywords\":[\"\\\/block\\\/receive-updated-views\\\/*\",\"ARP\",\"as\u00edncrona\",\"com.icesoft.faces.webapp.http.servlet.TomcatPushServlet\",\"CommonHeadersFilter\",\"Glassfish Icefaces\",\"JavaEE\",\"Jboss\",\"jsf\",\"NIO\",\"Tomcat\"],\"articleSection\":[\"JavaEE\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/vortexbird.com\\\/optimizando-la-comunicacion-asincrona-en-aplicaciones-icefaces\\\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/vortexbird.com\\\/optimizando-la-comunicacion-asincrona-en-aplicaciones-icefaces\\\/\",\"url\":\"https:\\\/\\\/vortexbird.com\\\/optimizando-la-comunicacion-asincrona-en-aplicaciones-icefaces\\\/\",\"name\":\"Optimizando la comunicaci\u00f3n as\u00edncrona en aplicaciones ICEFACES - Vortexbird\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/vortexbird.com\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/vortexbird.com\\\/optimizando-la-comunicacion-asincrona-en-aplicaciones-icefaces\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/vortexbird.com\\\/optimizando-la-comunicacion-asincrona-en-aplicaciones-icefaces\\\/#primaryimage\"},\"thumbnailUrl\":\"\",\"datePublished\":\"2011-07-14T17:41:21+00:00\",\"author\":{\"@id\":\"https:\\\/\\\/vortexbird.com\\\/#\\\/schema\\\/person\\\/e69cef57e13dc876e812bed5602ce051\"},\"breadcrumb\":{\"@id\":\"https:\\\/\\\/vortexbird.com\\\/optimizando-la-comunicacion-asincrona-en-aplicaciones-icefaces\\\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/vortexbird.com\\\/optimizando-la-comunicacion-asincrona-en-aplicaciones-icefaces\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/vortexbird.com\\\/optimizando-la-comunicacion-asincrona-en-aplicaciones-icefaces\\\/#primaryimage\",\"url\":\"\",\"contentUrl\":\"\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/vortexbird.com\\\/optimizando-la-comunicacion-asincrona-en-aplicaciones-icefaces\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Portada\",\"item\":\"https:\\\/\\\/vortexbird.com\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Optimizando la comunicaci\u00f3n as\u00edncrona en aplicaciones ICEFACES\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/vortexbird.com\\\/#website\",\"url\":\"https:\\\/\\\/vortexbird.com\\\/\",\"name\":\"Vortexbird\",\"description\":\"Desarrollo &aacute;gil de software\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/vortexbird.com\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/vortexbird.com\\\/#\\\/schema\\\/person\\\/e69cef57e13dc876e812bed5602ce051\",\"name\":\"Vortex.bird\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/2df6992145042f545b1961db71214364407f18374dd916ec8351acb05d2a8380?s=96&d=mm&r=g\",\"url\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/2df6992145042f545b1961db71214364407f18374dd916ec8351acb05d2a8380?s=96&d=mm&r=g\",\"contentUrl\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/2df6992145042f545b1961db71214364407f18374dd916ec8351acb05d2a8380?s=96&d=mm&r=g\",\"caption\":\"Vortex.bird\"},\"sameAs\":[\"https:\\\/\\\/vortexbird.com\"],\"url\":\"https:\\\/\\\/vortexbird.com\\\/en\\\/author\\\/vortexbird\\\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Optimizando la comunicaci\u00f3n as\u00edncrona en aplicaciones ICEFACES - Vortexbird","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:\/\/vortexbird.com\/en\/optimizando-la-comunicacion-asincrona-en-aplicaciones-icefaces\/","og_locale":"en_US","og_type":"article","og_title":"Optimizando la comunicaci\u00f3n as\u00edncrona en aplicaciones ICEFACES - Vortexbird","og_description":"\u00a1Hola! El modelo tradicional de entrada y salida usado por los servletRequest\/Response\u00a0I\/O, soportado por la mayor\u00eda de servidores de aplicaciones ... Leer m\u00e1s","og_url":"https:\/\/vortexbird.com\/en\/optimizando-la-comunicacion-asincrona-en-aplicaciones-icefaces\/","og_site_name":"Vortexbird","article_published_time":"2011-07-14T17:41:21+00:00","author":"Vortex.bird","twitter_card":"summary_large_image","twitter_misc":{"Written by":"Vortex.bird","Est. reading time":"4 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/vortexbird.com\/optimizando-la-comunicacion-asincrona-en-aplicaciones-icefaces\/#article","isPartOf":{"@id":"https:\/\/vortexbird.com\/optimizando-la-comunicacion-asincrona-en-aplicaciones-icefaces\/"},"author":{"name":"Vortex.bird","@id":"https:\/\/vortexbird.com\/#\/schema\/person\/e69cef57e13dc876e812bed5602ce051"},"headline":"Optimizando la comunicaci\u00f3n as\u00edncrona en aplicaciones ICEFACES","datePublished":"2011-07-14T17:41:21+00:00","mainEntityOfPage":{"@id":"https:\/\/vortexbird.com\/optimizando-la-comunicacion-asincrona-en-aplicaciones-icefaces\/"},"wordCount":745,"commentCount":0,"image":{"@id":"https:\/\/vortexbird.com\/optimizando-la-comunicacion-asincrona-en-aplicaciones-icefaces\/#primaryimage"},"thumbnailUrl":"","keywords":["\/block\/receive-updated-views\/*","ARP","as\u00edncrona","com.icesoft.faces.webapp.http.servlet.TomcatPushServlet","CommonHeadersFilter","Glassfish Icefaces","JavaEE","Jboss","jsf","NIO","Tomcat"],"articleSection":["JavaEE"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/vortexbird.com\/optimizando-la-comunicacion-asincrona-en-aplicaciones-icefaces\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/vortexbird.com\/optimizando-la-comunicacion-asincrona-en-aplicaciones-icefaces\/","url":"https:\/\/vortexbird.com\/optimizando-la-comunicacion-asincrona-en-aplicaciones-icefaces\/","name":"Optimizando la comunicaci\u00f3n as\u00edncrona en aplicaciones ICEFACES - Vortexbird","isPartOf":{"@id":"https:\/\/vortexbird.com\/#website"},"primaryImageOfPage":{"@id":"https:\/\/vortexbird.com\/optimizando-la-comunicacion-asincrona-en-aplicaciones-icefaces\/#primaryimage"},"image":{"@id":"https:\/\/vortexbird.com\/optimizando-la-comunicacion-asincrona-en-aplicaciones-icefaces\/#primaryimage"},"thumbnailUrl":"","datePublished":"2011-07-14T17:41:21+00:00","author":{"@id":"https:\/\/vortexbird.com\/#\/schema\/person\/e69cef57e13dc876e812bed5602ce051"},"breadcrumb":{"@id":"https:\/\/vortexbird.com\/optimizando-la-comunicacion-asincrona-en-aplicaciones-icefaces\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/vortexbird.com\/optimizando-la-comunicacion-asincrona-en-aplicaciones-icefaces\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/vortexbird.com\/optimizando-la-comunicacion-asincrona-en-aplicaciones-icefaces\/#primaryimage","url":"","contentUrl":""},{"@type":"BreadcrumbList","@id":"https:\/\/vortexbird.com\/optimizando-la-comunicacion-asincrona-en-aplicaciones-icefaces\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Portada","item":"https:\/\/vortexbird.com\/"},{"@type":"ListItem","position":2,"name":"Optimizando la comunicaci\u00f3n as\u00edncrona en aplicaciones ICEFACES"}]},{"@type":"WebSite","@id":"https:\/\/vortexbird.com\/#website","url":"https:\/\/vortexbird.com\/","name":"Vortexbird","description":"Desarrollo &aacute;gil de software","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/vortexbird.com\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Person","@id":"https:\/\/vortexbird.com\/#\/schema\/person\/e69cef57e13dc876e812bed5602ce051","name":"Vortex.bird","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/secure.gravatar.com\/avatar\/2df6992145042f545b1961db71214364407f18374dd916ec8351acb05d2a8380?s=96&d=mm&r=g","url":"https:\/\/secure.gravatar.com\/avatar\/2df6992145042f545b1961db71214364407f18374dd916ec8351acb05d2a8380?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/2df6992145042f545b1961db71214364407f18374dd916ec8351acb05d2a8380?s=96&d=mm&r=g","caption":"Vortex.bird"},"sameAs":["https:\/\/vortexbird.com"],"url":"https:\/\/vortexbird.com\/en\/author\/vortexbird\/"}]}},"_links":{"self":[{"href":"https:\/\/vortexbird.com\/en\/wp-json\/wp\/v2\/posts\/1723","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/vortexbird.com\/en\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/vortexbird.com\/en\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/vortexbird.com\/en\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/vortexbird.com\/en\/wp-json\/wp\/v2\/comments?post=1723"}],"version-history":[{"count":0,"href":"https:\/\/vortexbird.com\/en\/wp-json\/wp\/v2\/posts\/1723\/revisions"}],"wp:attachment":[{"href":"https:\/\/vortexbird.com\/en\/wp-json\/wp\/v2\/media?parent=1723"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/vortexbird.com\/en\/wp-json\/wp\/v2\/categories?post=1723"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/vortexbird.com\/en\/wp-json\/wp\/v2\/tags?post=1723"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}