{"id":18477,"date":"2018-07-05T09:01:31","date_gmt":"2018-07-05T12:01:31","guid":{"rendered":"https:\/\/king.host\/blog\/?p=18477"},"modified":"2024-06-03T16:22:12","modified_gmt":"2024-06-03T19:22:12","slug":"sockets-em-servidor-php","status":"publish","type":"post","link":"https:\/\/king.host\/blog\/tecnologia\/sockets-em-servidor-php\/","title":{"rendered":"Como usar sockets em servidor PHP"},"content":{"rendered":"<p>O PHP fez anivers\u00e1rio h\u00e1 poucas semanas, mas aqui na KingHost ainda \u00e9 tempo de homenagear uma das linguagens mais usadas no mundo. Hoje vou exemplificar <strong>como usar sockets em servidor PHP<\/strong> de uma forma simples.<\/p>\n<p>Existem diversas formas de se fazer um servidor web, por\u00e9m muita gente subestima o poder do PHP. Ainda que seja limitada quando comparada \u00e0s outras alternativas, <strong>a simplicidade da implementa\u00e7\u00e3o \u00e9 algo a ser considerado<\/strong>.<\/p>\n<p>Basta voc\u00ea abrir um socket e j\u00e1 tem uma <strong>possibilidade<\/strong> de conex\u00e3o.<\/p>\n<h2>O que s\u00e3o sockets?<\/h2>\n<p>Um socket \u00e9 basicamente <strong>o \u201cfim da linha\u201d para um fluxo de dado<\/strong>s. Esse \u201cfim da linha\u201d tem um endere\u00e7o, que \u00e9 a combina\u00e7\u00e3o de um endere\u00e7o IP com uma porta de entrada do servidor (ou cliente).<\/p>\n<p>Podemos exemplificar isso com uma <strong>analogia<\/strong>.<\/p>\n<p>Por exemplo, imagine que voc\u00ea tem que <strong>chegar em algum lugar<\/strong> e escolhe o <strong>transporte p\u00fablico como meio de locomo\u00e7\u00e3o<\/strong>. Voc\u00ea vai at\u00e9 o <strong>ponto<\/strong> (que nesse caso <strong>\u00e9 o socket<\/strong>), e espera seu <strong>\u00f4nibus (a conex\u00e3o)<\/strong>. Nessa situa\u00e7\u00e3o <strong>voc\u00ea seria o fluxo de dados<\/strong>, ou os pacotes, por exemplo.<\/p>\n<p>Outra maneira \u00e9 imaginar uma liga\u00e7\u00e3o telef\u00f4nica, onde o telefone \u00e9 o socket, a voz os dados, a linha a conex\u00e3o e o n\u00famero o endere\u00e7o.<\/p>\n<h2>Como utilizar sockets em servidor php?<\/h2>\n<p>Agora que voc\u00ea j\u00e1 entendeu, vamos \u00e0 pr\u00e1tica, por partes:<\/p>\n<p>A primeira coisa a se fazer <strong>\u00e9 criar um socket utilizando os protocolos desejados<\/strong>. Nesse caso estamos definindo que ser\u00e1 uma conex\u00e3o s\u00edncrona TCP utilizando IPV4.<\/p>\n<p><img fetchpriority=\"high\" decoding=\"async\" class=\"aligncenter wp-image-18478 size-large\" src=\"https:\/\/cdn-cms.king.host\/blog-hlg\/uploads\/2018\/07\/socket-1-780x98.png\" alt=\"\" width=\"780\" height=\"98\" title=\"\" srcset=\"https:\/\/cdn-cms.king.host\/blog-hlg\/uploads\/2018\/07\/socket-1-780x98.png 780w, https:\/\/cdn-cms.king.host\/blog-hlg\/uploads\/2018\/07\/socket-1-300x38.png 300w, https:\/\/cdn-cms.king.host\/blog-hlg\/uploads\/2018\/07\/socket-1-768x97.png 768w, https:\/\/cdn-cms.king.host\/blog-hlg\/uploads\/2018\/07\/socket-1-400x50.png 400w, https:\/\/cdn-cms.king.host\/blog-hlg\/uploads\/2018\/07\/socket-1.png 1010w\" sizes=\"(max-width: 780px) 100vw, 780px\" \/><\/p>\n<p>O pr\u00f3ximo passo \u00e9 <strong>atribuir o endere\u00e7o em que o socket est\u00e1 sendo aberto<\/strong>. Lembrando que se a porta escolhida j\u00e1 estiver sendo usada, n\u00e3o vai funcionar.<\/p>\n<p><img decoding=\"async\" class=\"aligncenter wp-image-18479 size-large\" src=\"https:\/\/cdn-cms.king.host\/blog-hlg\/uploads\/2018\/07\/socket-2-780x108.png\" alt=\"\" width=\"780\" height=\"108\" title=\"\" srcset=\"https:\/\/cdn-cms.king.host\/blog-hlg\/uploads\/2018\/07\/socket-2-780x108.png 780w, https:\/\/cdn-cms.king.host\/blog-hlg\/uploads\/2018\/07\/socket-2-300x41.png 300w, https:\/\/cdn-cms.king.host\/blog-hlg\/uploads\/2018\/07\/socket-2-768x106.png 768w, https:\/\/cdn-cms.king.host\/blog-hlg\/uploads\/2018\/07\/socket-2-400x55.png 400w, https:\/\/cdn-cms.king.host\/blog-hlg\/uploads\/2018\/07\/socket-2.png 1021w\" sizes=\"(max-width: 780px) 100vw, 780px\" \/><\/p>\n<p>Agora n\u00f3s fazemos com que o socket <strong>espere uma conex\u00e3o<\/strong>:<\/p>\n<p><img decoding=\"async\" class=\"aligncenter wp-image-18480 size-large\" src=\"https:\/\/cdn-cms.king.host\/blog-hlg\/uploads\/2018\/07\/socket-3-780x101.png\" alt=\"\" width=\"780\" height=\"101\" title=\"\" srcset=\"https:\/\/cdn-cms.king.host\/blog-hlg\/uploads\/2018\/07\/socket-3-780x101.png 780w, https:\/\/cdn-cms.king.host\/blog-hlg\/uploads\/2018\/07\/socket-3-300x39.png 300w, https:\/\/cdn-cms.king.host\/blog-hlg\/uploads\/2018\/07\/socket-3-768x100.png 768w, https:\/\/cdn-cms.king.host\/blog-hlg\/uploads\/2018\/07\/socket-3-1024x133.png 1024w, https:\/\/cdn-cms.king.host\/blog-hlg\/uploads\/2018\/07\/socket-3-400x52.png 400w, https:\/\/cdn-cms.king.host\/blog-hlg\/uploads\/2018\/07\/socket-3.png 1111w\" sizes=\"(max-width: 780px) 100vw, 780px\" \/><\/p>\n<p>Assim que receber uma conex\u00e3o, \u00e9 necess\u00e1rio <strong>aceit\u00e1-la<\/strong>, para que possam ser feitas requisi\u00e7\u00f5es. Ap\u00f3s isso,<strong> a requisi\u00e7\u00e3o<\/strong> (neste caso, o que estiver no endere\u00e7o) <strong>\u00e9 lida<\/strong>. Dependendo se os arquivos existirem ou n\u00e3o, s\u00e3o retornadas as respectivas mensagens do servidor (200 para sucesso e 404 caso n\u00e3o exista o arquivo) e a p\u00e1gina \u00e9 apresentada ou aparece a mensagem de erro.<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter wp-image-18481 size-large\" src=\"https:\/\/cdn-cms.king.host\/blog-hlg\/uploads\/2018\/07\/socket-4-780x448.png\" alt=\"\" width=\"780\" height=\"448\" title=\"\" srcset=\"https:\/\/cdn-cms.king.host\/blog-hlg\/uploads\/2018\/07\/socket-4-780x448.png 780w, https:\/\/cdn-cms.king.host\/blog-hlg\/uploads\/2018\/07\/socket-4-300x172.png 300w, https:\/\/cdn-cms.king.host\/blog-hlg\/uploads\/2018\/07\/socket-4-768x441.png 768w, https:\/\/cdn-cms.king.host\/blog-hlg\/uploads\/2018\/07\/socket-4-1024x588.png 1024w, https:\/\/cdn-cms.king.host\/blog-hlg\/uploads\/2018\/07\/socket-4-400x230.png 400w, https:\/\/cdn-cms.king.host\/blog-hlg\/uploads\/2018\/07\/socket-4.png 1094w\" sizes=\"(max-width: 780px) 100vw, 780px\" \/><\/p>\n<p>Logo ap\u00f3s isso <strong>gravamos o buffer no socket<\/strong> <strong>e encerramos a conex\u00e3o<\/strong>, e fazemos com que isso se torne um <strong>loop<\/strong> para que continue sendo poss\u00edvel realizar requisi\u00e7\u00f5es.<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter wp-image-18482 size-large\" src=\"https:\/\/cdn-cms.king.host\/blog-hlg\/uploads\/2018\/07\/socket-5-780x300.png\" alt=\"\" width=\"780\" height=\"300\" title=\"\" srcset=\"https:\/\/cdn-cms.king.host\/blog-hlg\/uploads\/2018\/07\/socket-5-780x300.png 780w, https:\/\/cdn-cms.king.host\/blog-hlg\/uploads\/2018\/07\/socket-5-300x116.png 300w, https:\/\/cdn-cms.king.host\/blog-hlg\/uploads\/2018\/07\/socket-5-768x296.png 768w, https:\/\/cdn-cms.king.host\/blog-hlg\/uploads\/2018\/07\/socket-5-1024x394.png 1024w, https:\/\/cdn-cms.king.host\/blog-hlg\/uploads\/2018\/07\/socket-5-400x154.png 400w, https:\/\/cdn-cms.king.host\/blog-hlg\/uploads\/2018\/07\/socket-5.png 1083w\" sizes=\"(max-width: 780px) 100vw, 780px\" \/><\/p>\n<h2>Conclus\u00e3o Sockets em Servidor PHP<\/h2>\n<p>Pessoal, este foi um exemplo simples que mostra como pode ser f\u00e1cil <strong>tratar conex\u00f5es utilizando sockets<\/strong>, al\u00e9m de ser um bom exerc\u00edcio para praticar. (<em>Sei que voc\u00ea veio at\u00e9 aqui por causa daquele trabalho da faculdade, n\u00e9!<\/em> \ud83d\ude09 )<\/p>\n<p>Por hoje era isso pessoa! Espero que essa linguagem que basicamente \u201croda\u201d a Internet continue esse caminho de evolu\u00e7\u00e3o que vem tendo nesses 23 anos de hist\u00f3ria. E, claro, <strong>que seja cada vez mais vers\u00e1til, mais \u00fatil e mais robusta<\/strong>.<\/p>\n<p>Quer ler mais conte\u00fados sobre <a href=\"https:\/\/king.host\/blog\/tag\/php\/\" target=\"_blank\" rel=\"noopener\">PHP<\/a>? <strong>Se liga no\u00a0Blog da KingHost<\/strong>.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>O PHP fez anivers\u00e1rio h\u00e1 poucas semanas, mas aqui na KingHost ainda \u00e9 tempo de homenagear uma das linguagens mais usadas no mundo. Hoje vou exemplificar como usar sockets em servidor PHP de uma forma simples. Existem diversas formas de se fazer um servidor web, por\u00e9m muita gente subestima o poder do PHP. Ainda que [&hellip;]<\/p>\n","protected":false},"author":332,"featured_media":18484,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[1179,8],"tags":[1374],"class_list":["post-18477","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-desenvolvimento","category-tecnologia","tag-php"],"_links":{"self":[{"href":"https:\/\/king.host\/blog\/wp-json\/wp\/v2\/posts\/18477","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/king.host\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/king.host\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/king.host\/blog\/wp-json\/wp\/v2\/users\/332"}],"replies":[{"embeddable":true,"href":"https:\/\/king.host\/blog\/wp-json\/wp\/v2\/comments?post=18477"}],"version-history":[{"count":5,"href":"https:\/\/king.host\/blog\/wp-json\/wp\/v2\/posts\/18477\/revisions"}],"predecessor-version":[{"id":37385,"href":"https:\/\/king.host\/blog\/wp-json\/wp\/v2\/posts\/18477\/revisions\/37385"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/king.host\/blog\/wp-json\/wp\/v2\/media\/18484"}],"wp:attachment":[{"href":"https:\/\/king.host\/blog\/wp-json\/wp\/v2\/media?parent=18477"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/king.host\/blog\/wp-json\/wp\/v2\/categories?post=18477"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/king.host\/blog\/wp-json\/wp\/v2\/tags?post=18477"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}