É possível usar o Sockets.io no lado do cliente e se comunicar com um aplicativo baseado em PHP no servidor? O PHP ainda suporta uma maneira de 'conexão duradoura' de escrever código?
Todo o código de exemplo que encontro para socket.io parece ser para node.js no lado do servidor, portanto não há ajuda lá.
Respostas:
Pode ser um pouco tarde para que esta pergunta seja respondida, mas aqui está o que eu encontrei.
Eu não quero debater sobre o fato de que nós fazem isso melhor do que php ou não, esse não é o ponto.
A solução é: Eu não encontrei nenhuma implementação do socket.io para PHP.
Mas existem algumas maneiras de implementar WebSockets . Existe esse plug-in do jQuery, permitindo que você use Websockets enquanto degrada normalmente para navegadores que não suportam. No lado do PHP, existe essa classe que parece ser a mais usada para servidores PHP WS.
fonte
Se você quiser usar o socket.io junto com o php, esta pode ser sua resposta!
site do projeto:
elephant.io
eles também estão no github:
https://github.com/wisembly/elephant.io
O Elephant.io fornece um cliente socket.io totalmente escrito em PHP que deve ser usado em qualquer lugar do seu projeto.
É uma biblioteca leve e fácil de usar que visa trazer algumas funcionalidades em tempo real a um aplicativo PHP por meio do socket.io e websockets para ações que não poderiam ser executadas em javascript completo.
exemplo no site do projeto (comunique-se com o servidor websocket através do php)
servidor php
servidor de soquete io
fonte
ATUALIZAÇÃO: ago 2014 O site atual socket.io v1.0 possui um exemplo de PHP: - https://github.com/rase-/socket.io-php-emitter
fonte
Se você realmente deseja usar o PHP como back-end para o socket.io, aqui está o que eu encontrei. Alternativa do lado do servidor dois socket.io php.
https://github.com/walkor/phpsocket.io
https://github.com/RickySu/phpsocket.io
Códigos de exemplo para o primeiro repositório como este.
fonte
Para 'conexão de longa duração' que você mencionou, você pode usar o Ratchet for PHP. É uma biblioteca criada com base nas funções de Stream Socket que o PHP suporta desde o PHP 5.
Para o cliente, você precisa usar o WebSocket que o HTML5 suportou em vez do Socket.io (como você sabe, o socket.io funciona apenas com o node.js).
Caso você ainda queira usar o Socket.io, tente: - encontre e obtenha o socket.io.js para o cliente usar - trabalhe com o Ratchet para simular a maneira como o socket.io faz no servidor
Espero que isto ajude!
fonte
Erm, por que você quer? Deixe o PHP no back-end e o NodeJS / Sockets para fazer sua coisa sem bloqueio.
Aqui está algo para você começar: http://groups.google.com/group/socket_io/browse_thread/thread/74a76896d2b72ccc
Pessoalmente, tenho a execução expressa com um endpoint que está ouvindo expressamente a interação do PHP.
Por exemplo, se eu enviei um email a um usuário, desejo que o socket.io exiba uma notificação em tempo real para o usuário.
Deseja interação do socket.io para o php, bem, você pode fazer algo assim:
Sério, o PHP é ótimo para fazer coisas do lado do servidor e deixar as conexões que não têm lugar neste domínio agora. Por que fazer alguma pesquisa longa quando você tem soquetes da web ou soquetes de flash?
fonte
Eu conheço o homem da luta! Mas recentemente trabalhei com o Workerman. Se você ainda não encontrou este framework php, é melhor verificar isso!
Bem, Workerman é uma estrutura PHP assíncrona orientada a eventos para criar facilmente aplicativos de rede escaláveis e rápidos. (Apenas copiei e colei isso no site hahahah http://www.workerman.net/en/ )
A maneira mais fácil de explicar isso é que, quando se trata de programação de soquetes da Web, tudo o que você realmente precisa é ter 2 arquivos em seu servidor ou servidor local (onde quer que esteja trabalhando).
server.php (código fonte que responderá a todas as solicitações do cliente)
client.php / client.html (código fonte que fará os itens solicitados)
Então, basicamente, você primeiro corrige o código em seu server.php e inicia o servidor. Normalmente, como eu estou usando o Windows que adiciona mais dificuldades, eu executo o servidor através deste comando -> php server.php start
Bem, se você estiver usando o xampp. Aqui está uma maneira de fazer isso. Vá para onde você deseja colocar seus arquivos. No nosso caso, vamos colocar os arquivos em
C: /xampp/htdocs/websocket/server.php
C: /xampp/htdocs/websocket/client.php ou client.html
Supondo que você já tenha esses arquivos no servidor local. Abra seu Git Bash ou Linha de Comando ou Terminal ou o que você estiver usando e faça o download das bibliotecas php aqui.
https://github.com/walkor/Workerman
https://github.com/walkor/phpsocket.io
Normalmente, eu baixa-o via compositor e apenas carrego esses arquivos automaticamente nos meus scripts php.
E verifique também este. Isso é realmente importante ! Você precisa dessa biblioteca javascript para que o client.php ou o client.html se comunique com o server.php ao executá-lo.
https://github.com/walkor/phpsocket.io/tree/master/examples/chat/public/socket.io-client
Acabei de copiar e colar a pasta socket.io-client no mesmo nível que meu server.php e client.php
Aqui está o código do servidor server.php
E aqui está o client.php ou client.html sourcecode
Mais uma vez, abra sua linha de comando ou git bash ou terminal onde você coloca o arquivo server.php. Portanto, no nosso caso, é C: / xampp / htdocs / websocket / e digitado em php server.php start e pressione enter.
Em seguida, vá ao seu navegador e digite http: //localhost/websocket/client.php para visitar seu site. Em seguida, basta digitar qualquer coisa nessa caixa de texto e você verá um php websocket básico em movimento!
Você só precisa se lembrar. Na programação de soquetes da web, ele só precisa de um servidor e um cliente. Execute o código do servidor primeiro e abra o código do cliente. E aí está! Espero que isto ajude!
fonte
Se você realmente deseja usar o PHP como seu back-end para WebSockets, esses links podem ajudá-lo:
https://github.com/lemmingzshadow/php-websocket
http://www.htmlgoodies.com/html5/other/create-a-bi-directional-connection-to-a-php-server-using-html5-websockets.html#fbid=QqpDVi8FqD9
fonte
Que tal agora ? PHPSocketio ?? É uma alternativa ao servidor socket.io php. O loop de eventos é baseado na extensão de evento pecl. Embora ainda não tenha tentado isso até agora.
fonte
Estamos agora em 2018 e, hoola, existe uma maneira de implementar o WS e o WAMPServer no php. É chamado de catraca .
fonte
Ainda não tentei, mas você deve conseguir fazer isso com o ReactPHP e este componente de soquete . Parece com o Node, mas em PHP.
fonte
Procure nesta biblioteca php http://phptrends.com/category/70 . Ou use nativo do php http://www.php.net/manual/en/book.sockets.php .
fonte
Eu estava procurando uma maneira realmente simples de obter o PHP para enviar uma mensagem socket.io aos clientes.
Isso não requer nenhuma biblioteca PHP adicional - apenas usa soquetes.
Em vez de tentar conectar-se à interface do websocket como muitas outras soluções, basta conectar-se ao servidor node.js e usar
.on('data')
para receber a mensagem.Em seguida,
socket.io
envie-o aos clientes.Detecte uma conexão do seu servidor PHP no Node.js da seguinte maneira:
Aqui está o código php incrivelmente simples - envolvi-o em uma função - você pode criar algo melhor.
Observe que essa
8080
é a porta do meu servidor Node.js. Talvez você queira alterar.Você pode usá-lo assim:
sio_message("chat message","Hello from PHP!");
Você também pode enviar matrizes que são convertidas em json e repassadas aos clientes.
sio_message("DataUpdate",Array("Data1" => "something", "Data2" => "something else"));
Essa é uma maneira útil de "confiar" que seus clientes estão recebendo mensagens legítimas do servidor.
Você também pode fazer com que o PHP repasse as atualizações do banco de dados sem que centenas de clientes consultem o banco de dados.
Eu gostaria de ter encontrado isso antes - espero que ajude! 😉
fonte
s.remoteAddress;
. No entanto, não estou conseguindo fazer funcionar. Recebo a conexão no nó, ele detecta a conexão, o remoteaddress está correto, mass.on('data')
nunca acontece, mas nada acontece. Eus.on('msg')
também tentei . Estou usando o seu código PHP exato. Estou usando https, para o servidor do nó, mas isso não deve importar?8080
? Caso contrário, você precisará alterar a porta.Remote Address
Nesse caso, verifique o que está sendo retornado - verifique se é o endereço de loopback / local - pode ser diferente com a configuração do servidor. Para testar, você pode remover a linhaif(s.remoteAddress == "::ffff:127.0.0.1")