这一上机实验的开发环境用的是jetbrain公司的phpstorm

上级步骤如下:

  • 创建websocket服务端
<?php
$server = new swoole_websocket_server('127.0.0.1',);
function onopen($serv,$request)
{
echo "成功开启,已经为标示符".$request->fd."打开连接\n";
}
$server->on('open','onopen');
$server->on('message',function(swoole_websocket_server $sw,$frame)
{
echo "opcode操作符---{$frame->opcode};操作数据---{$frame->data};fd数据来自句柄
---{$frame->fd};finish结束符号{$frame->finish}.\n";
$sw->push($frame->fd,"推送的数据".$frame->data);//数据大小不过2M
});
$server->on('close',function($serv,$fd)
{
echo "来自{$fd}的通信结束\n";
});
$server->start();
?>
  • 准备一个html页面,并在页面中附上websocket协议脚本
<!doctype html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
<meta name="description" content="">
<meta name="author" content="">
<link rel="icon" href="../../../../favicon.ico"> <title>websocket协议</title> <!-- Bootstrap core CSS -->
<link href="../css/bootstrap.min.css" rel="stylesheet"> <!-- Custom styles for this template -->
<link href="../mycss/sticky-footer-navbar.css" rel="stylesheet">
</head> <body> <header>
<!-- Fixed navbar -->
<nav class="navbar navbar-expand-md navbar-dark fixed-top bg-dark">
<a class="navbar-brand" href="#">Fixed navbar</a>
<button class="navbar-toggler" type="button" data-toggle="collapse" data-target="#navbarCollapse" aria-controls="navbarCollapse" aria-expanded="false" aria-label="Toggle navigation">
<span class="navbar-toggler-icon"></span>
</button>
<div class="collapse navbar-collapse" id="navbarCollapse">
<ul class="navbar-nav mr-auto">
<li class="nav-item active">
<a class="nav-link" href="#">Home <span class="sr-only">(current)</span></a>
</li>
<li class="nav-item">
<a class="nav-link" href="#">Link</a>
</li>
<li class="nav-item">
<a class="nav-link disabled" href="#">Disabled</a>
</li>
</ul>
<form class="form-inline mt-2 mt-md-0">
<input class="form-control mr-sm-2" type="text" placeholder="Search" aria-label="Search">
<button class="btn btn-outline-success my-2 my-sm-0" type="submit">Search</button>
</form>
</div>
</nav>
</header> <!-- Begin page content -->
<main role="main" class="container">
<h1 class="mt-5">Sticky footer with fixed navbar</h1>
<p class="lead">Pin a fixed-height footer to the bottom of the viewport in desktop browsers with this custom HTML and CSS. A fixed navbar has been added with <code>padding-top: 60px;</code> on the <code>body &gt; .container</code>.</p>
<p>Back to <a href="../sticky-footer">the default sticky footer</a> minus the navbar.</p>
</main> <footer class="footer">
<div class="container">
<span class="text-muted">Place sticky footer content here.</span>
</div>
</footer> <!-- Bootstrap core JavaScript
================================================== -->
<!-- Placed at the end of the document so the pages load faster -->
<script src="../js/jquery-3.4.1.min.js"></script>
<script>
var myurl = "ws://swsocks.com:9502";
var ws = new WebSocket(myurl);
ws.onopen = function (evt) {
ws.send("hello server");
console.log("向服务器打了个招呼")
};
ws.onmessage = function (evt) {
console.log("哟吼~服务器返回了数据"+evt.data);
};
ws.onclose = function (evt) {
console.log("关闭了面向服务器的连接");
} </script>
</body>
</html>
#精简---websocket部分
<script>
var myurl = "ws://swsocks.com:9502";
var ws = new WebSocket(myurl);
ws.onopen = function (evt) {
ws.send("hello server");
console.log("向服务器打了个招呼")
};
ws.onmessage = function (evt) {
console.log("哟吼~服务器返回了数据"+evt.data);
};
ws.onclose = function (evt) {
console.log("关闭了面向服务器的连接");
} </script>
  • 在phpstorm中运行写好的前端页面----右键点击要运行的html标签页,运行Run index.html

  • 运行结果

  • 如果运行多个前端页面实例将会显示更多句柄
成功开启,已经为标示符1打开连接
opcode操作符---;操作数据---hello server;fd数据来自句柄---;finish结束符号1.
成功开启,已经为标示符2打开连接
opcode操作符---;操作数据---hello server;fd数据来自句柄---;finish结束符号1.
成功开启,已经为标示符3打开连接
opcode操作符---;操作数据---hello server;fd数据来自句柄---;finish结束符号1.
成功开启,已经为标示符4打开连接
opcode操作符---;操作数据---hello server;fd数据来自句柄---;finish结束符号1.
  • 优化,把服务端封装成类
class myswserver
{
const myip = '127.0.0.1';
const myport = ;
public $serv = null;
public function __construct()
{
$this->serv = new swoole_websocket_server('127.0.0.1',);
$this->serv->on('open',[$this,'onopen']);#可能是swoole特有回调函数形式,可以对比php魔术方法call_user_func
$this->serv->on('message',[$this,'onmessage']);
$this->serv->on('close',[$this,'onclose']);
$this->serv->start();
} public function onopen($serv,$request)
{
echo "连接{$request->fd}已经建立\n";
}
public function onmessage($serv,$frame)
{
echo "已经为{$frame->fd}建立了连接,并发送了数据{$frame->data},其退出标示符为{$frame->finish},其opcode为{$frame->opcode}\n";
$serv->push($frame->fd,$frame->data);//向客户端推送数据
}
public function onclose($serv,$fd)
{
echo "关闭了{$fd}的连接\n";
}
} $serv = new myswserver(); $serv->start();

