WorkerMan 入门学习之(二)基础教程-Connection类的使用
一、TcpConnection类 的使用
1、简单的TCP测试
Server.php
<?php
require_once __DIR__.'/Workerman/Autoloader.php';
use Workerman\Worker;
$worker = new Worker('websocket://0.0.0.0:80');// 连接回调
$worker->onConnect = function ($connection){
echo "connection success\n";
};
// 接受发送消息
$worker->onMessage = function ($conn,$data){
$conn->send("Hello World");
};
// 关闭连接
$worker->onClose = function ($connection){
echo "connection close \n";
};
$worker::runAll();
测试结果:
服务端输出:
以下错误表示,里面的连接协议没有修改掉原因。
www@iZ23s8agtagZ:~$ telnet 127.0.0.1
Trying 127.0.0.1...
Connected to 127.0.0.1.
Escape character is '^]'.
^[[A^[[A
HTTP/1.1 Bad Request <b> Bad Request</b><br>Invalid handshake data for websocket. <br> See <a href="http://wiki.workerman.net/Error1">http://wiki.workerman.net/Error1</a> for detail.Connection closed by foreign host.
2、黑白名单的访问
Server.php
<?php
require_once __DIR__.'/Workerman/Autoloader.php';
use Workerman\Worker;
$worker = new Worker('tcp://0.0.0.0:8085');
// 连接回调
$worker->onConnect = function ($connection){
// IP 白名单验证
if($connection->getRemoteIP() != '127.0.0.1'){
$connection->close("IP Address Forbidden");
}
};
// 接受发送消息
$worker->onMessage = function ($conn,$data){
$conn->send("Hello World");
};
// 关闭连接
$worker->onClose = function ($connection){
echo "connection close \n";
};
$worker::runAll();
开启Workerman服务
正确的访问:
非本地地址访问:
二、AsyncTcpConnection类 的使用
Server.php
<?php
require_once __DIR__.'/Workerman/Autoloader.php';
use Workerman\Worker;
$worker = new Worker('websocket://0.0.0.0:443');
// Workerman 启动的回调,这里传递的是Worker对象
$worker->onWorkerStart = function ($worker){
echo "onWorkerStart success";
};
// 连接回调
$worker->onConnect = function ($connection){
$connection_baidu = new \Workerman\Connection\AsyncTcpConnection('tcp://www.baidu.com:443');
// 百度的数据发送给浏览器。返回数据后,使用的数据要use 进来,
$connection_baidu->onMessage = function ($connection_baidu,$data) use ($connection){
$connection->send($data);
};
// 浏览器接受的数据发送给百度
$connection->onMessage = function ($connection,$data) use ($connection_baidu){
$connection_baidu->send($data);
};
$connection_baidu->connect();
};
// 接受发送消息
$worker->onMessage = function ($conn,$data){
$conn->send("Hello World");
};
// 关闭连接
$worker->onClose = function ($connection){
echo "connection close \n";
}; //Workerman 停止回调
$worker->onWorkerStop = function ($worker){
echo "onWorkerStop success";
};
$worker::runAll();
WorkerMan 入门学习之(二)基础教程-Connection类的使用的更多相关文章
- 【转载】salesforce 零基础开发入门学习(二)变量基础知识,集合,表达式,流程控制语句
salesforce 零基础开发入门学习(二)变量基础知识,集合,表达式,流程控制语句 salesforce如果简单的说可以大概分成两个部分:Apex,VisualForce Page. 其中Apex ...
- MyBatis入门学习(二)
在MyBatis入门学习(一)中我们完成了对MyBatis简要的介绍以及简单的入门小项目测试,主要完成对一个用户信息的查询.这一节我们主要来简要的介绍MyBatis框架的增删改查操作,加深对该框架的了 ...
- Reactive UI -- 反应式编程UI框架入门学习(二)
前文Reactive UI -- 反应式编程UI框架入门学习(一) 介绍了反应式编程的概念和跨平台ReactiveUI框架的简单应用. 本文通过一个简单的小应用更进一步学习ReactiveUI框架的 ...
- Java Web入门学习(二) Eclipse的配置
Java Web学习(二) Eclipse的配置 一.下载Eclipse 1.进入Eclipse官网,进行下载 上图,下载Eclipse IDE for JaveEE Developers 版本,然后 ...
- Swoole 入门学习(二)
Swoole 入门学习 swoole 之 定时器 循环触发:swoole_timer_tick (和js的setintval类似) 参数1:int $after_time_ms 指定时间[毫秒] ...
- WorkerMan 入门学习之(三)基础教程-Timer类的使用
1.ServerTimer.php 代码: <?php /** * 定时器学习 */ require_once __DIR__ . '/Workerman/Autoloader.php'; us ...
- python入门到精通[二]:基础学习(1)
摘要:Python基础学习: 注释.字符串操作.用户交互.流程控制.导入模块.文件操作.目录操作. 上一节讲了分别在windows下和linux下的环境配置,这节以linux为例学习基本语法.代码部分 ...
- salesforce 零基础开发入门学习(二)变量基础知识,集合,表达式,流程控制语句
salesforce如果简单的说可以大概分成两个部分:Apex,VisualForce Page. 其中Apex语言和java很多的语法类似,今天总结的是一些简单的Apex的变量等知识. 有如下几种常 ...
- 零基础入门学习python--第二章 用Python设计第一个游戏
知识点汇总1. 什么是BIF? BIF(Built-in Functions)内置函数,共68个,可直接调用,方便程序员快速编写脚本程序.输入dir(__builtins__)即可查看所有内置函数,h ...
随机推荐
- Laravel route ---- resoure
Laravel 路由--资源路由 Route::resource('blog', 'BlogController'); 上面代码将等同于: Route::get('/blog', 'BlogContr ...
- 小程序的wx.onAccelerometerChange
https://www.2cto.com/kf/201802/724174.html(copy) 也许有人会问,小程序中都是竖直app形态,要横竖屏判断有什么用?即使判断出了横屏状态,你能把小程序横过 ...
- Ionic package Error: Registry returned 404 for GET on
Ionic package Error: Registry returned 404 for GET on https://registry.npmjs.org/org.apache.cordova. ...
- Chrome disable cache & clear memory cache
Chrome disable cache & clear memory cache disable cache
- python之小应用:读取csv文件并处理01数据串
目的:读取csv文件内容,把0和1的数据串取出来,统计出现1的连续次数和各次数出现的频率次数 先读取csv文件内容: import csv def csv_read(file): list = [] ...
- Go语言之unsafe包介绍及使用
unsafe内容介绍 type ArbitraryType int type Pointer *ArbitraryType func Sizeof(x ArbitraryType) uintptr f ...
- ELK--filebeat详解
Filebeat提供了几种不同的方式来启用模块: 在modules.d编辑目录中启用模块配置 运行Filebeat 编辑时启用模块 在filebeat.yml文件编辑中启用模块配置 例如,要在 目录中 ...
- centOS7 修改DNS
#显示当前网络连接 #nmcli connection show NAME UUID TYPE DEVICE eno1 5fb06bd0-0bb0-7ffb-45f1-d6edd65f3e03 802 ...
- BZOJ3294 CQOI2011放棋子(动态规划)
可以看做棋子放在某个位置后该种颜色就占领了那一行一列.行列间彼此没有区别. 于是可以设f[i][j][k]表示前k种棋子占领了i行j列的方案数.转移时枚举第k种棋子占领几行几列.注意行列间是有序的,要 ...
- BZOJ1001 BJOI2006狼抓兔子(最小割+最短路)
显然答案就是最小割.直接跑dinic也能过,不过显得不太靠谱. 考虑更正确的做法.作为一个平面图,如果要把他割成两半,那么显然可以用一条曲线覆盖且仅覆盖所有割边.于是我们把空白区域看成点,隔开他们的边 ...