[php] Socket.io와 함께 PHP 사용

클라이언트 측에서 Sockets.io를 사용하고 서버에서 PHP 기반 응용 프로그램과 통신 할 수 있습니까? PHP는 코드를 작성하는 ‘장기 연결’방식을 지원합니까?

socket.io에 대해 찾은 모든 샘플 코드는 서버 측의 node.js에 대한 것이므로 도움이되지 않습니다.



답변

이 질문에 대한 답변이 다소 늦을 수 있지만 여기에 내가 찾은 내용이 있습니다.

노드가 PHP보다 낫다는 사실에 대해서는 토론하고 싶지 않습니다. 이점이 아닙니다.

해결책은 : PHP 용 socket.io 구현을 찾지 못했습니다.

그러나 WebSocket 을 구현하는 몇 가지 방법이 있습니다 . 이 jQuery 플러그인 은 지원되지 않는 브라우저에 대해 정상적으로 성능을 저하시키면서 Websocket을 사용할 수 있도록합니다. PHP 측에는 PHP WS 서버에 가장 널리 사용되는 것으로 보이는 이 클래스 가 있습니다.


답변

php와 함께 socket.io를 사용하려면 이것이 당신의 대답 일 수 있습니다!

프로젝트 웹 사이트 :

elephant.io

그들은 또한 github에 있습니다 :

https://github.com/wisembly/elephant.io

Elephant.io는 프로젝트의 어느 곳에서나 사용할 수있는 PHP로 완전히 작성된 socket.io 클라이언트를 제공합니다.

전체 자바 스크립트에서 수행 할 수없는 작업을 위해 socket.io 및 웹 소켓을 통해 PHP 응용 프로그램에 일부 실시간 기능을 제공하는 것을 목표로하는 가볍고 사용하기 쉬운 라이브러리입니다.

프로젝트 웹 사이트의 예 (php를 통해 websocket 서버와 통신)

PHP 서버

use ElephantIO\Client as Elephant;

$elephant = new Elephant('http://localhost:8000', 'socket.io', 1, false, true, true);

$elephant->init();
$elephant->send(
    ElephantIOClient::TYPE_EVENT,
    null,
    null,
    json_encode(array('name' => 'foo', 'args' => 'bar'))
);
$elephant->close();

echo 'tryin to send `bar` to the event `foo`';

소켓 io 서버

var io = require('socket.io').listen(8000);

io.sockets.on('connection', function (socket) {
  console.log('user connected!');

  socket.on('foo', function (data) {
    console.log('here we are in action event and data is: ' + data);
  });
});


답변

업데이트 : 2014 년 8 월 현재 socket.io v1.0 사이트에는 PHP 예가 있습니다 : https://github.com/rase-/socket.io-php-emitter


답변

socket.io의 백엔드로 PHP를 실제로 사용하려면 여기에서 찾은 것이 있습니다. 2 개의 socket.io PHP 서버 측 대안.

https://github.com/walkor/phpsocket.io

https://github.com/RickySu/phpsocket.io

첫 번째 저장소에 대한 예제 코드는 이와 같습니다.

use PHPSocketIO\SocketIO;

// listen port 2021 for socket.io client
$io = new SocketIO(2021);
$io->on('connection', function($socket)use($io){
  $socket->on('chat message', function($msg)use($io){
    $io->emit('chat message', $msg);
  });
});


답변

언급 한 ‘장기 연결’의 경우 PHP 용 Ratchet을 사용할 수 있습니다. PHP 5부터 PHP가 지원 한 Stream Socket 함수를 기반으로 구축 된 라이브러리입니다.

클라이언트 측의 경우 Socket.io 대신 HTML5가 지원하는 WebSocket을 사용해야합니다 (소켓을 알고 있기 때문에 socket.io는 node.js에서만 작동 함).

여전히 Socket.io를 사용하려는 경우 다음과 같은 방법으로 시도 할 수 있습니다.

도움이 되었기를 바랍니다!


답변

음, 왜 하시겠습니까? 백엔드와 NodeJS / Socket에 PHP를 남겨두고 비 차단 작업을 수행하십시오.

시작하는 방법은 다음과 같습니다. http://groups.google.com/group/socket_io/browse_thread/thread/74a76896d2b72ccc

개인적으로 PHP와의 상호 작용을 명확하게 듣고있는 엔드 포인트로 달리는 것을 표현했습니다.

예를 들어, 사용자에게 전자 메일을 보낸 경우 socket.io가 사용자에게 실시간 알림을 표시하기를 원합니다.

socket.io에서 PHP로 상호 작용하기를 원한다면 다음과 같이 할 수 있습니다.

var http = require('http'),
            host = WWW_HOST,
            clen = 'userid=' + userid,
            site = http.createClient(80, host),
            request = site.request("POST", "/modules/nodeim/includes/signonuser.inc.php",
                {'host':host,'Content-Length':clen.length,'Content-Type':'application/x-www-form-urlencoded'});

