PHP swoole websocket协议上机指南
这一上机实验的开发环境用的是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 > .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协议上机指南的更多相关文章
- PHP Swoole websocket协议实现
- Spring WebSocket踩坑指南
Spring WebSocket踩坑指南 本次公司项目中需要在后台与安卓App间建立一个长连接,这里采用了Spring的WebSocket,协议为Stomp. 关于Stomp协议这里就不多介绍了,网上 ...
- Swoole WebSocket 的应用
目录 概述 代码 小结 概述 这是关于 Swoole 学习的第三篇文章:Swoole WebSocket 的应用. 第二篇:Swoole Task 的应用 第一篇:Swoole Timer 的应用 什 ...
- WebSocket协议探究(二)
一 复习和目标 1 复习 协议概述: WebSocket内置消息定界并且全双工通信 WebSocket使用HTTP进行协议协商,协商成功使用TCP连接进行传输数据 WebScoket数据格式支持二进制 ...
- WebSocket协议探究(一)
一 复习和目标 1 复习 上一节使用wireshark抓包分析了WebSocket流量 包含连接的建立:HTTP协议升级WebSocket协议 使用建立完成的WebSocket协议发送数据 2 目标 ...
- WebSocket协议探究(序章)
一 WebSocket协议基于HTTP和TCP协议 与往常一样,进入WebSocket协议学习之前,先进行WebSocket协议抓包,来一个第一印象. WebSocket能实现客户端和服务器间双向.基 ...
- 阿里云全站加速DCDN全面支持WebSocket协议
WebSocket协议可以为网站和应用提供真正的双向通信,具有控制开销.保持连接状态.更强实时性.更好的压缩效果等优点,是当下低延时应用最常采用的一种技术协议.为了更好的满足客户在实时通讯场景下的加速 ...
- WebSocket协议 与 IO多路复用
最近在把 Facebook Message 接入客服系统,由于与 Facebook Message 对接的收发消息都是通过调用 http 接口来实现的,如果想实现即时通讯,还需要在中间加一个 WebS ...
- WebSocket协议中文版
WebSocket协议中文版 摘要 WebSocket协议实现在受控环境中运行不受信任代码的一个客户端到一个从该代码已经选择加入通信的远程主机之间的全双工通信.用于这个安全模型是通常由web浏览器使用 ...
随机推荐
- IDEA安装maven
1.先到maven的官网下载安装包:http://maven.apache.org/download.cgi 解压安装包 2.配置环境变量 新建变量名MAVEN_HOME 变量值 D:\Soft ...
- 【计数】Simple Addition Expression
[来源] 2008年哈尔滨区域赛 [题目链接]: http://acm.hdu.edu.cn/showproblem.php?pid=2451 [参考博客]: HDU 2451 Simple Addi ...
- oracle修改TNSLSNR的端口
oracle 服务一启动 TNSLSNR.exe 会占用8080端口,这时,如果我们其他程序需要使用8080端口就会比较麻烦,所以需要改一下端口: 用dba账户登录 CMD>sqlplus sy ...
- Codeforces1263D-Secret Passwords
题意 给n个字符串,两个字符串之间如果有相同的字符,那么两个就等价,等价关系可以传递,问最后有多少个等价类. 分析 考虑并查集或者dfs联通块,如果是并查集的话,对于当前字符串的某个字符,肯定要和这个 ...
- mysql 8.x 集群出现:Last_IO_Error: error connecting to master 'repl@xxx:3306' - retry-time: 60 retries: 1
网上的经验:网络不同,账号密码不对,密码太长,密码由 # 字符:检查MASTER_HOST,MASTER_USER,MASTER_PASSWORD(不知道 MASTER_LOG_FILE 有没有影响) ...
- JS基础_基本数据类型和引用数据类型
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...
- 和 Python 2.x 说再见!项目移到python3
如果你仍在使用 2.x,那么是时候将你的代码移植到 Python 3 了. 在技术的长河中,软件.工具.系统等版本的迭代本是常事,但由于使用习惯.版本的兼容性.易用性等因素,很多用户及开发者在使用或做 ...
- centos7配置rsync+inotify数据实时共享
关于centos7版本上面搭建rsync服务并且实现实时同步之前一直是在6版本上面搭建rsync服务,在7版本上面折腾了半天.此处总结下inotify下载地址:http://github.com/do ...
- vue进阶:vue-router之导航守卫、路由元信息、路由懒加载
1.导航被触发 2.在失活的组件里调用离开守卫:beforeRouteLeave —— 组件内守卫(离开组件). 3.调用全局的beforeEach守卫 —— 全局守卫(进入组件). 4.在重用组件里 ...
- vue 登录 + 记住密码 + 密码加密解密
<template> <el-form :model="ruleForm"> <h3 class="title">系统登录& ...