Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

swoole_websocket_server连续接受小于8字节数据包中断 #648

Closed
tiaodeng opened this issue Apr 28, 2016 · 12 comments
Closed

swoole_websocket_server连续接受小于8字节数据包中断 #648

tiaodeng opened this issue Apr 28, 2016 · 12 comments

Comments

@tiaodeng
Copy link

hello!
swoole-1.8.4
swoole_websocket_server连续接受小于8字节数据包后中断接受客户端消息包,客户端可以收到server的消息,swoole_websocket_server回调中断。

这个是配置问题么?

@matyhtf
Copy link
Member

matyhtf commented Apr 29, 2016

详细描述你的环境,贴出测试的代码。

@tiaodeng
Copy link
Author

cat /proc/version
Linux version 2.6.32-431.23.3.el6.x86_64 (mockbuild@c6b8.bsys.dev.centos.org) (gcc version 4.4.7 20120313 (Red Hat 4.4.7-4) (GCC) ) #1 SMP Thu Jul 31 17:20:51 UTC 2014

php -v
PHP 7.0.5 (cli) (built: Apr 26 2016 12:12:34) ( NTS )
Copyright (c) 1997-2016 The PHP Group
Zend Engine v3.0.0, Copyright (c) 1998-2016 Zend Technologies

ws.php

<?php

$ws = new swoole_websocket_server("101.200.214.88", 9502);

$ws->on('open', function ($ws, $request) {
    var_dump($request);
    $ws->push($request->fd, "hello, welcome\n");
});

$ws->on('message', function ($ws, $frame) {
    echo "Message: {$frame->data}\n";
    $ws->push($frame->fd, "server: {$frame->data}");
});

$ws->on('close', function ($ws, $fd) {
    echo "client-{$fd} is closed\n";
});

$ws->on("receive",function(swoole_server $serv,$fd,$from_id,$data){
    echo "receive";
    var_dump($fd,$from_id,$data);
    echo PHP_EOL;
});


$ws->start();

?>

client.php

<?php
include_once '../init.php';
include_once 'WebSocketClient.php';

$client = new WebSocketClient("101.200.214.88", 9502);
$data = $client->connect();
for($i=0;$i<1000;$i++){
    $client->send("aaaaa".$i);
}

sleep(1);

测试运行结果如下:
object(swoole_http_request)#7 (3) {
["fd"]=>
int(3)
["header"]=>
array(8) {
["origin"]=>
string(0) ""
["host"]=>
string(19) "101.200.214.88:9502"
["sec-websocket-key"]=>
string(24) "TXthbX1dJG82M1dFdnhHeQ=="
["user-agent"]=>
string(24) "PHPWebSocketClient/0.1.4"
["upgrade"]=>
string(9) "websocket"
["connection"]=>
string(7) "Upgrade"
["sec-websocket-protocol"]=>
string(4) "wamp"
["sec-websocket-version"]=>
string(2) "13"
}
["server"]=>
array(10) {
["request_method"]=>
string(3) "GET"
["request_uri"]=>
string(1) "/"
["path_info"]=>
string(1) "/"
["request_time"]=>
int(1461898568)
["request_time_float"]=>
float(1461898568.0577)
["server_port"]=>
int(9502)
["remote_port"]=>
int(34929)
["remote_addr"]=>
string(13) "123.56.184.66"
["server_protocol"]=>
string(8) "HTTP/1.1"
["server_software"]=>
string(18) "swoole-http-server"
}
}
Message: aaaaa0
client-3 is closed

把client.php中的send改为:
$client->send("aaaaaaaaaa".$i);

运行结果如下:
…………
Message: aaaaaaaaaa959
Message: aaaaaaaaaa960
Message: aaaaaaaaaa961
Message: aaaaaaaaaa962
Message: aaaaaaaaaa963
Message: aaaaaaaaaa964
Message: aaaaaaaaaa965
Message: aaaaaaaaaa966
Message: aaaaaaaaaa967
Message: aaaaaaaaaa968
Message: aaaaaaaaaa969
Message: aaaaaaaaaa970
Message: aaaaaaaaaa971
Message: aaaaaaaaaa972
Message: aaaaaaaaaa973
Message: aaaaaaaaaa974
Message: aaaaaaaaaa975
Message: aaaaaaaaaa976
Message: aaaaaaaaaa977
Message: aaaaaaaaaa978
Message: aaaaaaaaaa979
Message: aaaaaaaaaa980
Message: aaaaaaaaaa981
Message: aaaaaaaaaa982
Message: aaaaaaaaaa983
Message: aaaaaaaaaa984
Message: aaaaaaaaaa985
Message: aaaaaaaaaa986
Message: aaaaaaaaaa987
Message: aaaaaaaaaa988
Message: aaaaaaaaaa989
Message: aaaaaaaaaa990
Message: aaaaaaaaaa991
Message: aaaaaaaaaa992
Message: aaaaaaaaaa993
Message: aaaaaaaaaa994
Message: aaaaaaaaaa995
Message: aaaaaaaaaa996
Message: aaaaaaaaaa997
Message: aaaaaaaaaa998
Message: aaaaaaaaaa999
client-4 is closed

