WorkerMan 入门学习之(二)基础教程-Connection类的使用

1、TcpConnection类 的使用

一、简单的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();

测试结果:

服务端输出:

以下错误表示,里面的连接协议没有修改掉原因。

[email protected]:~$ 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.

二、黑白名单的访问

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服务

正确的访问:

非本地地址访问:

2、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();
时间: 2024-10-13 16:49:38

WorkerMan 入门学习之(二)基础教程-Connection类的使用的相关文章

OpenStack 入门学习之二:在CentOS 6.5上使用RDO单机安装icehouse

本文主要介绍如何在CentOS6.5上通过RDO来安装icehouse,由于安装的过程中涉及的软件较多,以及依赖关系比较复杂,建议使用一个全新的操作系统来进行安装. 安装步骤具体如下 (1)安装操作系统 使用光盘或镜像文件安装操作系统. 分区的时候需要划分一个逻辑区,并且建立一个名称叫cinder-volumes的组.这个逻辑卷组会被cinder使用. 创建的效果类似于: 创建过程请参考:http://www.centos.org/docs/5/html/Deployment_Guide-en-

python入门经典必备推荐基础教程

绝对是python初学者入门必备,比learning python写的好100倍,远超python基础教程n个数量级 下载地址 http://pan.baidu.com/s/1jGwzpeY 更多python学习资料 http://dou.bz/35ODPo

MyBatis入门学习(二)

在MyBatis入门学习(一)中我们完成了对MyBatis简要的介绍以及简单的入门小项目测试,主要完成对一个用户信息的查询.这一节我们主要来简要的介绍MyBatis框架的增删改查操作,加深对该框架的了解.环境测试是上一节中的测试环境.在此感谢博主提供的资料. 一.通过MyBatis持久层框架完成对数据库表的增删改查操作——基于XML的实现 1.定义sql文件的映射文件,userMapper文件内容如下: <?xml version="1.0" encoding="UTF

Elasticsearch入门学习(二):简单的入门学习

一.ES一些概念 索引 _inde,文档存储的地方,类似于关系型数据中的数据库. 事实上,数据被存储和索引在分片中,索引仅仅是一个把一个或者多个分片分组在一起的逻辑空间. 索引名字必须是全部小写,不允许以下划线开头,不能包含逗号. 文档 文档id是一个字符串,与_index组合时,就可以在ElasticSearch中唯一标识一个文档.创建文档时,可以自定义_id,也可以让ES帮助自动生成. 二.使用postman入门学习 创建索引 创建索引库的格式为:使用put请求:ip:9200/{index

WorkerMan 入门学习之(三)基础教程-Timer类的使用

1.ServerTimer.php 代码: <?php /** * 定时器学习 */ require_once __DIR__ . '/Workerman/Autoloader.php'; use Workerman\Worker; use Workerman\Lib\Timer; // 创建一个容器 $worker = new Worker('websocket://0.0.0.0:12345'); // 连接回调 $worker->onConnect = function ($connec

salesforce 零基础开发入门学习(二)变量基础知识,集合,表达式,流程控制语句

salesforce如果简单的说可以大概分成两个部分:Apex,VisualForce Page. 其中Apex语言和java很多的语法类似,今天总结的是一些简单的Apex的变量等知识. 有如下几种常用的基本变量Integer,String,Decimal,Double,Long,Boolean,ID. 集合常用的对象:List<T>,Set<T>,Map<T>. 时间日期常用对象:Datetime,Time,Date. 其他:Object,sObject(与数据库相关

零基础入门学习python--第二章 用Python设计第一个游戏

知识点汇总1. 什么是BIF? BIF(Built-in Functions)内置函数,共68个,可直接调用,方便程序员快速编写脚本程序.输入dir(__builtins__)即可查看所有内置函数,help(function_name)可查看该函数功能描述.2. python区分大小写.3. python代码书写时需注意代码缩进,如果在正常的位置输入冒号“:”,IDLE会自动将下一行缩进.4. python不允许if条件中赋值(且没有括号),即判断条件中应写为if i==1:,赋值号”=”与判断

前端学习,零基础教程,2019年必看资料

相信大部分小伙伴自学前端的时候毫无头绪,不知道自己该做什么,学习什么,要学的东西太多太乱?既然你看到了这篇文章,那么问题就不大,小编为你整理了一份最全的学习路线,赶快收藏吧!干货福利内容 在文末↓一.HTML.CSS基础.JavaScript语法基础.学完基础后,可以仿照电商网站(例如京东.小米)做首页的布局.二.JavaScript语法进阶.包括:作用域和闭包.this和对象原型等.相信我,JS语法,永远是面试中最重要的部分.三.jQuery.Ajax等.jQuery没有过时,它仍然是前端基础

MVC3+EF4.1学习系列(二)-------基础的增删改查和持久对象的生命周期变化

上篇文章中 我们已经创建了EF4.1基于code first的例子  有了数据库 并初始化了一些数据  今天这里写基础的增删改查和持久对象的生命周期变化 学习下原文先把运行好的原图贴来上~~ 一.创建详细页 首先 我们先在控制器下 添加详细页的方法 因为这篇文章后面要介绍持久对象声明周期的变化 所以在这里先看下有哪些状态 EF里一共有这五中生命状态类型 其实 看名字我们可以大概猜测出个一二三来~~  游离的 未改变的  新添加的  已删除的 修改的  但是是怎么变化的能 我们在后面的代码中实践与