这里主要用到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相关推荐

  1. Android 与 JS 的交互 以及 JS与Android 的交互

    Android与JS交互以及JS与Android 的交互 是通过WebView互相调用方法 对于Android调用JS代码的方法有2种: 通过WebView的loadUrl() 通过WebView的e ...

  2. sketch如何做设计稿交互_交互设计师是做什么的——交互设计的历史、现状和未来...

    交互设计是定义.设计人造物系统的行为的设计领域,它定义了两个或者多个互动的个体之间交流的内容和结构,使之互相配合,达成某种目的.--百度百科 交互设计师是以人的需求为导向,理解用户的期望和需求的同时, ...

  3. ajax如何做到异步交互,1.ajax简单实现异步交互

    效果:点击获取信息 testAjax.jsp: pageEncoding="UTF-8"%> Insert title here function getName(){ va ...

  4. 交互设计师必须知道的五大交互设计流程

    交互设计师必须知道的五大交互设计流程 交互设计又称互动设计,从用户角度来说,交互设计是一种如何让产品易用,有效而让人愉悦的技术,它致力于了解目标用户和他们的期望,了解用户在同产品交互时彼此的行为,了解 ...

  5. sketch如何做设计稿交互_设计干货 | Sketch 的交互插件强势更新,再也不用为跳转的事发愁了!...

    可能很多人对 InVision 是做什么的不太清楚,这里稍微科普一下,除去需要 VPN 来提速(不是被墙),这家公司应该是目前所有原型工具中最优秀的,没有之一.无论是对于产品的理解.体验的设计,还是对 ...

  6. html5的交互式微课,一种交互式微课的控制方法及交互式微课与流程

    技术特征: 1.一种交互式微课的制作方法,其特征在于,包括以下步骤: 获取预设版面: 在所述预设版面中插入至少一个交互对象: 获取音频流: 根据所述音频流确定时间轴,所述时间轴包括至少一个交互点,所述 ...

  7. ios与html数据交互,iOS iOS与html进行交互

    实现的 效果就是上边那样:首先通过webview 进行网络请求 然后进行显示. 然后点击下一页的按钮 通过js的响应显示另一个网页 最后通过下一页的按钮可以返回到首页. 本文仅仅是h5跟ios 的交互 ...

  8. linux 自动化交互套件 expect 介绍 shell非交互

    expect是一个自动化交互套件,主要应用于执行命令和程序时,系统以交互形式要求输入指定字符串,实现交互通信. expect自动交互流程: spawn启动指定进程---expect获取指定关键字--- ...

  9. 如何打开python的交互窗口-使用Python显示图形交互窗口

    Python部落组织翻译,禁止转载,欢迎转发 欢迎来到我们的新Python编程的文章! 今天我们将看到如何使用python编程显示一个交互的图形窗口. 在这篇文章中,我们将打印公共ip网络作为一个例子 ...

最新文章

  1. python linux编程与window编程_Python实现Windows和Linux之间互相传输文件(文件夹)的方法...
  2. 《JavaScript启示录》——第1章 JavaScript对象 1.1创建对象
  3. linux实验磁盘管理,从0到1学习网络安全 【Linux实验篇-LVM 磁盘管理】
  4. Machine Learning - Andrew Ng on Coursera (Week 6)
  5. HTML5文档结构 摘要
  6. x86汇编-2(第五章)nasm汇编基础知识、指令、显存、bochs调试
  7. 详解struts2中struts.properties
  8. java字符转为数字_Java 判断字符串能否转化为数字的三种方法
  9. oracle 14097,ORA-14097: ALTER TABLE EXCHANGE PARTITION 中的列类型或大小不匹配
  10. ValidatorUtil验证工具类判断手机、ip地址、邮箱,身份证等
  11. C# 标准ASCII 码表
  12. 用python实现数度游戏
  13. 写一个简单的准星辅助小工具
  14. 中国知网(cnki)上caj格式转pdf的方法
  15. html5 游戏 动画设计,11款效果惊艳的HTML5动画应用
  16. 【REST系列】详解REST架构风格 —— 带你阅读Web发展史上的一个重要技术文献
  17. 西邮 Linux 兴趣小组 2021 纳新试题
  18. Pandas:1.创建、读和写操作
  19. zebra ZT41142 打印机配置网络连接问题
  20. Yapi使用(快速入门)

热门文章

  1. 具有jOOQ和Java 8的CompletableFuture的异步SQL执行
  2. Java开发中的常见危险信号
  3. 使用Maven Jetty插件
  4. Spring范围代理
  5. JMX和Spring –第2部分
  6. 使用Gradle引导旧式Ant构建
  7. Java中可怕的双重检查锁定成语
  8. Spring MVC拦截器示例
  9. php mysql刷新表格_php读入mysql数据并以表格形式显示(表单实现无刷新提交)
  10. jpa获取数据库当前时间_SpringDataJPA存储数据时通过注解自动设置创建时间和修改时间...