http和php怎么交互,实现http与workerman的交互demo
这里主要用到wm的聊天室demo做了一个示例。
/**
* This file is part of workerman.
*
* Licensed under The MIT License
* For full copyright and license information, please see the MIT-LICENSE.txt
* Redistributions of files must retain the above copyright notice.
*
* @author walkor
* @copyright walkor
* @link http://www.workerman.net/
* @license http://www.opensource.org/licenses/mit-license.php MIT License
*/
use \Workerman\Worker;
use \Workerman\WebServer;
use \GatewayWorker\Gateway;
use \GatewayWorker\BusinessWorker;
use \Workerman\Autoloader;
use \Workerman\Connection\AsyncTcpConnection;
// 自动加载类
require_once __DIR__ . '/../../Workerman/Autoloader.php';
Autoloader::setRootPath(__DIR__);
// 这个55150端口不解析web内容,主要用于post和get,
//在web——onMessage事件取出$_GET和$_POST的数据,相当于仅作API接口
$web = new Worker("http://0.0.0.0:55150");
// WebServer进程数量固定为1
$web->count = 1;
//开启一个AsyncTcpConnection转发器
// 设置访问对方主机的本地ip及端口(每个socket连接都会占用一个本地端口)
$context_option = array(
'socket' => array(
// ip必须是本机网卡ip,并且能访问对方主机,否则无效
'bindto' => '127.0.0.1:2333',
),
);
$con = new AsyncTcpConnection('ws://127.0.0.1:7272', $context_option);
//用ATC做中转来和Http的数据做收发交互
//主要WEB启动的时候做ATC转发器的事件初始化
$web->onWorkerStart = function($web)
{
file_get_contents('http://a-vi.com/api/send2qw/?WorkerMan_Web回调:服务启动');
// $web->send('receive success');
// 这个网址是我的消息接收器,
GLOBAL $con;
// 中转器链接到workerman的时候自动以一个客户端身份登录,并保持在线
$con->onConnect = function($con) {
$con->send('{"type":"login","client_name":"邓伟(企业微信小秘书)","room_id":"1"}');
};
// 中转器收到workerman消息的时候做转发处理
$con->onMessage = function($con, $dat) {
echo "\r\n GC收到来自GM的消息:$dat \r\n \r\n";
$data=json_decode($dat);
switch($data->type){
// 服务端ping客户端
case 'ping':
$con->send('{"type":"pong"}');
break;;
// 登录 更新用户列表
case 'login':
//{"type":"login","client_id":xxx,"client_name":"xxx","client_list":"[...]","time":"xxx"}
file_get_contents('http://a-vi.com/api/send2qw/?电子黑板回发【登录】'.$data->client_name);
break;
// 客户端发言 message: {type:say, to_client_id:xx, content:xx}
case 'say':
//{"type":"say","act":"talk_text","from_client_id":xxx,"to_client_id":"all/client_id","content":"xxx","time":"xxx"}
if($data->act=='talk_text'){
$newmsg=$data->content;
}else{
$newmsg=':'.substr($dat,100);
}
file_get_contents('http://a-vi.com/api/send2qw/?电子黑板回发【消息】('.$data->from_client_name.'说:)'.$newmsg);
break;
// 登录 更新用户列表
case 'logout':
//{"type":"logout","from_client_id":xxx,"from_client_name":"xxx","time":"xxx"}
file_get_contents('http://a-vi.com/api/send2qw/?电子黑板回发【关闭】'.$data->from_client_name);
break;
}
};
// 开始登录
$con->connect();
};
// web worker 收到来自http数据的时候取出来通过ATC转发给workerman
$web->onMessage = function($conn, $data)
{
if(isset($data['get']['msg'])){ //注意 ico 请求过滤
GLOBAL $con;
$con->send('{"type":"say","act":"talk_text","to_client_id":"all","to_client_name":"所有人","content":"'.$data['get']['msg'].'"}');
//ws.send('{"type":"say","act":"talk_text","to_client_id":"all","to_client_name":"所有人","content":"【图灵回答】:'+data.text+'"}');
// file_get_contents('http://a-vi.com/api/send2qw/?WorkerMan_Web回执:'.$data['get']['msg']);
// $web->send('receive success');
print_r($data['get']['msg']);
}
$conn->close("hello\n");
};
// 如果不是在根目录启动,则运行runAll方法
if(!defined('GLOBAL_START'))
{
Worker::runAll();
}
其他就看附件了吧。
--------------------------------补充,源本发了完整demo附件,被人说有广告嫌疑,已经删除。不再分享
http和php怎么交互,实现http与workerman的交互demo相关推荐
- Android 与 JS 的交互 以及 JS与Android 的交互
Android与JS交互以及JS与Android 的交互 是通过WebView互相调用方法 对于Android调用JS代码的方法有2种: 通过WebView的loadUrl() 通过WebView的e ...
- sketch如何做设计稿交互_交互设计师是做什么的——交互设计的历史、现状和未来...
交互设计是定义.设计人造物系统的行为的设计领域,它定义了两个或者多个互动的个体之间交流的内容和结构,使之互相配合,达成某种目的.--百度百科 交互设计师是以人的需求为导向,理解用户的期望和需求的同时, ...
- ajax如何做到异步交互,1.ajax简单实现异步交互
效果:点击获取信息 testAjax.jsp: pageEncoding="UTF-8"%> Insert title here function getName(){ va ...
- 交互设计师必须知道的五大交互设计流程
交互设计师必须知道的五大交互设计流程 交互设计又称互动设计,从用户角度来说,交互设计是一种如何让产品易用,有效而让人愉悦的技术,它致力于了解目标用户和他们的期望,了解用户在同产品交互时彼此的行为,了解 ...
- sketch如何做设计稿交互_设计干货 | Sketch 的交互插件强势更新,再也不用为跳转的事发愁了!...
可能很多人对 InVision 是做什么的不太清楚,这里稍微科普一下,除去需要 VPN 来提速(不是被墙),这家公司应该是目前所有原型工具中最优秀的,没有之一.无论是对于产品的理解.体验的设计,还是对 ...
- html5的交互式微课,一种交互式微课的控制方法及交互式微课与流程
技术特征: 1.一种交互式微课的制作方法,其特征在于,包括以下步骤: 获取预设版面: 在所述预设版面中插入至少一个交互对象: 获取音频流: 根据所述音频流确定时间轴,所述时间轴包括至少一个交互点,所述 ...
- ios与html数据交互,iOS iOS与html进行交互
实现的 效果就是上边那样:首先通过webview 进行网络请求 然后进行显示. 然后点击下一页的按钮 通过js的响应显示另一个网页 最后通过下一页的按钮可以返回到首页. 本文仅仅是h5跟ios 的交互 ...
- linux 自动化交互套件 expect 介绍 shell非交互
expect是一个自动化交互套件,主要应用于执行命令和程序时,系统以交互形式要求输入指定字符串,实现交互通信. expect自动交互流程: spawn启动指定进程---expect获取指定关键字--- ...
- 如何打开python的交互窗口-使用Python显示图形交互窗口
Python部落组织翻译,禁止转载,欢迎转发 欢迎来到我们的新Python编程的文章! 今天我们将看到如何使用python编程显示一个交互的图形窗口. 在这篇文章中,我们将打印公共ip网络作为一个例子 ...
最新文章
- python linux编程与window编程_Python实现Windows和Linux之间互相传输文件(文件夹)的方法...
- 《JavaScript启示录》——第1章 JavaScript对象 1.1创建对象
- linux实验磁盘管理,从0到1学习网络安全 【Linux实验篇-LVM 磁盘管理】
- Machine Learning - Andrew Ng on Coursera (Week 6)
- HTML5文档结构 摘要
- x86汇编-2(第五章)nasm汇编基础知识、指令、显存、bochs调试
- 详解struts2中struts.properties
- java字符转为数字_Java 判断字符串能否转化为数字的三种方法
- oracle 14097,ORA-14097: ALTER TABLE EXCHANGE PARTITION 中的列类型或大小不匹配
- ValidatorUtil验证工具类判断手机、ip地址、邮箱,身份证等
- C# 标准ASCII 码表
- 用python实现数度游戏
- 写一个简单的准星辅助小工具
- 中国知网(cnki)上caj格式转pdf的方法
- html5 游戏 动画设计,11款效果惊艳的HTML5动画应用
- 【REST系列】详解REST架构风格 —— 带你阅读Web发展史上的一个重要技术文献
- 西邮 Linux 兴趣小组 2021 纳新试题
- Pandas:1.创建、读和写操作
- zebra ZT41142 打印机配置网络连接问题
- Yapi使用(快速入门)