yonghu.php
4.9 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
<?php
require_once __DIR__ . '/simplewind/vendor/autoload.php';
require_once __DIR__ . '/simplewind/vendor/workerman/workerman/Autoloader.php';
use Workerman\Worker;
use Workerman\Connection\AsyncTcpConnection;
use think\Db;
use Workerman\Lib\Timer;
//
//$worker = new Worker('websocket://0.0.0.0:1234');
//$worker->count = 1;
//// worker进程启动后创建一个text Worker以便打开一个内部通讯端口
//$worker->onWorkerStart = function($worker)
//{
// // 开启一个内部端口,方便内部系统推送数据,Text协议格式 文本+换行符
// $inner_text_worker = new Worker('text://0.0.0.0:5678');
// $inner_text_worker->onMessage = function($connection, $buffer)
// {
// // $data数组格式,里面有uid,表示向那个uid的页面推送数据
// $data = json_decode($buffer, true);
// $uid = $data['uid'];
// // 通过workerman,向uid的页面推送数据
// $ret = sendMessageByUid($uid, $buffer);
// // 返回推送结果
// $connection->send($ret ? 'ok' : 'fail');
// };
// // ## 执行监听 ##
// $inner_text_worker->listen();
//};
//// 新增加一个属性,用来保存uid到connection的映射
//$worker->uidConnections = array();
//// 当有客户端发来消息时执行的回调函数
//$worker->onMessage = function($connection, $data)
//{
// global $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)
//{
// 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;
//}
// 数据库配置信息设置(全局有效)
//Db::setConfig(['数据库配置参数(数组)']);
////创建一个监听端口
//$worker = new Worker("websocket://114.215.223.17:5001");
////设置当前Worker实例的名称
//$worker->name='panhaowen';
//// 启动1个进程对外提供服务
//$worker->count = 1;
//// 进程启动时设置一个定时器,定时向所有客户端连接发送数据
//$worker->onWorkerStart = function($worker)
//{
// // 定时,每10秒一次
// Timer::add(10, function()use($worker)
// {
// // 遍历当前进程所有的客户端连接,发送当前服务器的时间
// foreach($worker->connections as $connection)
// {
// $connection->send(time());
// }
// });
//};
//$worker->onConnect = function($connection)
//{
// echo "new connection from ip " . $connection->getRemoteIp() . "\n";
//};
//$worker->onWorkerStart = function($worker)
//{
// // 将db实例存储在全局变量中(也可以存储在某类的静态成员中)
// global $db;
// $db = new \Workerman\MySQL\Connection('rm-m5eblhc9o3515i25neo.mysql.rds.aliyuncs.com', '3306', 'db136s1ehvo1yn73', 'cxz307311SJK', 'fupai');
//};
//// 当客户端发来数据时
//$worker->onMessage = function($connection, $data) {
// global $db;
// $data=$db->select('create_time')->from('fp_user')->where("id=1")->query();
//};
//function sendMessageByUid($uid, $message)
//{
// global $worker;
// if(isset($worker->uidConnections[$uid]))
// {
// $connection = $worker->uidConnections[$uid];
// $connection->send($message);
// }
//}
$worker = new Worker();
$worker->onWorkerStart = function($worker){
// 设置访问对方主机的本地ip及端口(每个socket连接都会占用一个本地端口)
$context_option = array(
'socket' => array(
// ip必须是本机网卡ip,并且能访问对方主机,否则无效
'bindto' => '114.215.223.17:5002',
),
);
$con = new AsyncTcpConnection('ws://114.215.223.17:5001', $context_option);
$con->onConnect = function($con) {
$con->send('hello');
};
$con->onMessage = function($con, $data) {
echo $data;
};
$con->connect();
};
Worker::runAll();