1

我正在尝试使用以下代码创建一组 websocket 客户端:

$server = stream_socket_server("tcp://127.0.0.1:8080");

for ($i = 1; $i <= 50; $i++) {
    var_dump($i);
    stream_socket_client("tcp://127.0.0.1:8080");
}

前 35 个左右的连接创建速度非常快。然后一切都变慢了,每一步都需要 1 秒的时间来执行。

你能向我解释为什么会发生这种行为吗?它是由配置参数引起的吗?这是一种常见的 websocket 行为吗?

4

1 回答 1

1

工作假设:挂起的连接会减慢端口的速度

<?php
$server = stream_socket_server("tcp://127.0.0.1:8080");
for ($i = 1; $i <= 50; $i++) {
    var_dump($i);
    stream_socket_client("tcp://127.0.0.1:8080");
    stream_socket_accept($server);
}

补充:

如果监听方是 server.c(修改为不接受连接)。在指定积压完成 27% 后,连接速度变慢。 http://www.linuxhowtos.org/data/6/server.c

<?php
$socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
socket_bind($socket, "127.0.0.1", 8081);
$backlog = 500; // less than /proc/sys/net/core/somaxconn
socket_listen($socket, $backlog); 

for ($i = 1; $i <= 500; $i++) {
    var_dump($i);
    stream_socket_client("tcp://127.0.0.1:8081");
}
于 2015-05-09T21:40:44.343 回答