Linux下源码包安装Swoole及基本使用操作图文详解


Posted in PHP onApril 02, 2019

本文实例讲述了Linux下源码包安装Swoole及基本使用操作。分享给大家供大家参考,具体如下:

下载Swoole PECL扩展源码包:http://pecl.php.net/package/swoole

关于PHP版本依赖选择:

Linux下源码包安装Swoole及基本使用操作图文详解

下载好放到/usr/local/src下,解压缩:

tar -zxvf swoole-2.2.0.tgz

准备扩展安装编译环境:

phpize

Linux下源码包安装Swoole及基本使用操作图文详解

查看php-config位置:

find / -name php-config

Linux下源码包安装Swoole及基本使用操作图文详解

配置:(--with-php-config==后面是你自己的php-config位置)

./configure --with-php-config=/www/server/php/72/bin/php-config

编译安装:

make && make install

Linux下源码包安装Swoole及基本使用操作图文详解

在php.ini里面加一行 :

extension = swoole.so

使用 php -m 命令查看swoole扩展已经安装成功:

Linux下源码包安装Swoole及基本使用操作图文详解

查看phpinfo信息:

Linux下源码包安装Swoole及基本使用操作图文详解

(测试前说明:以下使用的端口,要确认服务器放行,宝塔环境还需要添加安全组规则)

【创建TCP服务器】

创建server.php:

<?php
  //创建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();

启动TCP服务:

php server.php

查看9501端口已被监听:

netstat -an | grep 9501

Linux下源码包安装Swoole及基本使用操作图文详解

使用telnet连接TCP服务,输入hello,服务器返回hello即测试成功:

telnet 127.0.0.1 9501

Linux下源码包安装Swoole及基本使用操作图文详解

