forked from whcyc2002/swoole_framework
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathwebsocket_server.php
More file actions
103 lines (89 loc) · 2.56 KB
/
websocket_server.php
File metadata and controls
103 lines (89 loc) · 2.56 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
<?php
define('DEBUG', 'on');
define("WEBPATH", str_replace("\\","/", __DIR__));
require __DIR__ . '/../libs/lib_config.php';
class WebSocket extends Swoole\Protocol\WebSocket
{
protected $message;
/**
* @param $serv swoole_server
* @param int $worker_id
*/
function onStart($serv, $worker_id = 0)
{
Swoole::$php->router(array($this, 'router'));
parent::onStart($serv, $worker_id);
}
function router()
{
var_dump($this->message);
}
/**
* 进入
* @param $client_id
*/
function onEnter($client_id)
{
}
/**
* 下线时,通知所有人
*/
function onExit($client_id)
{
//将下线消息发送给所有人
//$this->log("onOffline: " . $client_id);
//$this->broadcast($client_id, "onOffline: " . $client_id);
}
function onMessage_mvc($client_id, $ws)
{
$this->log("onMessage: ".$client_id.' = '.$ws['message']);
$this->message = $ws['message'];
$response = Swoole::$php->runMVC();
$this->send($client_id, $response);
//$this->broadcast($client_id, $ws['message']);
}
/**
* 接收到消息时
*/
function onMessage($client_id, $ws)
{
$this->log("onMessage: ".$client_id.' = '.$ws['message']);
$this->send($client_id, 'Server: '.$ws['message']);
//$this->broadcast($client_id, $ws['message']);
}
function broadcast($client_id, $msg)
{
foreach ($this->connections as $clid => $info)
{
if ($client_id != $clid)
{
$this->send($clid, $msg);
}
}
}
}
//require __DIR__'/phar://swoole.phar';
Swoole\Config::$debug = true;
Swoole\Error::$echo_html = false;
$AppSvr = new WebSocket();
$AppSvr->loadSetting(__DIR__."/swoole.ini"); //加载配置文件
$AppSvr->setLogger(new \Swoole\Log\EchoLog(true)); //Logger
/**
* 如果你没有安装swoole扩展,这里还可选择
* BlockTCP 阻塞的TCP,支持windows平台
* SelectTCP 使用select做事件循环,支持windows平台
* EventTCP 使用libevent,需要安装libevent扩展
*/
$enable_ssl = false;
$server = Swoole\Network\Server::autoCreate('0.0.0.0', 9443, $enable_ssl);
$server->setProtocol($AppSvr);
//$server->daemonize(); //作为守护进程
$server->run(array(
'worker_num' => 1,
'ssl_key_file' => __DIR__.'/ssl/ssl.key',
'ssl_cert_file' => __DIR__.'/ssl/ssl.crt',
//'max_request' => 1000,
//'ipc_mode' => 2,
//'heartbeat_check_interval' => 40,
//'heartbeat_idle_time' => 60,
));