workerman入门学习之基础教程-connection类的使用

Tinywan Tinywan     2022-09-16     616

关键词:

一、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 8085
Trying 127.0.0.1...
Connected to 127.0.0.1.
Escape character is '^]'.
^[[A^[[A
HTTP/1.1 400 Bad Request

<b>400 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入门学习之gatewayworker框架使用

GatewayWorker是基于Workerman开发的一个可分布式部署的TCP长连接框架,专门用于快速开发TCP长连接应用,例如app推送服务端、即时IM服务端、游戏服务端、物联网、智能家居等等文档地址:http://www.workerman.net/gatewaydoc/一、测试官方DEM... 查看详情

kubernetes学习之入门篇

本篇内容是在公司做技术分享时的PPT,主要内容:Kubernetes&Docker简介容器技术基础知识介绍Kubernetes核心设计浅析详细内容请看PPT:https://download.csdn.net/download/u010657094/13078830或者:https://github.com/ByrsH/doc/blo 查看详情

ssh框架入门学习之二(spring)

Spring也是一个开源框架,我在学习Spring的时候,认为最重要的几点是:IOC(控制反转)、AOP(面向切面)和容器概念。详细的教程还请大家去看网上的视频,这里贴一个小Demo以供学习。(前提是大家把该导入的jar包都导入了)1... 查看详情

kubernetes学习之入门篇

本篇内容是在公司做技术分享时的PPT,主要内容:Kubernetes&Docker简介容器技术基础知识介绍Kubernetes核心设计浅析详细内容请看PPT:https://download.csdn.net/download/u010657094/13078830或者:https://github.com/ByrsH/doc/blob/main/Kub... 查看详情

麦子深度学习之-机器学习算法高级进阶

...之-机器学习算法高级进阶随笔背景:在很多时候,很多入门不久的朋友都会问我:我是从其他语言转到程序开发的,有没有一些基础性的资料给我们学习学习呢,你的框架感觉一下太大了,希望有个循序渐进的教程或者视频来... 查看详情

reactnative学习之html基础

前言:   ReactNative开发作为一种新型的移动开发方式,个人觉得App的一部分需求会逐步替换成这种方式,也是公司移动开发人员所必须掌握的一种开发技术,所以鉴于这种情况我觉得很有必要学习一下,特此开贴记录... 查看详情

从零入门机器学习之基础概念讲解:深入浅出讲解计算机基本概念

...法行业就业。希望和大家一起成长进步。  本文是从零入门机器学习的第二篇文章,主要内容是讲解计算机基本概念,之所以要讲解上述内容,主要是由于在后续学习和工作中都会用到以上概念,所以必须提前进行学习。希望... 查看详情

从零入门机器学习之基础概念讲解:深入浅出讲解计算机基本概念

...法行业就业。希望和大家一起成长进步。  本文是从零入门机器学习的第二篇文章,主要内容是讲解计算机基本概念,之所以要讲解上述内容,主要是由于在后续学习和工作中都会用到以上概念,所以必须提前进行学习。希望... 查看详情

python基础下的web前端学习之html

一、参考书籍:《Web前端开发HTML5+CSS3+jQuery+AJAX从学到用完美实践》备注:本书为工具书。二、HTML5元素:按功能划分:基础、格式、表单、框架、图像、音频/视频、链接、列表、表格、样式/节、元信息、编程。(参考P76)元素... 查看详情

elasticsearch学习之入门

1.什么是Elasticsearch  Elasticsearch是一个基于ApcheLucene的开源实时分布式搜索和分析引擎。2.安装  安装Elasticsearch的唯一要求是安装官方新版的java,地址:www.java.com  在elasticsearch.org/download下载最新版本的Elasticsearch。3.运行 ... 查看详情

bigger-mai养成计划,前端基础学习之html

HTML  1、一套规则,浏览器认识的规则。  2、开发者:    学习Html规则    开发后台程序:      写Html文件(充当模板的作用)@@@@      数据库获取数据,然后替换到html文件的指定位置(web框架)... 查看详情

scala学习之scala快速入门(代码片段)

文章目录Scala的“味道”Overview概述Hello,worldTheScalaREPLTwotypesofvariablesDeclaringvariabletypesControlstructuresif/elsematchexpressionstry/catchforloopsandexpressionswhileanddo/whileClassesScalamethodsTraits 查看详情

elasticsearch学习之入门2

关于Elasticsearch的几个概念:  1)在Elasticsearch中,文档归属于类型type,而类型归属于索引index,为了方便理解,可以把它们与传统关系型数据库做类比:    RelationalDB->DataBases->Tables->Rows->Columns    Elasticsearch->Indices-&g... 查看详情

java学习之位运算(操作)总结

...他Java系列文章:​​Java学习之编译、反编译以及字节码入门​​​​Java学习之String​​​​Java学习之JDK9新特性​​位操作,简单确强大,有一两拨千金奇效;可是平时工作中用得真心不多,故此文章也有备份回顾之意。在计... 查看详情

vue.js学习之入门实例

...直看过vue.js官网api,但是很少实践,这里抽出时间谢了个入门级的demo,记录下一些知识点,防止后续踩坑,牵扯到的的知识点:vue、vue-cli、vue-router、webpack等。首先看下实现的效果: 源码下载戳这里:源码1、使用vue-cli脚手... 查看详情

git基础再学习之:gitcheckout--file

首先明白一下基本概念和用法,这段话是从前在看廖雪峰的git教程的时候摘到OneNote的 准备工作:新建了一个learngit文件夹,在bash中cd进入文件夹,用以下命令创建一个仓库。$gitinit添加一个文本文件one.txt,里面写个内容"one"... 查看详情

分享《深度学习之tensorflow:入门原理与进阶实战》pdf+源代码

下载:https://pan.baidu.com/s/1IAfr-tigqGE_njrfSATT_w《深度学习之TensorFlow:入门、原理与进阶实战》,李金洪著。中文PDF,939页,带书签目录,文字可以复制粘贴。配套源代码。如图: 查看详情

lucene学习之入门

  今天开始接触Lucene搜索,Lucene是一个全文检索的框架,主要适用于搜索,这里的搜索不同于数据库的查询。Lucene是建立索引然后存在你设置的路径或者内存中,然后当你输入条件的时候就会去索引文件检索查询。Lucene能... 查看详情