(如果telnet工具没有安装,执行yum install telnetyum install telnet-server

也可以写一个TCP客户端连接TCP服务器端:

创建tcp_client.php:

<?php
  //创建Client对象,监听 127.0.0.1:9501端口
  $client = new swoole_client(SWOOLE_SOCK_TCP); 

  if(!$client->connect("127.0.0.1" ,9501)){
	echo "连接失败";
	exit;
  }

  //向tcp服务器发送消息
  fwrite(STDOUT, "请输入:");
  $msg = trim(fgets(STDIN));
  $client->send($msg);

  //接受tcp服务器消息
  $result = $client->recv();
  echo $result;

启动tcp客户端:

php tcp_client.php

测试结果: 

Linux下源码包安装Swoole及基本使用操作图文详解

【创建UDP服务器】

创建udp_server.php:

<?php
  //创建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();

启动UDP服务:

php udp_server.php

查看9502端口已被监听:

netstat -an | grep 9502

Linux下源码包安装Swoole及基本使用操作图文详解

使用netcat连接UDP服务,输入hello,服务器返回hello即测试成功(CentOS):

nc -u 127.0.0.1 9502

 Linux下源码包安装Swoole及基本使用操作图文详解

(如果没有安装netcat监听器,执行yum install -y nc

【创建Web服务器】

创建http_server.php:

<?php
  $http = new swoole_http_server("0.0.0.0", 9501);
  
  //配置静态文件根目录(可选)
  $http->set([
    'document_root' => '/www/wwwroot/lwsblog',
    'enable_static_handler' => true,
  ]);

  $http->on('request', function ($request, $response) {
    var_dump($request->get, $request->post);
    
    //设置header
    $response->header("Content-Type", "text/html; charset=utf-8");

    //设置cookie
    $response->cookie("name", "lws", time()+3600);

    //发送Http响应体,并结束请求处理。
    $response->end("<h1>Hello Swoole. #".rand(1000, 9999)."</h1>");
  });

  $http->start();

启动服务:

php http_server.php

(如果9501端口已经被占用查看进程PID,杀死进程:)

Linux下源码包安装Swoole及基本使用操作图文详解

lsof -i:9501

Linux下源码包安装Swoole及基本使用操作图文详解

kill 9013

浏览器访问主机地址:端口号,得到程序预期结果即测试成功:

Linux下源码包安装Swoole及基本使用操作图文详解

【创建WebSocket服务器】

创建ws_server.php:

<?php
  //创建websocket服务器对象,监听0.0.0.0:9501端口
  $ws = new swoole_websocket_server("0.0.0.0", 9501);
  
  //配置静态文件根目录(可选)
  $ws ->set([
    'document_root' => '/www/wwwroot/lwsblog',
    'enable_static_handler' => true,
  ]);

  //监听WebSocket连接打开事件
  $ws->on('open', function ($ws, $request) {
    var_dump($request->fd, $request->get, $request->server);
    $ws->push($request->fd, "hello, welcome\n");
  });

  //监听WebSocket消息事件
  $ws->on('message', function ($ws, $frame) {
    echo "Message: {$frame->data}\n";
    $ws->push($frame->fd, "server: {$frame->data}");
  });

  //监听WebSocket连接关闭事件
  $ws->on('close', function ($ws, $fd) {
    echo "client-{$fd} is closed\n";
  });

  $ws->start();

运行程序:(这里还是要确认监听的端口没有被占用,如果被占用查看进程PID,杀死进程)

php ws_server.php

前端页面js监听:(127.0.0.1改成你的主机地址)

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>WebSocket</title>
</head>
<body>
</body>

<script type="text/javascript">
var wsServer = 'ws://127.0.0.1:9501';
var websocket = new WebSocket(wsServer);
websocket.onopen = function (evt) {
  console.log("Connected to WebSocket server.");
};

websocket.onclose = function (evt) {
  console.log("Disconnected");
};

websocket.onmessage = function (evt) {
  console.log('Retrieved data from server: ' + evt.data);
};

websocket.onerror = function (evt, e) {
  console.log('Error occured: ' + evt.data);
};
</script>
</html>

使用谷歌浏览器访问前端页面:

Linux下源码包安装Swoole及基本使用操作图文详解

服务器端收到请求信息:

Linux下源码包安装Swoole及基本使用操作图文详解

希望本文所述对大家PHP程序设计有所帮助。

PHP 相关文章推荐
PHP基础学习小结
Apr 17 PHP
PHP取得一个类的属性和方法的实现代码
May 22 PHP
Apache中php.ini的设置方法
Feb 28 PHP
PHP采集静态页面并把页面css,img,js保存的方法
Dec 23 PHP
PHP实现GIF图片验证码
Nov 04 PHP
使用PHP uniqid函数生成唯一ID
Nov 18 PHP
PHP使用数组依次替换字符串中匹配项
Jan 08 PHP
php session实现多级目录存放实现代码
Feb 03 PHP
利用php做服务器和web前端的界面进行交互
Oct 31 PHP
php读取qqwry.dat ip地址定位文件的类实例代码
Nov 15 PHP
php防止sql注入的方法详解
Feb 20 PHP
laravel框架使用极光推送消息操作示例
Feb 15 PHP
Laravel 中创建 Zip 压缩文件并提供下载的实现方法
Apr 02 #PHP
phpStorm+XDebug+chrome 配置详解
Apr 01 #PHP
PHP+Oracle本地开发环境搭建方法详解
Apr 01 #PHP
phpstorm 配置xdebug的示例代码
Mar 31 #PHP
PHP文件后缀不强制为.php方法
Mar 31 #PHP
PHP中md5()函数的用法讲解
Mar 30 #PHP
php+mysql开发的最简单在线题库(在线做题系统)完整案例
Mar 30 #PHP
You might like
单位速度在实战中的运用
2020/03/04 星际争霸
CI框架中site_url()和base_url()的区别
2015/01/07 PHP
PHP实现的随机IP函数【国内IP段】
2016/07/20 PHP
javascript 当前日期加(天、周、月、年)
2009/08/09 Javascript
GridView中获取被点击行中的DropDownList和TextBox中的值
2013/07/18 Javascript
js取模(求余数)隔行变色
2014/05/15 Javascript
JS动态日期时间的获取方法
2015/09/28 Javascript
详解javascript数组去重问题
2015/11/06 Javascript
浅谈JavaScript 执行环境、作用域及垃圾回收
2016/05/31 Javascript
js获取当前年月日-YYYYmmDD格式的实现代码
2016/06/01 Javascript
JavaScript数据类型和变量_动力节点Java学院整理
2017/06/26 Javascript
浅谈angular.copy() 深拷贝
2017/09/14 Javascript
对angular 监控数据模型变化的事件方法$watch详解
2018/10/09 Javascript
vue 双向数据绑定的实现学习之监听器的实现方法
2018/11/30 Javascript
Vue自定义指令结合阿里云OSS优化图片的实现方法
2019/11/12 Javascript
python将MongoDB里的ObjectId转换为时间戳的方法
2015/03/13 Python
python万年历实现代码 含运行结果
2017/05/20 Python
ubuntu安装mysql pycharm sublime
2018/02/20 Python
python:pandas合并csv文件的方法(图书数据集成)
2018/04/12 Python
Python中的Django基本命令实例详解
2018/07/15 Python
python 3调用百度OCR API实现剪贴板文字识别
2018/09/04 Python
Python图像处理库PIL的ImageDraw模块介绍详解
2020/02/26 Python
Python求区间正整数内所有素数之和的方法实例
2020/10/13 Python
Python 数据分析之逐块读取文本的实现
2020/12/14 Python
html5标记文字_动力节点Java学院整理
2017/07/11 HTML / CSS
英国领先的在线药房:Pharmacy First
2017/09/10 全球购物
荷兰浴室和卫浴网上商店:Badkamerxxl.nl
2020/10/06 全球购物
Linux常见面试题
2016/10/04 面试题
不同浏览器创建XMLHttpRequest方法有什么不同
2014/11/17 面试题
《冬阳童年骆驼队》教学反思
2014/04/15 职场文书
习总书记三严三实学习心得体会
2014/10/13 职场文书
2014年学校法制宣传日活动总结
2014/11/01 职场文书
放弃继承权公证书
2015/01/23 职场文书
2015年七一建党节慰问信
2015/03/23 职场文书
初中体育教学随笔
2015/08/15 职场文书
总结三种用 Python 作为小程序后端的方式
2022/05/02 Python