首页
下载
文档
社区
视频
捐赠
源代码
赞助商
AOT 编译器
AI 助理
商业产品
PHP AOT 原生编译器
Swoole-Compiler 代码加密器
CRMEB 新零售社交电商系统
登录
注册
全部
提问
分享
讨论
建议
公告
开发框架
CodeGalaxy
发表新帖
我来提交一个bug。弄死我了。可以重现。我搞不定core dump
PHP 5.6.18 swoole 1.8.1 官网的websocket例子简化版(去了自定义handshake,这一段也不是问题的关键,加不加都会coredump) 问题描述,一次发送4KB(实际上我测下来是3500个字母就会coredump) {{{ <?php $server = new swoole_websocket_server("0.0.0.0", 8888, SWOOLE_BASE); $server->on('open', function (swoole_websocket_server $_server, swoole_http_request $request) { echo "server#{$_server->worker_pid}: handshake success with fd#{$request->fd}\n"; var_dump($_server->exist($request->fd), $_server->getClientInfo($request->fd)); }); $server->on('message', function (swoole_websocket_server $_server, $frame) { var_dump($frame->data); echo "received ".strlen($frame->data)." bytes\n"; if ($frame->data == "close") { $_server->close($frame->fd); } elseif($frame->data == "task") { $_server->task(['go' => 'die']); } else { //echo "receive from {$frame->fd}:{$frame->data}, opcode:{$frame->opcode}, finish:{$frame->finish}\n"; // for ($i = 0; $i < 100; $i++) { $_send = str_repeat('B', rand(100, 800)); $_server->push($frame->fd, $_send); // echo "#$i\tserver sent " . strlen($_send) . " byte \n"; } $fd = $frame->fd; $_server->tick(2000, function($id) use ($fd, $_server) { $_send = str_repeat('B', rand(100, 5000)); $ret = $_server->push($fd, $_send); if (!$ret) { var_dump($id); var_dump($_server->clearTimer($id)); } }); } }); $server->on('close', function ($_server, $fd) { echo "client {$fd} closed\n"; }); $server->on('task', function ($_server, $worker_id, $task_id, $data) { var_dump($worker_id, $task_id, $data); return "hello world\n"; }); $server->on('finish', function ($_server, $task_id, $result) { var_dump($task_id, $result); }); $server->on('packet', function ($_server, $data, $client) { echo "#".posix_getpid()."\tPacket {$data}\n"; var_dump($client); }); $server->start(); }}} 浏览器客户端我就不贴了,主要重现过程如下 ws = new WebSocket("ws://127.0.0.1:8888/"); ws.onopen = function() { ws.send('test'); }; 然后浏览器无论怎么发都是没问题的。 但是一旦发送的长度超过4K(3.5K?) 不会触发任何事件,直接coredump。 可以反复重现。 我把我的代码换成swoole_server后不会coredump。但是有其他问题就不在此描述了。
发布于9年前 · 0 次浏览 · 来自
提问
▆
▆
PHP 5.6.18 swoole 1.8.1 官网的websocket例子简化版(去了自定义handshake,这一段也不是问题的关键,加不加都会coredump) 问题描述,一次发送4KB(实际上我测下来是3500个字母就会coredump) {{{ <?php $server = new swoole_websocket_server("0.0.0.0", 8888, SWOOLE_BASE); $server->on('open', function (swoole_websocket_server $_server, swoole_http_request $request) { echo "server#{$_server->worker_pid}: handshake success with fd#{$request->fd}\n"; var_dump($_server->exist($request->fd), $_server->getClientInfo($request->fd)); }); $server->on('message', function (swoole_websocket_server $_server, $frame) { var_dump($frame->data); echo "received ".strlen($frame->data)." bytes\n"; if ($frame->data == "close") { $_server->close($frame->fd); } elseif($frame->data == "task") { $_server->task(['go' => 'die']); } else { //echo "receive from {$frame->fd}:{$frame->data}, opcode:{$frame->opcode}, finish:{$frame->finish}\n"; // for ($i = 0; $i < 100; $i++) { $_send = str_repeat('B', rand(100, 800)); $_server->push($frame->fd, $_send); // echo "#$i\tserver sent " . strlen($_send) . " byte \n"; } $fd = $frame->fd; $_server->tick(2000, function($id) use ($fd, $_server) { $_send = str_repeat('B', rand(100, 5000)); $ret = $_server->push($fd, $_send); if (!$ret) { var_dump($id); var_dump($_server->clearTimer($id)); } }); } }); $server->on('close', function ($_server, $fd) { echo "client {$fd} closed\n"; }); $server->on('task', function ($_server, $worker_id, $task_id, $data) { var_dump($worker_id, $task_id, $data); return "hello world\n"; }); $server->on('finish', function ($_server, $task_id, $result) { var_dump($task_id, $result); }); $server->on('packet', function ($_server, $data, $client) { echo "#".posix_getpid()."\tPacket {$data}\n"; var_dump($client); }); $server->start(); }}} 浏览器客户端我就不贴了,主要重现过程如下 ws = new WebSocket("ws://127.0.0.1:8888/"); ws.onopen = function() { ws.send('test'); }; 然后浏览器无论怎么发都是没问题的。 但是一旦发送的长度超过4K(3.5K?) 不会触发任何事件,直接coredump。 可以反复重现。 我把我的代码换成swoole_server后不会coredump。但是有其他问题就不在此描述了。
赞
0
收藏
提问
分享
讨论
建议
公告
开发框架
CodeGalaxy
登录
后参与评论
评论
2017-06-28
q
qudexin
1.8.x版本还有一些问题,请使用 官方推荐的 `1.7.22-stable` 稳定版。
赞
0
回复
2017-06-28
j
jie
好激动啊。大神你好。多谢多谢~
赞
0
回复