推送

推送

37 回复

如何在php后端及时推送消息给客户端

提问wegl 回复了问题 • 45 人关注 • 2019-12-16 10:21 • 来自相关话题

0 回复

使用tp5整合的workerman如何实现服务端推送

回复

提问wapmxls 发起了问题 • 1 人关注 • 2019-06-19 19:56 • 来自相关话题

1 回复

workerman+thinkphp5的定时任务出错,求大佬帮忙看看!

提问blogdaren 回复了问题 • 2 人关注 • 2018-11-03 14:54 • 来自相关话题

3 回复

php 订单推送

提问defeatlr 回复了问题 • 4 人关注 • 2018-04-20 14:13 • 来自相关话题

13 回复

TCP模式,怎么主动给客户端发消息呢?

提问zhengweipx 回复了问题 • 2 人关注 • 2018-04-11 15:51 • 来自相关话题

1 回复
3 回复

能否外部调用某一个进程(connect)向与workerman建立长链接的客户端发送数据

提问walkor 回复了问题 • 4 人关注 • 2019-10-30 14:34 • 来自相关话题

1 回复

简述极光推送和workerman的比较?

提问walkor 回复了问题 • 2 人关注 • 2016-08-30 17:53 • 来自相关话题

1 回复

聊天室哪里能不能推送消息给手机app

提问walkor 回复了问题 • 2 人关注 • 2016-03-17 18:25 • 来自相关话题

2 回复

请问下大大 有做过类似淘宝推送消息处理的案例呢?

提问walkor 回复了问题 • 1 人关注 • 2019-10-30 14:28 • 来自相关话题

4 回复

基于wm给客户端推送

提问zhanxueshi 回复了问题 • 2 人关注 • 2016-02-04 09:45 • 来自相关话题

1 回复

使用GatewayClient发送消息如何获取服务端返回的结果?

提问walkor 回复了问题 • 2 人关注 • 2016-01-28 11:17 • 来自相关话题

1 回复

Gateway 有个疑问

提问walkor 回复了问题 • 2 人关注 • 2016-01-27 21:02 • 来自相关话题

1 回复

web-msg-sender和PHPSocket.IO的chat应该怎么整合在一起?

提问walkor 回复了问题 • 2 人关注 • 2016-01-27 13:42 • 来自相关话题

5 回复

web-msg-sender-master跨域名推送

提问最威武 回复了问题 • 2 人关注 • 2019-10-30 14:32 • 来自相关话题

3 回复

如何将消息推送到安卓客户端?

提问walkor 回复了问题 • 3 人关注 • 2019-10-30 14:32 • 来自相关话题

2 回复

如何拆成多个文件,我想在这基础上增加一个文本协议

提问walkor 回复了问题 • 2 人关注 • 2016-01-24 22:06 • 来自相关话题

1 回复

php怎样触发Gateway::onMessage.

提问walkor 回复了问题 • 1 人关注 • 2016-01-19 12:29 • 来自相关话题

9 回复

web-msg在android 客户端怎么调用socket 通信

提问walkor 回复了问题 • 1 人关注 • 2016-01-13 15:02 • 来自相关话题

2 回复

GatewayClient是通过TCP连接和发送消息的吗

提问walkor 回复了问题 • 2 人关注 • 2016-01-03 22:08 • 来自相关话题

1 回复

WEB消息推送框架 web-msg-sender 推送html代码

提问walkor 回复了问题 • 1 人关注 • 2015-12-29 18:22 • 来自相关话题

1 回复

web集成

提问walkor 回复了问题 • 2 人关注 • 2015-12-16 15:00 • 来自相关话题

1 回复

web集成

提问walkor 回复了问题 • 2 人关注 • 2015-12-16 10:58 • 来自相关话题

1 回复

关于2.0版本,在其他项目中推送消息问题

提问walkor 回复了问题 • 3 人关注 • 2015-11-26 08:38 • 来自相关话题

1 回复

workerman 实现不同用户推送不同消息问题

提问walkor 回复了问题 • 1 人关注 • 2019-10-30 15:23 • 来自相关话题

条新动态, 点击查看
walkor

