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 小米 华为 单反 装机 图拉丁
 
   -> 网络协议 -> Swoole -> 正文阅读

[网络协议]Swoole

什么是websockt?

websocket协议是基于TCP的一种新的网络协议。它实现了浏览器与服务器全双工(full-duplex)通信—— 允许服务器主动发送信息给客户端。

为什么需要websocket

缺陷:HTTP的同学只能有客户端发起

WebSocket 特点

建立在TCP协议之上
性能开销小通信高效
客户端可以与任意服务器通信
协议标识符ws wss
持久化网络通信协议

Swoole WebSocket服务

服务端示例

t.php

<?php
/*
0.0.0.0 代表本机IP和所有内外网IP
*/
$server = new Swoole\WebSocket\Server("0.0.0.0", 8818);

// set 用于设置运行时的各项参数。服务器启动后通过 $serv->setting 来访问 Server->set 方法设置的参数数组。
$server->set(
  [
  //开启静态文件请求处理功能,需配合 document_root 使用 默认 false
    'enable_static_handler'=>true,
    //配置静态文件根目录,与 enable_static_handler 配合使用。v4.4.0以下版本, 此处必须为绝对路径
    'document_root'=>"/www/wwwroot/test.cc",
  ]
);

//监听websocket连接打开事件
$server->on("open","onOpen");
function onOpen($server,$request){
  print_r($request->fd.'_打开的连接');
  echo PHP_EOL;
}

// 监听ws消息事件
$server->on('message', function (Swoole\WebSocket\Server $server, $frame) {
    echo "收到连接_{$frame->fd}发送的信息:{$frame->data},opcode:{$frame->opcode},fin:{$frame->finish}\n";
    $server->push($frame->fd, "后台返回给前台的信息:willem-push-sucsess");
});

$server->on('close', function ($ser, $fd) {
    echo "client {$fd} closed\n";
});

$server->start();

文件位置在linux的项目根目录。

前端示例

t.html

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>client</title>
</head>

<h1>willem-swoole-ws测试</h1>

<script>
  var wsUrl = "ws://test.cc:8818";
  var websocket=new WebSocket(wsUrl);
  //实例对象的onopen属性
  websocket.onopen=function(evt){
    websocket.send("发送 hello-willem");
    console.log("conected-swoole-success");
  }
  //实例化 onmessage
  websocket.onmessage=function(evt){
	alert(evt.data+":接收到后端发来的信息弹窗");
    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>

</body>
</html>

这个代码在Windows的随便一个地方存HTML即可。

应用

1 运行程序

在这里插入图片描述

2 预览

在这里插入图片描述
在这里插入图片描述

3 代码优化

Ws.php

<?php
/*ws 优化 基础类库*/
class Ws{
  CONST HOST = "0.0.0.0";
  CONST PORT = 8812;
  public $ws = null;
  public function __construct(){
    $this->ws = new Swoole\WebSocket\Server("0.0.0.0",8818);
    
    $this->ws->on("open",[$this,"onOpen"]);
    $this->ws->on("message",[$this,"onMessage"]); 
    $this->ws->on("close",[$this,"onClose"]);
    $this->ws->start();
  }

  # 监听ws连接事件
  public function onOpen($ws,$request){
    var_dump($request->fd);
  }

  # 监听ws消息事件
  public function onMessage($ws,$frame){
    echo "收到连接_{$frame->fd}发送的信息:{$frame->data},opcode:{$frame->opcode},fin:{$frame->finish}\n";
    $ws->push($frame->fd, "后台返回给前台的信息:willem-push-sucsess".date("Y-m-d H:i:s"));
  }

  # close
  public function onClose($ws,$fd){
    echo "client:{$fd}\n";
  }

}

$obj=new Ws();

在这里插入图片描述
在这里插入图片描述

  网络协议 最新文章
使用Easyswoole 搭建简单的Websoket服务
常见的数据通信方式有哪些?
Openssl 1024bit RSA算法---公私钥获取和处
HTTPS协议的密钥交换流程
《小白WEB安全入门》03. 漏洞篇
HttpRunner4.x 安装与使用
2021-07-04
手写RPC学习笔记
K8S高可用版本部署
mySQL计算IP地址范围
上一篇文章      下一篇文章      查看所有文章
加:2021-08-11 12:47:32  更:2021-08-11 12:47:40 
 
开发: 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年11日历 -2024/11/25 19:44:44-

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