server.php
4.3 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
<?php
use Workerman\Worker;
use think\Db;
// 数据库配置信息设置(全局有效)
require_once __DIR__ . '/simplewind/vendor/workerman/workerman/Autoloader.php';
//require_once __DIR__ . '/simplewind/vendor/autoload.php';
//$global_uid = 0;
//
//// 当客户端连上来时分配uid,并保存连接,并通知所有客户端
//function handle_connection($connection)
//{
// global $text_worker, $global_uid;
// // 为这个连接分配一个uid
// $connection->uid = ++$global_uid;
//}
//
//// 当客户端发送消息过来时,转发给所有人
//function handle_message($connection, $data)
//{
// global $text_worker;
// foreach($text_worker->connections as $conn)
// {
// $conn->send("user[{$connection->uid}] said: $data");
// }
//}
//
//// 当客户端断开时,广播给所有客户端
//function handle_close($connection)
//{
// global $text_worker;
// foreach($text_worker->connections as $conn)
// {
// $conn->send("user[{$connection->uid}] logout");
// }
//}
//
//// 创建一个文本协议的Worker监听2347接口
//$text_worker = new Worker("text://0.0.0.0:2347");
//
//// 只启动1个进程,这样方便客户端之间传输数据
//$text_worker->count = 1;
//
//$text_worker->onConnect = 'handle_connection';
//$text_worker->onMessage = 'handle_message';
//$text_worker->onClose = 'handle_close';
//
//
//
//$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;
//}
// 创建一个Worker监听2347端口,不使用任何应用层协议
$tcp_worker = new Worker("websocket://114.215.223.17:5001");
$tcp_worker->name='panhaowen';
// 启动4个进程对外提供服务
$tcp_worker->count = 1;
// 当客户端发来数据时
$tcp_worker->onMessage = function($connection, $data)
{
// 向客户端发送hello $data
$connection->send('hello '. $data);
Db::table('user')->where('id',1)->update(['sex'=>2]);
// if ($data=='tom') {
// Db::table('user')->where('id',1)->update(['sex'=>1]);
// }
};
Worker::runAll();