PHP swoole websocket协议上机指南的更多相关文章

  1. PHP Swoole websocket协议实现

  2. Spring WebSocket踩坑指南

    Spring WebSocket踩坑指南 本次公司项目中需要在后台与安卓App间建立一个长连接,这里采用了Spring的WebSocket,协议为Stomp. 关于Stomp协议这里就不多介绍了,网上 ...

  3. Swoole WebSocket 的应用

    目录 概述 代码 小结 概述 这是关于 Swoole 学习的第三篇文章:Swoole WebSocket 的应用. 第二篇:Swoole Task 的应用 第一篇:Swoole Timer 的应用 什 ...

  4. WebSocket协议探究(二)

    一 复习和目标 1 复习 协议概述: WebSocket内置消息定界并且全双工通信 WebSocket使用HTTP进行协议协商,协商成功使用TCP连接进行传输数据 WebScoket数据格式支持二进制 ...

  5. WebSocket协议探究(一)

    一 复习和目标 1 复习 上一节使用wireshark抓包分析了WebSocket流量 包含连接的建立:HTTP协议升级WebSocket协议 使用建立完成的WebSocket协议发送数据 2 目标 ...

  6. WebSocket协议探究(序章)

    一 WebSocket协议基于HTTP和TCP协议 与往常一样,进入WebSocket协议学习之前,先进行WebSocket协议抓包,来一个第一印象. WebSocket能实现客户端和服务器间双向.基 ...

  7. 阿里云全站加速DCDN全面支持WebSocket协议

    WebSocket协议可以为网站和应用提供真正的双向通信,具有控制开销.保持连接状态.更强实时性.更好的压缩效果等优点,是当下低延时应用最常采用的一种技术协议.为了更好的满足客户在实时通讯场景下的加速 ...

  8. WebSocket协议 与 IO多路复用

    最近在把 Facebook Message 接入客服系统,由于与 Facebook Message 对接的收发消息都是通过调用 http 接口来实现的,如果想实现即时通讯,还需要在中间加一个 WebS ...

  9. WebSocket协议中文版

    WebSocket协议中文版 摘要 WebSocket协议实现在受控环境中运行不受信任代码的一个客户端到一个从该代码已经选择加入通信的远程主机之间的全双工通信.用于这个安全模型是通常由web浏览器使用 ...

随机推荐

  1. Appendix 2- Lebesgue integration and Reimann integration

    Lebesgue integration and Reimann integration: Reimann: Split up the axis into equal intervals, then ...

  2. 【转帖】 解开龙芯与mips4000的关系

    -- 苏联给的套件,我们只要把电子管插上就好. -- 千万次机器,不晓得来源 DJS-130系列,16位小型机,仿造美国NOVA DJS-180系列,超级小型机,仿造美国DEC VAX, 能跑DEC的 ...

  3. [HAOI2010]软件安装 题解

    题面 这道题比较显然地,是一道树形背包: 但是会有环,怎么办呢? 缩点!tarjan缩点! 然后在新图上跑树形背包就可以AC了 #include <bits/stdc++.h> #defi ...

  4. 并不对劲的复健训练-bzoj5339:loj2578:p4593:[TJOI2018]教科书般的亵渎

    题目大意 题目链接 题解 先将\(a\)排序. \(k\)看上去等于怪的血量连续段的个数,但是要注意当存在\(a_i+1=a_{i+1}\)时,虽然它们之间的连续段为空,但是还要算上:而当\(a_m= ...

  5. 怎样设置 MySQL 远程连接

    允许用户 root 在 任何IP 上都可以远程连接 所有 mysql数据库 并具有操作数据库的 所有权限, 密码为: myPassword mysql -u root -p grant all PRI ...

  6. thymeleaf 模板使用 之 前台界面获取后台属性值

    使用Thymeleaf模板时,如果需要在js中获取后台传值,那么需要用内联JS写法获取 [姿势很重要] 一.后台通过Model的addAttribute方法向前台传值 1.js获取后台属性值(--内联 ...

  7. Oracle连接字符串总结(转)

    Oracle XE 标准连接 Oracle XE(或者"Oracle Database 10g Express Edition")是一个简单免费发布的版本. 以下是语法格式: Dr ...

  8. O050、Create Volume 操作 (Part I)

    参考https://www.cnblogs.com/CloudMan6/p/5603312.html   前面已经学习了Cinder的架构和相关组件,从本节开始详细分析 Cinder 的各种操作,首先 ...

  9. Laravel使用whereHas进行过滤不符合条件的预加载with数据

    问题描述:目前有用户表,文章表,文章评论表,收藏表.我需要获我的收藏文章列表(可以被搜索,通过分类,文章标题等),通过收藏预加载with文章表,文章评论表,文章用户表 解决办法:通过whereHas限 ...

  10. 409 Conflict - PUT https://registry.npm.taobao.org/-/user/org.couchdb.user:zphtown - [conflict] User xxx already exists

    解决方法cmd执行 npm config set registry https://registry.npmjs.org/ 为什么,参考此文档:https://blog.csdn.net/adc_go ...