IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> PHP知识库 -> PHP Swoole安装教程+简单使用(防坑)+宝塔Nginx配置wss -> 正文阅读

[PHP知识库]PHP Swoole安装教程+简单使用(防坑)+宝塔Nginx配置wss

观看本文之前 需要?一点点php知识 一个Linux服务器 本文完全原创 转载请标明出处

闲来没事研究一下Swoole 结果....弄了一个上午终于是了解了一点了 算是把坑全踩了一遍 记录一下

Swoole文档:https://wiki.swoole.com(不能傻瓜式操作 稍微看一点点理解是干嘛用的就ok)

1.安装:(win系统无法使用 请使用Linux系统 本文所有的操作都需要在Linux系统的服务器下执行)

首先说一下swoole是个什么东西 他和redis一样 不只是php的一个依赖而已 他自己本体也要去下载 这里就演示一下宝塔的安装方法 没有安装宝塔的请根据官方文档来进行安装

到软件商店页面 找到你使用的php版本(我的是7.3) 点设置

?点击安装扩展 往下翻找到Swoole4 点安装(我已经安过了 显示卸载)

?等待下载完后?Swoole算是安装完了 接下来随便写点来看看是否安装成功

2.简单使用(其一)

真气死了 没一点这个基础的萌新真的寸步难行 官方写的代码这个不行那个报错 也怨自己太菜 没办法

开放服务器端口 9502

找一个合适的文件夹 拍下ws_server.php文件 输入以下代码 具体是什么功能 等跑起来你就知道了

<?php

//创建WebSocket Server对象,监听0.0.0.0:9502端口
$ws = new Swoole\WebSocket\Server('0.0.0.0', 9502);

//监听WebSocket连接打开事件
$ws->on('Open', function ($ws, $request) {
    echo "进入者为::{$request->fd}\n";
});

//监听WebSocket消息事件
$ws->on('Message', function ($ws, $frame) {
    echo "接受到消息::{$frame->data}\n";
    $ws->push($frame->fd,"你刚刚发了: {$frame->data}");
});

//监听WebSocket连接关闭事件
$ws->on('Close', function ($ws, $fd) {
    echo "用户id::{$fd}离开\n";
});

$ws->start();

?>

然后命令框操作 打开这个文件的目录 输入php ws_server.php 正常来说的话你会看到这个场景

对就是换了个行(在完成简单使用其一后不要关闭 其二也要用)?记住关闭命令行的时候记得ctrl+c 结束这个进程 不然会一直执行 解决方法看下面

(如果没出问题请忽略) 如果有报错 请看这里:https://www.51zuso.com/admin/p/710.html(你的监听端口是9502 别忘了把9501改成9502 结束进程之后再php ws_server.php试一下)

开启成功之后 我们去尝试一下是否打开成功?打开网页:http://www.easyswoole.com/wstool.html? 服务器地址那一栏里输入 “ws://(这里是你刚刚开启服务器的ip地址 例如 127.0.5.123):9502” 之后点击开启连接

?看到如图消息代表你已经开启成功 你也可以设置一下发包什么的 很有趣的

3.简单使用(其二)+宝塔Nginx配置wss 下面内容请在会让域名显示出你所指定的网页这个前提下学习

到这里是我最火大的地方了 先上官方文档:https://wiki.swoole.com/#/start/start_ws_server(先看 别用)

程序代码我们已经写过了并运行了?接下来把这段代码设为运行程序的代码(记得把下面 '(!!你的服务器ip!!)' 替换成你的服务器ip 不是你的域名地址 )

<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta http-equiv="X-UA-Compatible" content="IE=edge" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>Document</title>
  </head>
  <body>
    <script>
      function initWebSocket(wsUri) {
        var websocket = new WebSocket(wsUri);
        websocket.onopen = function (evt) {
          console.log("连接建立中... " + wsUri);
        };
        websocket.onclose = function (evt) {
          console.log("连接关闭中...", evt);
        };
        websocket.onmessage = function (evt) {
          console.log("收到来自服务端的消息:", evt.data);
        };
        websocket.onerror = function (evt) {
          console.log("发生错误...", evt);
        };
        return websocket;
      }

      var websocket = initWebSocket("ws://(!!你的服务器ip!!):9502/");
      var msg,
        i = 0;
      var loop = setInterval(function () {
        msg = "Hello " + i++;
        if (websocket.readyState == WebSocket.OPEN) {
          websocket.send(msg);
          console.log("已发送消息:" + msg);
        } else {
          clearInterval(loop);
          console.log("连接已关闭,拜拜~");
        }
      }, 3000);
    </script>
  </body>
</html>

运行这个页面 打开控制台查看打印 会出现两种情况

1.如果你是http协议 告诉你已发送消息: 什么什么什么的(成功)

2.如果你是https协议 他会告诉你?Uncaught DOMException: The operation is insecure.(失败)

如果你非要成功一次的话 把网址中的https中的s删掉就可以了

至于删掉还会继续https的情况(大坑)?参考:https://www.jb51.net/article/213620.htm?或者是你设置过强制https??

但是在正常运行项目中不可能有http协议的客服端的 所以我们必须要解决第二种情况发生的错误

当你是ws://xxxxxxxx连接时 是不安全的 容易被窃听 所以https就直接不让你用 我们要去搞wss://xxxxxxxx这样的连接

宝塔Nginx配置wss:https://blog.csdn.net/zouxiaohu2020/article/details/108197640

完成之后回到运行程序的代码

// 把你之前的 'var websocket = initWebSocket("ws://(!!你的服务器ip!!):9502/");'
// 改成
var websocket = initWebSocket("wss://(!!你的域名 注意是域名不是ip!!)/wss");

再运行一下

?

发送成功 接受成功 接收后发送也成功?

难是不难 就是坑多 官方文档不说全增加难度 赶紧总结一下 下次可不想再走一遍坑了?不说了 摸会鱼

  PHP知识库 最新文章
Laravel 下实现 Google 2fa 验证
UUCTF WP
DASCTF10月 web
XAMPP任意命令执行提升权限漏洞(CVE-2020-
[GYCTF2020]Easyphp
iwebsec靶场 代码执行关卡通关笔记
多个线程同步执行,多个线程依次执行,多个
php 没事记录下常用方法 (TP5.1)
php之jwt
2021-09-18
上一篇文章      下一篇文章      查看所有文章
加:2021-07-31 16:22:59  更:2021-07-31 16:23:25 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年5日历 -2024/5/3 13:22:14-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码