Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
S
swooleframe
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
石振业
swooleframe
Commits
b9453b60
Commit
b9453b60
authored
Oct 29, 2018
by
734642908@qq.com
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
抽离配置文件
parent
d077e892
Hide whitespace changes
Inline
Side-by-side
Showing
7 changed files
with
154 additions
and
77 deletions
+154
-77
common.php
application/common.php
+38
-5
config.php
application/conf/config.php
+19
-0
base.php
application/socket/controller/base.php
+3
-3
user.php
application/socket/controller/user.php
+74
-40
server.php
server.php
+2
-2
socketServer.php
swoole/socketServer.php
+2
-15
socketWork.php
swoole/socketWork.php
+16
-12
No files found.
application/common.php
View file @
b9453b60
...
...
@@ -67,7 +67,39 @@ function cache($config) {
return
$con
;
}
//解码(主要针对特殊符号和emoji表情)
function
emoji_decode
(
$str
){
if
(
empty
(
$str
)){
return
$str
;
}
$str
=
preg_replace_callback
(
'/@E(.{6}==)/'
,
function
(
$r
)
{
return
base64_decode
(
$r
[
1
]);
},
$str
);
return
$str
;
}
function
createLoginToken
(
$data
)
{
$arr
=
json_encode
(
$arr
);
return
base64_encode
(
uc_authcode
(
$arr
,
'ENCODE'
));
}
function
decryptToken
(
$token
)
{
if
(
$token
){
$val
=
uc_authcode
(
base64_decode
(
$token
),
'DECODE'
);
if
(
!
empty
(
$val
)){
$val
=
json_decode
(
$val
,
true
);
}
else
{
$val
=
false
;
}
return
$val
;
}
else
{
return
false
;
}
}
/***********************************socket公用方法start********************************************************/
//根据用户ID查用户的连接记录
function
get_user_fd
(
$uid
){
if
(
$GLOBALS
[
'USER_LIST'
]
->
exist
(
$uid
)){
...
...
@@ -114,7 +146,7 @@ function del_user_list($fd){
}
//给某个用户发信息
function
send_user
(
$server
,
$uid
,
$data
,
$opcode
=
1
){
function
send_user
(
$server
,
$uid
,
$data
,
$opcode
=
1
,
$finish
=
true
){
if
(
empty
(
$uid
)){
return
false
;
}
...
...
@@ -135,7 +167,7 @@ function send_user($server,$uid,$data,$opcode=1){
function
send_group
(
$server
,
$arr
,
$data
,
$opcode
=
1
){
if
(
!
empty
(
$arr
)){
foreach
(
$arr
as
$uid
){
if
(
send_user
(
$
uid
[
'uid'
]
,
$data
,
$opcode
)){
if
(
send_user
(
$
server
,
$uid
,
$data
,
$opcode
)){
echo_log
(
'用户['
.
$uid
.
']发送消息成功!\r\n'
);
}
else
{
echo_log
(
'用户['
.
$uid
.
']的客户端已经断开,无法发送消息!\r\n'
);
...
...
@@ -148,7 +180,7 @@ function send_group($server,$arr,$data,$opcode=1){
}
//给所有用户发信息
function
send_all
(
$server
,
$data
,
$opcode
=
1
){
function
send_all
(
$server
,
$data
,
$opcode
=
1
,
$finish
=
true
){
if
(
!
empty
(
$GLOBALS
[
'USER_LIST'
])){
foreach
(
$GLOBALS
[
'USER_LIST'
]
as
$fd
){
$server
->
push
(
$fd
[
'fd'
],
$data
,
$opcode
,
$finish
);
...
...
@@ -162,4 +194,5 @@ function send_all($server,$data,$opcode=1){
echo_log
(
'没有指定要发信息的用户,无法发送消息!\r\n'
);
}
return
true
;
}
\ No newline at end of file
}
/***********************************socket公用方法end********************************************************/
\ No newline at end of file
application/conf/config.php
View file @
b9453b60
<?php
$GLOBALS
[
'config'
]
=
array
(
'SERVER_NAME'
=>
"test"
,
'MAIN_SERVER'
=>
[
'HOST'
=>
'0.0.0.0'
,
'PORT'
=>
9502
,
'SETTING'
=>
[
'open_tcp_nodelay'
=>
1
,
'open_cpu_affinity'
=>
1
,
'task_worker_num'
=>
8
,
'dispatch_mode'
=>
2
,
'daemonize'
=>
0
,
//守护进程化。设置daemonize => 1时,程序将转入后台作为守护进程运行。长时间运行的服务器端程序必须启用此项。
'reactor_num'
=>
2
,
//2个处理线程的数量
'worker_num'
=>
4
,
//4个线程
'max_request'
=>
0
,
//最大10万个连接请求
// 'heartbeat_idle_time' => 60,//如果客户端超过600秒未向服务器发消息
// 'heartbeat_check_interval' =>61,//每60秒检查一次所有的连接
'log_file'
=>
ROOT_PATH
.
'swoole.log'
]
],
'REDIS'
=>
array
(
'type'
=>
'Redis'
,
'host'
=>
'127.0.0.1'
,
// 119.23.249.188 (部署)
...
...
application/socket/controller/base.php
View file @
b9453b60
...
...
@@ -8,10 +8,10 @@ class base {
public
function
setData
(
$data
)
{
if
(
!
empty
(
$data
[
'server'
])
&&
!
empty
(
$data
[
'fd'
])
&&
!
empty
(
$data
[
'd'
])
)
{
if
(
!
empty
(
$data
[
'server'
]))
{
$this
->
server
=
$data
[
'server'
];
$this
->
fd
=
$data
[
'fd'
];
$this
->
reqData
=
$data
[
'd'
];
$this
->
fd
=
$data
[
'fd'
]
??
''
;
$this
->
reqData
=
$data
[
'd'
]
??
''
;
return
true
;
}
else
{
return
false
;
...
...
application/socket/controller/user.php
View file @
b9453b60
...
...
@@ -3,24 +3,22 @@ include_once(ROOT_PATH."application/socket/model/UserModel.php");//uesrModel
class
user
extends
base
{
public
function
list
()
public
function
mysqlData
()
{
$userModel
=
new
\socket\model\UserModel
();
$data
=
$userModel
->
get
Data
();
$data
=
$userModel
->
get
One
();
$reData
=
json_encode
(
array
(
'c'
=>
1
,
'msg'
=>
'success'
,
'd'
=>
array
(
'info'
=>
$data
)));
$this
->
server
->
push
(
$this
->
fd
,
$reData
);
}
public
function
info
()
{
$userModel
=
new
\socket\model\UserModel
();
$data
=
$userModel
->
getOne
();
$reData
=
json_encode
(
array
(
'c'
=>
1
,
'msg'
=>
'success'
,
'd'
=>
array
(
'info'
=>
$data
)));
public
function
redisData
()
{
$data
=
$GLOBALS
[
'redisDB'
]
->
get
(
'hezijp001'
);
$reData
=
json_encode
(
array
(
'c'
=>
1
,
'msg'
=>
'success'
,
'd'
=>
array
(
'list'
=>
json_decode
(
$data
,
true
))));
$this
->
server
->
push
(
$this
->
fd
,
$reData
);
}
public
function
online
N
um
()
public
function
online
_n
um
()
{
$reData
=
json_encode
(
array
(
'c'
=>
1
,
'msg'
=>
'success'
,
'd'
=>
array
(
'num'
=>
count
(
$GLOBALS
[
'USER_LIST'
]))));
$this
->
server
->
push
(
$this
->
fd
,
$reData
);
...
...
@@ -31,70 +29,105 @@ class user extends base {
$uid
=
get_user_uid
(
$this
->
fd
);
$result
=
array
(
'c'
=>
1
,
'msg'
=>
'
登录
成功'
,
'msg'
=>
'
获取
成功'
,
'd'
=>
array
(
'uid'
=>
$uid
)
);
$this
->
server
->
push
(
$this
->
fd
,
json_encode
(
$result
));
}
public
function
login
()
{
if
(
empty
(
$this
->
reqData
[
'uid'
]))
{
public
function
set_info
()
{
$token
=
decryptToken
(
$this
->
reqData
[
'token'
]);
if
(
$token
==
false
)
{
$result
=
array
(
'c'
=>
2
,
'msg'
=>
$this
->
reqData
[
'uid'
]
,
'msg'
=>
'token不正确'
);
}
else
{
$GLOBALS
[
'USER_LIST'
]
->
set
(
$this
->
reqData
[
'uid'
],
array
(
'fd'
=>
$this
->
fd
));
set_user_list
(
array
(
'fd'
=>
$frame
->
fd
,
'uid'
=>
$token
[
'uid'
]
));
$result
=
array
(
'c'
=>
1
,
'msg'
=>
'
登录
成功'
,
'msg'
=>
'
保存
成功'
);
}
$this
->
server
->
push
(
$this
->
fd
,
json_encode
(
$result
));
}
public
function
cache
()
{
$data
=
$GLOBALS
[
'redisDB'
]
->
get
(
'hezijp001'
);
$reData
=
json_encode
(
array
(
'c'
=>
1
,
'msg'
=>
'success'
,
'd'
=>
array
(
'list'
=>
json_decode
(
$data
,
true
))));
$this
->
server
->
push
(
$this
->
fd
,
$reData
);
//广播(给所有在线用户发送消息)
public
function
broadcast
()
{
if
(
empty
(
$this
->
reqData
[
'content'
]))
{
$result
=
array
(
'c'
=>
2
,
'msg'
=>
'content参数不存在'
);
}
else
{
//发送消息给接收者
$consignee
=
array
(
'c'
=>
1
,
'msg'
=>
'接收到广播信息'
,
'd'
=>
array
(
'sender'
=>
get_user_uid
(
$this
->
fd
),
'content'
=>
$this
->
reqData
[
'content'
])
);
send_all
(
$this
->
server
,
json_encode
(
$consignee
));
//发送成功,通知发送者
$sender
=
array
(
'c'
=>
1
,
'msg'
=>
'信息发送成功'
);
$this
->
server
->
push
(
$this
->
fd
,
json_encode
(
$sender
));
return
'success'
;
}
$this
->
server
->
push
(
$this
->
fd
,
json_encode
(
$result
));
return
'fail'
;
}
public
function
msg
()
{
if
(
empty
(
$this
->
reqData
[
'uid'
]))
{
//给指定用户发送消息
public
function
send_msg
()
{
if
(
empty
(
$this
->
reqData
[
'to_uid'
]))
{
$result
=
array
(
'c'
=>
2
,
'msg'
=>
'uid参数不存在'
,
'msg'
=>
'to_uid参数不存在'
);
}
else
if
(
empty
(
$this
->
reqData
[
'content'
]))
{
$result
=
array
(
'c'
=>
2
,
'msg'
=>
'content参数不存在'
);
}
else
{
$fd
=
get_user_fd
(
$this
->
reqData
[
'uid'
]);
if
(
!
empty
(
$fd
))
{
//消息发送者
$send1
=
array
(
'c'
=>
1
,
'msg'
=>
'发送成功'
);
$this
->
server
->
push
(
$this
->
fd
,
json_encode
(
$send1
));
//消息结束者
$send2
=
array
(
//发送消息给接收者
$consignee
=
array
(
'c'
=>
1
,
'msg'
=>
'接收到新信息'
,
'd'
=>
array
(
'sender'
=>
$this
->
reqData
[
'to_uid'
],
'content'
=>
$this
->
reqData
[
'content'
])
);
if
(
is_array
(
$this
->
reqData
[
'to_uid'
]))
{
$re1
=
send_group
(
$this
->
server
,
$this
->
reqData
[
'to_uid'
],
json_encode
(
$consignee
));
}
else
{
$re1
=
send_user
(
$this
->
server
,
$this
->
reqData
[
'to_uid'
],
json_encode
(
$consignee
));
}
if
(
$re1
)
{
//发送成功,通知发送者
$sender
=
array
(
'c'
=>
1
,
'msg'
=>
'接收到新信息'
,
'd'
=>
array
(
'uid'
=>
get_user_uid
(
$this
->
fd
),
'text'
=>
$this
->
reqData
[
'text'
])
,
'msg'
=>
'信息发送成功'
);
$this
->
server
->
push
(
$fd
,
json_encode
(
$send2
));
return
'success'
;
if
(
!
empty
(
$this
->
fd
))
{
$this
->
server
->
push
(
$this
->
fd
,
json_encode
(
$sender
));
}
return
json_encode
(
$sender
);
}
else
{
$result
=
array
(
'c'
=>
2
,
'msg'
=>
'
uid参数错误
'
,
'msg'
=>
'
信息发送失败
'
);
}
}
$this
->
server
->
push
(
$this
->
fd
,
json_encode
(
$result
));
return
'fail'
;
return
json_encode
(
$sender
)
;
}
}
\ No newline at end of file
server.php
View file @
b9453b60
...
...
@@ -20,4 +20,4 @@ $GLOBALS['TASK_LIST']->create();
define
(
'ROOT_PATH'
,
dirname
(
__FILE__
)
.
'/'
);
// 引入socketServer文件
require
'./swoole/socketServer.php'
;
$server
=
new
socketServer
(
"0.0.0.0"
,
"9502"
);
\ No newline at end of file
$server
=
new
socketServer
(
$GLOBALS
[
'config'
][
'MAIN_SERVER'
][
'HOST'
],
$GLOBALS
[
'config'
][
'MAIN_SERVER'
][
'PORT'
]);
\ No newline at end of file
swoole/socketServer.php
View file @
b9453b60
<?php
require_once
ROOT_PATH
.
"application/conf/config.php"
;
//配置信息
class
socketServer
{
private
$server
;
...
...
@@ -7,20 +7,7 @@ class socketServer
public
function
__construct
(
$host
,
$port
)
{
$this
->
server
=
new
swoole_websocket_server
(
$host
,
$port
);
$this
->
server
->
set
(
array
(
'open_tcp_nodelay'
=>
1
,
'open_cpu_affinity'
=>
1
,
'task_worker_num'
=>
8
,
'dispatch_mode'
=>
2
,
'daemonize'
=>
0
,
//守护进程化。设置daemonize => 1时,程序将转入后台作为守护进程运行。长时间运行的服务器端程序必须启用此项。
'reactor_num'
=>
2
,
//2个处理线程的数量
'worker_num'
=>
4
,
//4个线程
'max_request'
=>
0
,
//最大10万个连接请求
// 'heartbeat_idle_time' => 60,//如果客户端超过600秒未向服务器发消息
// 'heartbeat_check_interval' =>61,//每60秒检查一次所有的连接
'log_file'
=>
'./swoole.log'
));
$this
->
server
->
set
(
$GLOBALS
[
'config'
][
'MAIN_SERVER'
][
'SETTING'
]);
$this
->
server
->
on
(
'start'
,
array
(
$this
,
'onStart'
));
$this
->
server
->
on
(
'shutdown'
,
array
(
$this
,
'onShutdown'
));
...
...
swoole/socketWork.php
View file @
b9453b60
<?php
require_once
ROOT_PATH
.
"application/conf/config.php"
;
//配置信息
require_once
ROOT_PATH
.
"application/common.php"
;
//公共方法
require_once
ROOT_PATH
.
"extend/mysql/Connection.php"
;
//mysql方法
...
...
@@ -48,7 +47,7 @@ class socketWork {
$tmp_task_id
=
$this
->
server
->
task
(
$data
);
echo_log
(
"进行task任务:"
.
$tmp_task_id
);
}
else
{
$
server
->
push
(
$frame
->
fd
,
"找不到对应的模块"
);
$
this
->
server
->
push
(
$frame
->
fd
,
json_encode
(
array
(
'c'
=>
2
,
'msg'
=>
'找不到对应的模块'
))
);
}
}
...
...
@@ -57,13 +56,20 @@ class socketWork {
if
(
$event
==
'reload'
)
{
$server
->
reload
();
$response
->
write
(
'reload success'
);
}
else
if
(
$event
==
'sendAll'
)
{
$this
->
sendAll
(
$server
,
'大家好'
);
$response
->
write
(
$GLOBALS
[
'USER_LIST'
]
->
get
(
'fd3'
));
}
else
if
(
$event
==
'send_msg'
)
{
//通过uid给用户发送消息
$act
=
new
user
();
$data
=
array
(
'server'
=>
$server
,
'd'
=>
$request
->
post
);
$act
->
setData
(
$data
);
$result
=
$act
->
send_msg
();
$response
->
write
(
$result
);
}
else
{
// $data = $this->server->db->select('sysid as id,name')->from('yl_goods')->where('sysid=1')->row();
// $reData = json_encode(array('c'=>1,'msg'=>'success','d'=>array('list'=>$data)));
$response
->
write
(
'websocket server respone'
);
//默认返回
$response
->
write
(
'websocket response'
);
}
}
...
...
@@ -73,7 +79,7 @@ class socketWork {
$act
=
new
$data
[
'm'
]();
//是否有这个方法在
if
(
!
method_exists
(
$act
,
$data
[
'a'
]))
{
$
server
->
push
(
$data
[
'fd'
],
"找不到对应的方法"
);
$
this
->
server
->
push
(
$data
[
'fd'
],
json_encode
(
array
(
'c'
=>
2
,
'msg'
=>
'找不到对应的方法'
))
);
$this
->
server
->
finish
(
$task_Id
);
return
false
;
}
else
{
...
...
@@ -97,9 +103,7 @@ class socketWork {
public
function
onClose
(
$server
,
$fd
)
{
del_user_list
(
$fd
);
echo
'client'
.
$fd
.
'下线'
;
//$this->redis->hdel($this->userTable,"fd{$fd}");
//$this->sendAll($server,"用户{$fd}下线了");
echo_log
(
'client'
.
$fd
.
'下线'
);
}
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment