O WordPress pode ser feito para suportar websockets?

15

Websockets é uma tecnologia moderna e inovadora, envolvida em HTML5. Basicamente, você pode abrir um websocket para permitir a comunicação bidirecional persistente com um servidor web. O cliente (interface do usuário) pode enviar mensagens espontaneamente, e o servidor também pode enviar mensagens.

Tecnologia existente (JavaScript) requer que tudo seja iniciado pelo cliente - o servidor não pode enviar nada para o cliente que o cliente não solicita. Portanto, os scripts precisam estar constantemente atualizando e solicitando novamente dados que podem não ter sido alterados. Os Websockets trabalham mais em uma base " push " e permitem que novos dados caiam no canal sempre que for necessário.

Infelizmente, a maioria (tudo que eu posso encontrar, pelo menos) implementações de websocket requer um aplicativo de servidor específico para funcionar. As pessoas executarão o Apache nas portas 80 e 443 (http e https) e executarão outro sistema (normalmente Node.js) em outra porta (ou seja, 8000 ou 8080) para manipular solicitações de websocket.

Isso funciona, obviamente, mas tem algumas desvantagens.

Eu tenho um plug-in que eu quero construir que seria muito beneficiado com o uso de websockets no WordPress. Mas, se um usuário precisar instalar um segundo servidor da Web (geralmente impossível para pessoas com hospedagem compartilhada), ele não funcionará como um plug-in.

Então, para qualquer um de vocês que tenha experiência, como você tornaria o WordPress compatível com websockets? Você faria o WordPress manipular a comunicação em si ou agrupar outro script de mini-servidor no plugin? Se você já fez isso, como você conseguiu isso sem quebrar o próprio WordPress?

Recursos possíveis?

Atualização 21/9/11

Com toda a conversa sobre como o Apache (o servidor mais comumente instalado para executar o WP em um host compartilhado) realmente não consegue lidar nativamente com websockets, estou pensando em uma alternativa. Vários plugins (JetPack, por exemplo) conversam com um serviço externo ou API para gerar conteúdo.

Stats solicita conteúdo da Automattic. O Akismet envia dados de um servidor externo. Após o prazo, o conteúdo é enviado no momento da publicação. Algumas ferramentas de SEO passam as coisas de um lado para o outro por meio de sistemas externos.

Então, como uma alternativa para hospedar o código do websocket dentro de um plug-in do WordPress, seria possível hospedar um serviço de websocket em um local central e ter um front-end do WordPress interagindo com ele?

    
por EAMann 19.09.2011 / 20:36

5 respostas

7

WebSockets usam o protocolo websockets: WS: /example.com/yourscript.js e abrem uma conexão síncrona - o que significa que a conexão é mantida aberta e dedicada ao navegador.

enlace

Como você pode imaginar, a manutenção de conexões abertas entre o navegador e o servidor dedica mais recursos do servidor a cada conexão do navegador e, portanto, é mais desgastante do que a perda de conexões após cada solicitação. Os provedores de hospedagem compartilhada são compreensivelmente pouco inclinados a suportar WS em hospedagem compartilhada.

Embora alguns hosts compartilhados possam ter o mod_python instalado, permitindo que os usuários do seu plug-in executem pywebsocket , a própria documentação do pywebsocket claramente declarar que "o pywebsocket é destinado a testes ou fins experimentais".

Assim, embora se possa imaginar um código de python de plug-in para criar um servidor pywebsocket, dado um servidor apache que o suporta, não acredito que seja razoável distribuir um plug-in que o tenha feito.

    
por marfarma 19.09.2011 / 22:27
3

Em resposta à sua atualização, na minha opinião e com base na pesquisa que fiz, essa seria a melhor opção. Melhor ainda seria criar o plug-in front-end e criar o serviço de websocket externo para conversar com os plug-ins e cobrar uma taxa para que você possa monetizar sua ideia, se desejar. Você pode até mesmo fornecer o código-fonte para o serviço websocket e criar uma configuração no plug-in para definir onde (qual domínio / IP e porta) o serviço websocket está localizado.

    
por user15143 13.04.2012 / 07:06
2

Esqueça o "clássico" apache2 - apache2-mpm-prefork - para este propósito. Talvez o apache2-mpm-event possa lidar com isso, mas é experimental. Como o apache2 não é orientado a eventos, o problema descrito por @marfarma existe. Você precisará de um servidor da Web orientado a eventos para esse tipo de serviço, por exemplo cherokee ou nginx.

nginx pode ser um benefício real para o WordPress (como wordpress.com usa como seu servidor também), e pode proxy especificado pedidos para um serviço node.js por exemplo.

Alguns exemplos no tópico:

Eu também fiz um pequeno tutorial para nginx + php-fpm + configuração wordpress .

    
por petermolnar 20.09.2011 / 08:04
1

Outra possível solução é usar um provedor de sockets de terceiros, eu brinquei um pouco com o Pusher (http://pusher.com/) um pouco, há uma API que você pode usar para funcionar bem pelo que você está tentando fazer. Eu estive contemplando como eu poderia fazer uso dele em meus próprios sites WordPress.

Uma possível desvantagem é que outras pessoas que tentam usar seu plug-in também precisam obter uma conta do Pusher para fazê-lo funcionar. É muito mais fácil trabalhar do que instalar seu próprio servidor Web Sockets e ter que mantê-lo, o que na verdade seria uma vantagem, na verdade, quando se trata de outras pessoas que tentam usar seu plugin.

    
por Rick Curran 21.09.2011 / 23:46
0

Resposta curta é: sim, é capaz de fazer. Eu poderia olhar para algo um pouco mais distribuído do que um único ponto de falha VPS que você hospeda, no entanto. Talvez olhar em alguns sistemas EC2 com balanceamento de carga ou algo assim? (Eu estou supondo que você tenha um fluxo de receita para fornecer tais conveniências. sorriso )

    
por ZaMoose 21.09.2011 / 21:22