@nosun
Copy link

nosun commented May 1, 2016

应该是 client 缓冲区满了吧

@tiaodeng
Copy link
Author

tiaodeng commented May 3, 2016

只有数据包小于8字节才会出现这个情况。 不需要太多次,连续两次就会断掉

@matyhtf
Copy link
Member

matyhtf commented May 3, 2016

是客户端断掉连接还是服务器断掉连接?
客户端连续向服务器发送8字节的内容吗?
服务器端有什么错误日志?

@tiaodeng
Copy link
Author

tiaodeng commented May 3, 2016

是客户端断掉连接还是服务器断掉连接?
socket链接没有断。是message回调函数不能再接收到客户端的消息。生产环境中,客户端能接收到server断推送的消息,server的回调函数不能再接收到客户端发送的消息。

客户端连续向服务器发送8字节的内容吗?
连续发送小于8字节。大于8字节不会出现这个情况。

服务器端有什么错误日志?
服务器没有任何报错。只有当客户端大循环的时候才会出现下边错误。
[2016-04-28 23:54:06 #31305.0] ERROR swProtocol_recv_check_length(:137): recv from socket#8 failed. Error: Bad address[14].
*** glibc detected *** php: free(): invalid next size (fast): 0x00007f184c01ea40 ***
======= Backtrace: =========
/lib64/libc.so.6[0x3d22275f4e]
/lib64/libc.so.6[0x3d22278cf0]
/lib64/libc.so.6[0x3d2229d939]
/lib64/libc.so.6[0x3d2229dab9]
/usr/local/servers/php7/lib/php/extensions/no-debug-non-zts-20151012/swoole.so(swLog_put+0x5c)[0x7f185593360c]
/usr/local/servers/php7/lib/php/extensions/no-debug-non-zts-20151012/swoole.so(swProtocol_recv_check_length+0x1d8)[0x7f185594fbf8]
/usr/local/servers/php7/lib/php/extensions/no-debug-non-zts-20151012/swoole.so(+0x46c29)[0x7f185594cc29]
/usr/local/servers/php7/lib/php/extensions/no-debug-non-zts-20151012/swoole.so(+0x382c4)[0x7f185593e2c4]
/usr/local/servers/php7/lib/php/extensions/no-debug-non-zts-20151012/swoole.so(+0x40f30)[0x7f1855946f30]
/lib64/libpthread.so.0[0x3d22607aa1]
/lib64/libc.so.6(clone+0x6d)[0x3d222e893d]
======= Memory map: ========
00400000-00e23000 r-xp 00000000 ca:01 1311736 /usr/local/servers/php7/bin/php
01023000-010dd000 rw-p 00a23000 ca:01 1311736 /usr/local/servers/php7/bin/php
010dd000-010fd000 rw-p 00000000 00:00 0
027ed000-029c5000 rw-p 00000000 00:00 0 [heap]
3d21a00000-3d21a20000 r-xp 00000000 ca:01 262261 /lib64/ld-2.12.so
3d21c1f000-3d21c20000 r--p 0001f000 ca:01 262261 /lib64/ld-2.12.so
3d21c20000-3d21c21000 rw-p 00020000 ca:01 262261 /lib64/ld-2.12.so
3d21c21000-3d21c22000 rw-p 00000000 00:00 0
3d21e00000-3d21e15000 r-xp 00000000 ca:01 262271 /lib64/libz.so.1.2.3
3d21e15000-3d22014000 ---p 00015000 ca:01 262271 /lib64/libz.so.1.2.3
3d22014000-3d22015000 r--p 00014000 ca:01 262271 /lib64/libz.so.1.2.3
3d22015000-3d22016000 rw-p 00015000 ca:01 262271 /lib64/libz.so.1.2.3
3d22200000-3d2238a000 r-xp 00000000 ca:01 270868 /lib64/libc-2.12.so
3d2238a000-3d2258a000 ---p 0018a000 ca:01 270868 /lib64/libc-2.12.so
3d2258a000-3d2258e000 r--p 0018a000 ca:01 270868 /lib64/libc-2.12.so
3d2258e000-3d2258f000 rw-p 0018e000 ca:01 270868 /lib64/libc-2.12.so
3d2258f000-3d22594000 rw-p 00000000 00:00 0
3d22600000-3d22617000 r-xp 00000000 ca:01 262166 /lib64/libpthread-2.12.so
3d22617000-3d22817000 ---p 00017000 ca:01 262166 /lib64/libpthread-2.12.so
3d22817000-3d22818000 r--p 00017000 ca:01 262166 /lib64/libpthread-2.12.so
3d22818000-3d22819000 rw-p 00018000 ca:01 262166 /lib64/libpthread-2.12.so
3d22819000-3d2281d000 rw-p 00000000 00:00 0
3d22a00000-3d22a02000 r-xp 00000000 ca:01 270870 /lib64/libdl-2.12.so
3d22a02000-3d22c02000 ---p 00002000 ca:01 270870 /lib64/libdl-2.12.so
3d22c02000-3d22c03000 r--p 00002000 ca:01 270870 /lib64/libdl-2.12.so
3d22c03000-3d22c04000 rw-p 00003000 ca:01 270870 /lib64/libdl-2.12.so
3d22e00000-3d22e07000 r-xp 00000000 ca:01 270875 /lib64/librt-2.12.so
3d22e07000-3d23006000 ---p 00007000 ca:01 270875 /lib64/librt-2.12.so
3d23006000-3d23007000 r--p 00006000 ca:01 270875 /lib64/librt-2.12.so
3d23007000-3d23008000 rw-p 00007000 ca:01 270875 /lib64/librt-2.12.so
3d23200000-3d23283000 r-xp 00000000 ca:01 270877 /lib64/libm-2.12.so
3d23283000-3d23482000 ---p 00083000 ca:01 270877 /lib64/libm-2.12.so
3d23482000-3d23483000 r--p 00082000 ca:01 270877 /lib64/libm-2.12.so
3d23483000-3d23484000 rw-p 00083000 ca:01 270877 /lib64/libm-2.12.so
3d23600000-3d2361d000 r-xp 00000000 ca:01 270878 /lib64/libselinux.so.1
3d2361d000-3d2381c000 ---p 0001d000 ca:01 270878 /lib64/libselinux.so.1
3d2381c000-3d2381d000 r--p 0001c000 ca:01 270878 /lib64/libselinux.so.1
3d2381d000-3d2381e000 rw-p 0001d000 ca:01 270878 /lib64/libselinux.so.1
3d2381e000-3d2381f000 rw-p 00000000 00:00 0
3d23e00000-3d23e03000 r-xp 00000000 ca:01 270901 /lib64/libcom_err.so.2.1
3d23e03000-3d24002000 ---p 00003000 ca:01 270901 /lib64/libcom_err.so.2.1
3d24002000-3d24003000 r--p 00002000 ca:01 270901 /lib64/libcom_err.so.2.1
3d24003000-3d24004000 rw-p 00003000 ca:01 270901 /lib64/libcom_err.so.2.1
3d24200000-3d24216000 r-xp 00000000 ca:01 269476 /lib64/libresolv-2.12.so
3d24216000-3d24416000 ---p 00016000 ca:01 269476 /lib64/libresolv-2.12.so
3d24416000-3d24417000 r--p 00016000 ca:01 269476 /lib64/libresolv-2.12.so
3d24417000-3d24418000 rw-p 00017000 ca:01 269476 /lib64/libresolv-2.12.so
3d24418000-3d2441a000 rw-p 00000000 00:00 0
3d25200000-3d25216000 r-xp 00000000 ca:01 262217 /lib64/libnsl-2.12.so
3d25216000-3d25415000 ---p 00016000 ca:01 262217 /lib64/libnsl-2.12.so
3d25415000-3d25416000 r--p 00015000 ca:01 262217 /lib64/libnsl-2.12.so
3d25416000-3d25417000 rw-p 00016000 ca:01 262217 /lib64/libnsl-2.12.so
3d25417000-3d25419000 rw-p 00000000 00:00 0
3d27600000-3d277ba000 r-xp 00000000 ca:01 1058127 /usr/lib64/libcrypto.so.1.0.1e
3d277ba000-3d279b9000 ---p 001ba000 ca:01 1058127 /usr/lib64/libcrypto.so.1.0.1e
3d279b9000-3d279d4000 r--p 001b9000 ca:01 1058127 /usr/lib64/libcrypto.so.1.0.1e
3d279d4000-3d279e0000 rw-p 001d4000 ca:01 1058127 /usr/lib64/libcrypto.so.1.0.1e
3d279e0000-3d279e4000 rw-p 00000000 00:00 0
3d28600000-3d28602000 r-xp 00000000 ca:01 270898 /lib64/libkeyutils.so.1.3
3d28602000-3d28801000 ---p 00002000 ca:01 270898 /lib64/libkeyutils.so.1.3
3d28801000-3d28802000 r--p 00001000 ca:01 270898 /lib64/libkeyutils.so.1.3
3d28802000-3d28803000 rw-p 00002000 ca:01 270898 /lib64/libkeyutils.so.1.3Aborted

@matyhtf
Copy link
Member

matyhtf commented May 3, 2016

PHP5.6 是否会出现同样的问题?

@tiaodeng
Copy link
Author

tiaodeng commented May 3, 2016

刚刚用php5.6测试了下,没有这样的问题。

@tiaodeng
Copy link
Author

tiaodeng commented May 3, 2016

测试环境为 swoole-1.7.22 PHP 5.6.17。
测试没问题。

@matyhtf
Copy link
Member

matyhtf commented May 4, 2016

PHP5.6 + 1.8.4 存在此问题吗?

@matyhtf
Copy link
Member

matyhtf commented May 6, 2016

1.8.5-rc1 已修复websocket crash问题,请升级至此版本。

@matyhtf matyhtf closed this as completed May 6, 2016
@tiaodeng
Copy link
Author

tiaodeng commented May 6, 2016

ok

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

3 participants