walkor 回答了问题 • 2015-08-21 13:07 • 37 个回复 不感兴趣

如何在php后端及时推送消息给客户端

赞同来自:

**后端代码**
push.php

```php
<?php
use Workerman\Worker;
require_once './Workerman/Autoloader.php';
// 初始化一个worker容器,监听1234端口
glob... 显示全部 »
**后端代码**
push.php

```php
<?php
use Workerman\Worker;
require_once './Workerman/Autoloader.php';
// 初始化一个worker容器,监听1234端口
global $worker;
$worker = new Worker('websocket://0.0.0.0:1234');
// 这里进程数必须设置为1
$worker->count = 1;
// worker进程启动后建立一个内部通讯端口
$worker->onWorkerStart = function($worker)
{
// 开启一个内部端口,方便内部系统推送数据,Text协议格式 文本+换行符
$inner_text_worker = new Worker('Text://0.0.0.0:5678');
$inner_text_worker->onMessage = function($connection, $buffer)
{
global $worker;
// $data数组格式,里面有uid,表示向那个uid的页面推送数据
$data = json_decode($buffer, true);
$uid = $data['uid'];
// 通过workerman,向uid的页面推送数据
$ret = sendMessageByUid($uid, $data['percent']);
// 返回推送结果
$connection->send($ret ? 'ok' : 'fail');
};
$inner_text_worker->listen();
};
// 新增加一个属性,用来保存uid到connection的映射
$worker->uidConnections = array();
// 当有客户端发来消息时执行的回调函数
$worker->onMessage = function($connection, $data)use($worker)
{
// 判断当前客户端是否已经验证,既是否设置了uid
if(!isset($connection->uid))
{
// 没验证的话把第一个包当做uid(这里为了方便演示,没做真正的验证)
$connection->uid = $data;
/* 保存uid到connection的映射,这样可以方便的通过uid查找connection,
* 实现针对特定uid推送数据
*/
$worker->uidConnections[$connection->uid] = $connection;
return;
}
};
// 当有客户端连接断开时
$worker->onClose = function($connection)use($worker)
{
global $worker;
if(isset($connection->uid))
{
// 连接断开时删除映射
unset($worker->uidConnections[$connection->uid]);
}
};
// 向所有验证的用户推送数据
function broadcast($message)
{
global $worker;
foreach($worker->uidConnections as $connection)
{
$connection->send($message);
}
}
// 针对uid推送数据
function sendMessageByUid($uid, $message)
{
global $worker;
if(isset($worker->uidConnections[$uid]))
{
$connection = $worker->uidConnections[$uid];
$connection->send($message);
return true;
}
return false;
}
// 运行所有的worker(其实当前只定义了一个)
Worker::runAll();
```


**启动后端服务**
php push.php start -d

**前端接收推送的js代码**
```js
var ws = new WebSocket('ws://127.0.0.1:1234');
ws.onopen = function(){
var uid = 'uid1';
ws.send(uid);
};
ws.onmessage = function(e){
alert(e.data);
};
```

**后端推送消息的代码**
```php
// 建立socket连接到内部推送端口
$client = stream_socket_client('tcp://127.0.0.1:5678', $errno, $errmsg, 1);
// 推送的数据,包含uid字段,表示是给这个uid推送
$data = array('uid'=>'uid1', 'percent'=>'88%');
// 发送数据,注意5678端口是Text协议的端口,Text协议需要在数据末尾加上换行符
fwrite($client, json_encode($data)."\n");
// 读取推送结果
echo fread($client, 8192);
```

这里的uid不一定是用户的id,也可以理解为任务id即 taskid

记得开放1234 5678 两个端口的防火墙。如果是云服务器,还要开放这两个端口的安全组。

以上代码亲测可以直接使用
3 回复

能否外部调用某一个进程(connect)向与workerman建立长链接的客户端发送数据

提问walkor 回复了问题 • 4 人关注 • 2019-10-30 14:34 • 来自相关话题

37 回复

如何在php后端及时推送消息给客户端

提问wegl 回复了问题 • 45 人关注 • 2019-12-16 10:21 • 来自相关话题

37 回复

如何在php后端及时推送消息给客户端

回复

提问wegl 回复了问题 • 45 人关注 • 2019-12-16 10:21 • 来自相关话题

0 回复

使用tp5整合的workerman如何实现服务端推送

回复

提问wapmxls 发起了问题 • 1 人关注 • 2019-06-19 19:56 • 来自相关话题

1 回复

workerman+thinkphp5的定时任务出错,求大佬帮忙看看!

回复

提问blogdaren 回复了问题 • 2 人关注 • 2018-11-03 14:54 • 来自相关话题

3 回复

php 订单推送

回复

提问defeatlr 回复了问题 • 4 人关注 • 2018-04-20 14:13 • 来自相关话题

13 回复

TCP模式,怎么主动给客户端发消息呢?

回复

提问zhengweipx 回复了问题 • 2 人关注 • 2018-04-11 15:51 • 来自相关话题

3 回复

能否外部调用某一个进程(connect)向与workerman建立长链接的客户端发送数据

回复

提问walkor 回复了问题 • 4 人关注 • 2019-10-30 14:34 • 来自相关话题

1 回复

简述极光推送和workerman的比较?

回复

提问walkor 回复了问题 • 2 人关注 • 2016-08-30 17:53 • 来自相关话题

1 回复

聊天室哪里能不能推送消息给手机app

回复

提问walkor 回复了问题 • 2 人关注 • 2016-03-17 18:25 • 来自相关话题

2 回复

请问下大大 有做过类似淘宝推送消息处理的案例呢?

回复

提问walkor 回复了问题 • 1 人关注 • 2019-10-30 14:28 • 来自相关话题

4 回复

基于wm给客户端推送

回复

提问zhanxueshi 回复了问题 • 2 人关注 • 2016-02-04 09:45 • 来自相关话题

1 回复

使用GatewayClient发送消息如何获取服务端返回的结果?

回复

提问walkor 回复了问题 • 2 人关注 • 2016-01-28 11:17 • 来自相关话题

1 回复

Gateway 有个疑问

回复

提问walkor 回复了问题 • 2 人关注 • 2016-01-27 21:02 • 来自相关话题

1 回复

web-msg-sender和PHPSocket.IO的chat应该怎么整合在一起?

回复

提问walkor 回复了问题 • 2 人关注 • 2016-01-27 13:42 • 来自相关话题

5 回复

web-msg-sender-master跨域名推送

回复

提问最威武 回复了问题 • 2 人关注 • 2019-10-30 14:32 • 来自相关话题

3 回复

如何将消息推送到安卓客户端?

回复

提问walkor 回复了问题 • 3 人关注 • 2019-10-30 14:32 • 来自相关话题

2 回复

如何拆成多个文件,我想在这基础上增加一个文本协议

回复

提问walkor 回复了问题 • 2 人关注 • 2016-01-24 22:06 • 来自相关话题

1 回复

php怎样触发Gateway::onMessage.

回复

提问walkor 回复了问题 • 1 人关注 • 2016-01-19 12:29 • 来自相关话题

9 回复

web-msg在android 客户端怎么调用socket 通信

回复

提问walkor 回复了问题 • 1 人关注 • 2016-01-13 15:02 • 来自相关话题

2 回复

GatewayClient是通过TCP连接和发送消息的吗

回复

提问walkor 回复了问题 • 2 人关注 • 2016-01-03 22:08 • 来自相关话题

1 回复

WEB消息推送框架 web-msg-sender 推送html代码

回复

提问walkor 回复了问题 • 1 人关注 • 2015-12-29 18:22 • 来自相关话题

1 回复

web集成

回复

提问walkor 回复了问题 • 2 人关注 • 2015-12-16 15:00 • 来自相关话题

1 回复

web集成

回复

提问walkor 回复了问题 • 2 人关注 • 2015-12-16 10:58 • 来自相关话题

1 回复

关于2.0版本,在其他项目中推送消息问题

回复

提问walkor 回复了问题 • 3 人关注 • 2015-11-26 08:38 • 来自相关话题

1 回复

workerman 实现不同用户推送不同消息问题

回复

提问walkor 回复了问题 • 1 人关注 • 2019-10-30 15:23 • 来自相关话题