创建一个简单的tcp服务,可持续的监听客户端的链接和请求php
libeventsocket
stream sockettcp
EV_READ | EV_PERSISToop
要义libevent对
stream_socket_server
和stream_socket_accept
产生的资源进行监听code
<?php /** * tcp 服务 socket链接 */ $base = event_base_new(); $event = event_new(); // 建立一个socket服务 $serv = stream_socket_server('0.0.0.0:8080'); // 设置对这个socket的事件监听,监听可持续读 event_set($event, $serv, EV_READ|EV_PERSIST, 'server_connect',[$event,$base]); event_base_set($event, $base); event_add($event); // 事件循环监听 event_base_loop($base); function server_connect($fd,$flags,$args) { $event = $args[0]; $base = $args[1]; echo "client connect...\n"; // 接收socket链接 $socket = stream_socket_accept($fd); $new_base = event_base_new(); $new_event = event_new(); // 对该链接进行监听,注意此处,若是创建了链接不对其进行accpet,那么将持续循环 event_set($new_event,$socket,EV_READ|EV_PERSIST,'get',[$new_event,$new_base]); event_base_set($new_event,$new_base); event_add($new_event); event_base_loop($new_base); } function get($fd,$flags,$args) { // 若是链接可读,读取内容 $buffer = fread($fd, 10000); echo "client send:$buffer\n"; // 发送给客户端内容 fwrite($fd,'Server:i have got your words -'.$buffer."\n"); }