Skip to content

Commit dea5b93

Browse files
committed
add readme
1 parent 5fbd283 commit dea5b93

File tree

3 files changed

+127
-22
lines changed

3 files changed

+127
-22
lines changed

README.md

Lines changed: 85 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,91 @@
11
# websocket-Swoole php框架扩展
22

3-
扩展内容主要包括:
3+
> ## 扩展说明
44
5-
二.websocket通信
6-
本扩展以websocket为基础服务,所以可以处理websocket的请求,多客户端连接通信,通过自定义命令来实时处理业务
5+
基于swoole开发的websocket实时推送、主动推送、长连接扩展,应用于php的各类框架,如thinkphp,yii2,laravel等
76

8-
三.基于websocket的实时推送
9-
服务端有消息变更时,通过向客户端推送消息,来达到消息的同步和实时反馈``
7+
> ## 如何使用
108
9+
## 安装
10+
11+
```php
12+
composer require xiaochengfu/swoole-websocket
13+
```
14+
15+
## 配置
16+
17+
1.将params_swoole.php.default配置文件放到你框架配置文件夹下
18+
推荐放到config下:
19+
```sh
20+
laravel、thinkphp5/6放到config目录下
21+
22+
yii2放到common/config目录下
23+
24+
```
25+
2.修改配置文件
26+
27+
如何修改,配置文件中有具体说明
28+
29+
## 启动
30+
31+
根据每个框架的自定义命令,设置对应的指令即可,以启动为例
32+
33+
```php
34+
$setting = config('params.swoole');//框架获取配置的方法,各有不同
35+
36+
$swoole = new SwooleService($setting);
37+
$swoole->serviceStart();
38+
```
39+
扩展支持
40+
41+
a.启动服务 serviceStart
42+
43+
b.查看服务状态 serviceStats
44+
45+
c.查看进程列表 serviceList
46+
47+
d.停止服务 serviceStop
48+
49+
## 场景测试
50+
51+
1.连接socket
52+
53+
访问`http://www.websocket-test.com`,输入ip:9512,进行连接测试
54+
55+
2.测试推送
56+
57+
推送通过http请求触发,在你要触发推送的action中,添加
58+
```php
59+
$swoole = new \xiaochengfu\swoole\Swoole(config('params.swoole'));
60+
$swoole->pushMsg(1,['hello','world']);
61+
62+
//注意pushMsg($fd,$data)
63+
//fd 这里可用刚连接的客户端1
64+
//data 类型为数组
65+
66+
```
67+
正确的话,你将在刚连接的浏览器客户端中接收到推送消息
68+
69+
3. 测试实时消息通信
70+
71+
这里采用callback回调的方式,可灵活的嵌入逻辑,只需要把`SwooleCallback.php`
72+
文件放到vendor外的任何地方,通过修改命名空间来访问,这里仅把SwooleCallback.php文件当作测试回调文件!
73+
74+
客户端发送消息格式如下:
75+
```json
76+
{"data":{"namespace":"xiaochengfu\\swoole\\SwooleCallback","function":"test","params":{"a":1}}}
77+
```
78+
---敲黑板---
79+
80+
a.发送的消息必须为字符串
81+
82+
b.格式说明
83+
84+
`namespace` 为回调文件的名字空间
85+
86+
`function` 为回调文件内的方法,必须为静态方法
87+
88+
`params` 为方法的参数
89+
90+
正确的话,socket客户端将立即收到服务端返回的消息
1191

params_swoole.php.default.php

Lines changed: 17 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -5,25 +5,25 @@
55
*/
66
return [
77
'swoole' => [
8-
'host' => 'ip', //服务启动IP
9-
'port' => '9512', //服务启动端口
10-
'swoole_http' => 'ip:9512',//推送触发连接地址
8+
'host' => '127.0.0.1', //服务启动IP,本地不要写localhost
9+
'port' => 9512, //服务启动端口
10+
'swoole_http' => '127.0.0.1:9512',//推送触发连接地址
1111
'process_name' => 'swooleWebSocket', //服务进程名
12-
'open_tcp_nodelay' => '1', //启用open_tcp_nodelay
12+
'open_websocket_close_frame' => true, //开启后,可在WebSocketServer中的onMessage回调中接收到客户端或服务端发送的关闭帧
13+
'open_tcp_nodelay' => 1, //启用open_tcp_nodelay
1314
'daemonize' => false, //守护进程化
14-
'heartbeat_idle_time' => 180, //客户端向服务端请求的间隔时间
15-
'heartbeat_check_interval' => 120, //服务端向客户端发送心跳包的间隔时间,两参数要配合使用
16-
'dispatch_mode' =>3, //抢占模式
17-
'reactor_num' => 2,
18-
'worker_num' => '5', //work进程数目
19-
'task_worker_num' => '5', //task进程的数量
20-
'task_max_request' => '10000', //work进程最大处理的请求数
21-
'max_connection' => '10000',
22-
// 'client_timeout' => '20',
23-
'pidfile' => Env::get('runtime_path') . 'swoole/yii2-swoole.pid',//
24-
'log_dir' => Env::get('runtime_path') . 'swoole',
25-
'task_tmpdir' => Env::get('runtime_path') . 'swoole',
26-
'log_file' => Env::get('runtime_path') . 'swoole/swoole.log',
15+
'heartbeat_idle_time' => 70, //连接最大的空闲时间 (如果最后一个心跳包的时间与当前时间之差超过这个值,则认为该连接失效,建议 heartbeat_idle_time 为 heartbeat_check_interval 的两倍多一点)
16+
'heartbeat_check_interval' => 30, //服务端向客户端发送心跳包的间隔时间,两参数要配合使用
17+
'dispatch_mode' => 4, //抢占模式
18+
'reactor_num' => 4, //master进程创建的线程,mac中通过htop查看不到reactor线程
19+
'worker_num' => 8, //work进程数目,cpu核数的1-4倍
20+
'task_worker_num' => 1, //task进程的数量
21+
'task_max_request' => 10000, //work进程最大处理的请求数
22+
'max_connection' => 10000, //服务器程序,最大允许的连接数
23+
'pidfile' => \think\facade\Env::get('runtime_path') . 'swoole/swoole.pid',//
24+
'log_dir' => \think\facade\Env::get('runtime_path') . 'swoole',
25+
'task_tmpdir' => \think\facade\Env::get('runtime_path') . 'swoole',
26+
'log_file' => \think\facade\Env::get('runtime_path') . 'swoole/swoole.log',
2727
'log_size' => 204800000, //运行时日志 单个文件大小
2828
],
2929
];

src/SwooleCallback.php

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
<?php
2+
/**
3+
* Name: SwooleCallback.php.
4+
* Author: hp <xcf-hp@foxmail.com>
5+
* Date: 2019-12-03 18:15
6+
* Description: SwooleCallback.php.
7+
*/
8+
9+
namespace xiaochengfu\swoole;
10+
11+
12+
class SwooleCallback
13+
{
14+
/**
15+
* Description: 实时推送回调测试
16+
* Author: hp <xcf-hp@foxmail.com>
17+
* @param $server
18+
* @param $fid
19+
* @param $data
20+
*/
21+
public static function test($server,$fid,$data){
22+
//实时回应
23+
$server->push($fid,json_encode($data));
24+
}
25+
}

0 commit comments

Comments
 (0)