PHP의 swoole 프레임워크를 사용하여 고성능 장기 연결 웹소켓 구현

WBOY
풀어 주다: 2016-07-29 09:14:39
원래의
1891명이 탐색했습니다.

Swoole 공식 홈페이지는 http://www.swoole.com/ 에서 확인하세요.
swoole-git: https://github.com/swoole/swoole-src

1. 서버 측:

1. server.php 파일을 다음과 같이 편집합니다. :

<code><span><span><?php</span><span>$reqs</span>=<span>array</span>(); <span>//保持客户端的长连接在这个数组里</span><span>$serv</span> = <span>new</span> swoole_websocket_server(<span>"192.168.2.115"</span>, <span>9502</span>);
<span>//如下可以设置多端口监听</span><span>//$server = new swoole_websocket_server("0.0.0.0", 9501, SWOOLE_BASE);</span><span>//$server->addlistener('0.0.0.0', 9502, SWOOLE_SOCK_UDP);</span><span>//$server->set(['worker_num' => 4]);</span><span>$serv</span>->on(<span>'Open'</span>, <span><span>function</span><span>(<span>$server</span>, <span>$req</span>)</span> {</span><span>global</span><span>$reqs</span>;
    <span>$reqs</span>[]=<span>$req</span>->fd;
    <span>echo</span><span>"connection open: "</span>.<span>$req</span>->fd.<span>"\n"</span>;
    var_dump(count(<span>$reqs</span>));<span>//输出长连接数</span>
});

<span>$serv</span>->on(<span>'Message'</span>, <span><span>function</span><span>(<span>$server</span>, <span>$frame</span>)</span> {</span><span>global</span><span>$reqs</span>;
    <span>echo</span><span>"message: "</span>.<span>$frame</span>->data.<span>"\n"</span>;
    <span>foreach</span>(<span>$reqs</span><span>as</span><span>$fd</span>){
            <span>$server</span>->push(<span>$fd</span>, <span>$frame</span>->data);
    }
});

<span>$serv</span>->on(<span>'Close'</span>, <span><span>function</span><span>(<span>$server</span>, <span>$fd</span>)</span> {</span><span>echo</span><span>"connection close: "</span>.<span>$fd</span>.<span>"\n"</span>;
});

<span>$serv</span>->start();</span></code>
로그인 후 복사

2. 위에 구현된 websocket 서비스 코드를 시작합니다.

<code>[songaimin<span>@localhost</span><span>Tests</span>]<span>$/</span>usr/bin/php server.php</code>
로그인 후 복사

클라이언트-동료가 두 개의 브라우저를 열어 여러 클라이언트를 시뮬레이션합니다.

3. 브라우저 콘솔:

<code>ws = <span>new</span> WebSocket(wsl);<span>//新建立一个连接</span><span>//如下指定事件处理 </span>
ws.onopen = <span><span>function</span><span>()</span>{</span>ws.send(<span>'Test!'</span>); };  
ws.onmessage = <span><span>function</span><span>(evt)</span>{</span>console.log(evt.data);<span>/*ws.close();*/</span>};  
ws.onclose = <span><span>function</span><span>(evt)</span>{</span>console.log(<span>'WebSocketClosed!'</span>);};  
ws.onerror = <span><span>function</span><span>(evt)</span>{</span>console.log(<span>'WebSocketError!'</span>);}; </code>
로그인 후 복사

4. 모든 브라우저의 콘솔에서 수동으로 실행:

<code>ws.send<span>(888</span>);
<span>//看每个浏览器的内容console输出应该是一样的就实验在成功了</span>
ws.<span>close</span>();<span>//关闭连接</span></code>
로그인 후 복사

관련 추천 글:
swoole에서 구현한 실시간 채팅방 http://segmentfault.com/a/1190000003057118

위 내용은 내용의 측면을 포함하여 고성능 장기 연결 웹소켓을 달성하기 위한 PHP의 swoole 프레임워크 사용을 소개합니다. PHP 튜토리얼에 관심이 있는 친구들에게 도움이 되기를 바랍니다.

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