Swoole网络socket开发框架,如何编写服务器端

 

 

Swoole提供了一套网络类,可以方便地开发出一个网络程序。Swoole提供了底层TCP和UDP支持,用户无需关心底层socket,只需实现一个协议Protocol,就可以实现一个网络服务器端。现在WebGame如此盛行,很多游戏开发者都选择PHP,但是由于没有成型的网络开发框架,只能依赖Apache,Nginx等Web服务器,只能基于HTTP协议。

现在有了Swoole网络框架,PHP程序员们也可以很轻松写出高性能的网络服务器。Swoole提供了BlockTCP,SelectTCP,EventTCP3种TCP Server驱动和BlockUDP,SelectUDP,EventUDP3种UDP Server驱动。

BlockTCP:每次只能处理1个请求,完成后关闭client socket才可以accept新的客户端连接。HTTP协议可以使用此驱动。此驱动可以用在Windows系统下

SelectTCP:使用select实现多路复用,可同时维持多个客户端连接,因为select也是轮询的,并发如果很高效率会比较低。此驱动可以用在Windows系统下

EventTCP:使用基于libevent扩展的事件模型,使用epoll系统通知的方式,在高并发的情况下,效率也非常高。此驱动只能用于Linux系统下

使用Swoole开发服务器端,只需要编写Potocol类即可,Driver可以任意替换。首先生成一个驱动类,然后通过setProtocol方法,设置使用哪种协议。在协议中,编写回调函数的处理方法。在Protocol,通过条调用$this->server->send,$this->server->sendAll,$this->server->close实现网络操作。

 另外Swoole也提供了spawn函数,在Linux环境下,可以Fork出多个进程。可实现并行,充分利用多核,单进程阻塞不影响服务。因PHP没有实现多线程,目前没有提供多线程驱动。

default_port); $server->setProtocol($protocol); $server->run(); //协议类必须实现Swoole_TCP_Server_Protocol接口 class ChatServer implements Swoole_TCP_Server_Protocol { public $default_port = 8080; //接收到数据时调用此函数 function onRecive($client_id,$data) { $this->server->send($client_id,"hello"); //向某个客户端发送信息 $this->server->sendAll("$client_id login"); //向全体客户端发送信息,BlockTCP不支持此方法 } //服务器启动 function onStart() { } //服务器关闭 function onShutdown() { } //客户端关闭 function onClose($client_id) { } //有客户端连接到服务器 function onConnect($client_id) { } }

 

 

 

你可能感兴趣的:(PHP编程)