request.write('userid=' + userid);
request.end();  

진지하게, PHP는 서버 측 작업에 적합하며 현재이 도메인에없는 연결과 함께 사용할 수 있습니다. 웹 소켓이나 플래시 소켓이있을 때 왜 긴 폴링을합니까?


답변

나는 투쟁 남자를 안다! 그러나 최근에는 Workerman과 거의 일했습니다. 이 PHP 프레임 워크를 우연히 발견하지 않은 경우이를 확인하는 것이 좋습니다!

Workerman은 빠르고 확장 가능한 네트워크 응용 프로그램을 쉽게 구축 할 수있는 비동기 이벤트 중심 PHP 프레임 워크입니다. (방금 웹 사이트 hahahah http://www.workerman.net/en/ 에서 복사하여 붙여 넣었습니다 . )

이것을 설명하는 쉬운 방법은 웹 소켓 프로그래밍과 관련하여 실제로 필요한 것은 서버 또는 로컬 서버 (작업하는 곳마다)에 2 개의 파일을 두는 것입니다.

  1. server.php (모든 클라이언트 요청에 응답 할 소스 코드)

  2. client.php / client.html (요청하는 것들을 수행 할 소스 코드)

따라서 기본적으로 server.php 의 코드를 먼저 작성 하고 서버를 시작하십시오. 일반적으로 더 많은 어려움을 겪는 창을 사용함에 따라이 명령을 통해 서버를 실행합니다-> php server.php start

xampp를 사용한다면 좋습니다. 한 가지 방법이 있습니다. 파일을 넣고 싶은 곳으로 이동하십시오. 우리의 경우, 우리는 파일을 넣을 것입니다

C : /xampp/htdocs/websocket/server.php

C : /xampp/htdocs/websocket/client.php 또는 client.html

로컬 서버에 해당 파일이 있다고 가정합니다. Git Bash, 커맨드 라인 또는 터미널을 열거 나 여기에서 PHP 라이브러리를 사용하여 다운로드하십시오.

https://github.com/walkor/Workerman

https://github.com/walkor/phpsocket.io

나는 보통 작곡가를 통해 다운로드하고 PHP 스크립트에서 해당 파일을 자동로드합니다.

또한 이것도 확인하십시오. 이것은 정말 중요합니다 ! client.php 또는 client.html이 server.php 와 통신 하려면이 자바 스크립트 라이브러리가 필요합니다. 실행할 때 합니다.

https://github.com/walkor/phpsocket.io/tree/master/examples/chat/public/socket.io-client

방금 내 server.php 및 client.php와 동일한 수준에서 socket.io-client 폴더를 복사하여 붙여 넣었습니다.

다음은 server.php 소스 코드입니다

<?php
require __DIR__ . '/vendor/autoload.php';

use Workerman\Worker;
use PHPSocketIO\SocketIO;

// listen port 2021 for socket.io client
$io = new SocketIO(2021);
$io->on('connection', function($socket)use($io){
    $socket->on('send message', function($msg)use($io){
        $io->emit('new message', $msg);
    });
});

Worker::runAll();

그리고 여기 client.php 또는 client.html 소스 코드가 있습니다

<!DOCTYPE html>
<html>
    <head>
        <title>Chat</title>
        <meta charset="UTF-8">
        <meta name="viewport" content="width=device-width, initial-scale=1.0">
    </head>
    <body>
        <div id="chat-messages" style="overflow-y: scroll; height: 100px; "></div>
        <input type="text" class="message">
    </body>
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
    <script src="socket.io-client/socket.io.js"></script>
    <script>
            var socket = io.connect("ws://127.0.0.1:2021");

            $('.message').on('change', function(){
                socket.emit('send message', $(this).val());
                $(this).val('');
            });

            socket.on('new message', function(data){
                $('#chat-messages').append('<p>' + data +'</p>');
            });
    </script>
</html>

다시 한 번, server.php 파일을 넣은 명령 행 또는 git bash 또는 터미널을여십시오. 따라서 우리의 경우 C : / xampp / htdocs / websocket /이며 php server.php start에 입력하고 Enter 키를 누릅니다.

그런 다음 브라우저로 이동하여 http : //localhost/websocket/client.php 를 입력 하여 사이트를 방문하십시오. 그런 다음 해당 텍스트 상자에 아무것도 입력하지 않으면 이동 중에 기본 PHP 웹 소켓이 표시됩니다!

당신은 단지 기억해야합니다. 웹 소켓 프로그래밍에서는 서버와 클라이언트 만 있으면됩니다. 서버 코드를 먼저 실행하고 클라이언트 코드를여십시오. 그리고 당신은 그것을 가지고 있습니다! 도움이 되었기를 바랍니다!