PHP.ini 添加swoole
extension=swoole
创建tcp服务器
//创建Server对象,监听 127.0.0.1:9501端口
$serv = new swoole_server("127.0.0.1", 9501);
//监听连接进入事件
$serv->on('connect', function ($serv, $fd) {
echo "Client: Connect.\n";
});
//监听数据接收事件
$serv->on('receive', function ($serv, $fd, $from_id, $data) {
$serv->send($fd, "Server: ".$data);
});
//监听连接关闭事件
$serv->on('close', function ($serv, $fd) {
echo "Client: Close.\n";
});
//启动服务器
$serv->start();
创建udp服务器
//创建Server对象,监听 127.0.0.1:9502端口,类型为SWOOLE_SOCK_UDP
$serv = new swoole_server("127.0.0.1", 9502, SWOOLE_PROCESS, SWOOLE_SOCK_UDP);
//监听数据接收事件
$serv->on('Packet', function ($serv, $data, $clientInfo) {
$serv->sendto($clientInfo['address'], $clientInfo['port'], "Server ".$data);
var_dump($clientInfo);
});
//启动服务器
$serv->start();
创建http服务器
use Swoole\http\server;
$http = new Server("127.0.0.1",9501);
$http->on('request',function($request,$response){
$response->end("<h1>Hello Swoole. #".rand(1000,9999)."</h1>");
});
$http->start();
swoole websocket服务
websocket特点
- 建立在TCP协议之上
- 性能开销小通信高效
- 客户端可以与任意服务器通信
- 协议表示符ws wss
- 持久化网络通信协议
swoole 增加内置了websocket 服务器支持
$server =new swoole_websocket_server('0.0.0.0',9501);
$server->on('open',function(){
});
$server->on('message',function(){
});
$server->on('close',function(){
});
$server->start();
websocket 提供了三个回调函数 其中onmessage是必选, onHandShake,onOpen函数为可选
<script>
var wsUrl = "ws://singwa.swoole.com:8812";
var websocket = new WebSocket(wsUrl);
//实例对象的onopen属性
websocket.onopen = function(evt) {
websocket.send("hello-sinwa");
console.log("conected-swoole-success");
}
// 实例化 onmessage
websocket.onmessage = function(evt) {
console.log("ws-server-return-data:" + evt.data);
}
//onclose
websocket.onclose = function(evt) {
console.log("close");
}
//onerror
websocket.onerror = function(evt, e) {
console.log("error:" + evt.data);
}
</script>
swoole_websocket_server 继承自 swoole_http_server
- 设置了 onRequest 回调,websocket服务器也可以同时作为http服务器
- 未设置 onRequest 回调,websocket服务器收到http请求会返回http 400 错误
websocket 服务优化