swoft socket
1.0.3
Swoft 기반 socket
구성 요소는 tcp/udp
다중 포트 모니터링을 지원합니다. 자세한 내용은 swoole wiki를 참조하세요.
composer require wp-breeder/swoft-socket
/project-to-path/config/properties/app
에 구성을 추가합니다. // 配置启动扫描
' bootScan ' => [
// code...
// 把 sockerListener 注解的目录添加到启动扫描
' AppListener '
],
// 指定扫描组件
' components ' => [
' custom ' => [
' Swoft \ Socket \'
],
],
/project-to-path/config/server
에 구성을 추가합니다. //for socket component
' server ' => [
//code ...
// socketable 配置是否开启socket监听
' socketable ' => env ( ' SOCKETABLE ' , false ),
],
// for socket component test
'socket' => [
[
' host ' => env ( ' SOCKET_TCP_HOST ' , ' 0.0.0.0 ' ),
' port ' => env ( ' SOCKET_TCP_PORT ' , 8010 ),
' mode ' => env ( ' SOCKET_TCP_MODE ' , SWOOLE_PROCESS ),
' type ' => env ( ' SOCKET_TCP_TYPE ' , SWOOLE_SOCK_TCP ),
//server 名称,必须设置,如果未设置则不监听(用于区分不同server 设置不同的回调,如果重复,则会覆盖)
//如果是单独开启,第一个不设置name则会报错
' name ' => ' tcp '
],
[
' host ' => env ( ' SOCKET_UDP_HOST ' , ' 0.0.0.0 ' ),
' port ' => env ( ' SOCKET_UDP_PORT ' , 8011 ),
' mode ' => env ( ' SOCKET_UDP_MODE ' , SWOOLE_PROCESS ),
' type ' => env ( ' SOCKET_UDP_TYPE ' , SWOOLE_SOCK_UDP ),
' name ' => ' udp '
],
],
rpc
와 http
혼합하여 사용새로운 주석
@SocketListener
추가되었습니다. 사용 방법은@ServerListener
와 거의 동일합니다. 차이점은 리스너가 수신하는 포트를 지정해야 한다는 것입니다.
/**
* 监听多个事件
* @SocketListener({
* SwooleEvent:: ON_CONNECT ,
* SwooleEvent:: ON_RECEIVE ,
* SwooleEvent:: ON_CLOSE ,
* },
* 监听端口的名称,与socket配置文件中的name对应(如重复则最后一个生效,不存在则监听不生效)
* name="tcp"
* )
rpc
, http
, ws
와 일치하여 단독으로 엽니다. (모니터가 여러 개인 경우 기본적으로 첫 번째 구성은 마스터 서버가 되고 다른 구성은 지정된 포트를 별도로 모니터링합니다) php bin/swoft socket:start
namespace SwoftTest Socket Testing Listeners ;
use Swoft Bootstrap Listeners Interfaces CloseInterface ;
use Swoft Bootstrap Listeners Interfaces ConnectInterface ;
use Swoft Bootstrap Listeners Interfaces ReceiveInterface ;
use Swoft Socket Bean Annotation SocketListener ;
use Swoft Socket Event SwooleEvent ;
use Swoole Server ;
/**
* tcp 监听 demo
* Class SocketListenerTest
* @package SwoftTestSocketTestingListeners
* @SocketListener({
* SwooleEvent::ON_CONNECT,
* SwooleEvent::ON_RECEIVE,
* SwooleEvent::ON_CLOSE,
* },
* name="tcp"
* )
*/
class TcpListener implements ReceiveInterface, CloseInterface, ConnectInterface
{
public function onConnect ( Server $ server , int $ fd , int $ reactorId )
{
echo " tcp connect " . PHP_EOL ;
}
public function onReceive ( Server $ server , int $ fd , int $ reactorId , string $ data )
{
echo " tcp receive data: " . $ data . PHP_EOL ;
}
public function onClose ( Server $ server , int $ fd , int $ reactorId )
{
echo " tcp close " . PHP_EOL ;
}
}
namespace SwoftTest Socket Testing Listeners ;
use Swoft Socket Event SwooleEvent ;
use Swoft Bootstrap Listeners Interfaces PacketInterface ;
use Swoft Socket Bean Annotation SocketListener ;
use Swoole Server ;
/**
* udp 监听 demo
* Class PacketListener
* @package SwoftTestSocketTestingListeners
* @SocketListener(event={SwooleEvent::ON_PACKET}, name="udp")
*/
class PacketListener implements PacketInterface
{
public function onPacket ( Server $ server , string $ data , array $ clientInfo )
{
echo " udp receive data: " . $ data ;
}
}
구성요소는 Apache 라이센스에 따라 라이센스가 부여된 오픈 소스 소프트웨어입니다.