首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >hacklang中的异步服务器

hacklang中的异步服务器
EN

Stack Overflow用户
提问于 2016-01-08 18:37:32
回答 1查看 578关注 0票数 0

我试图在hacklang中创建异步服务器。文件名为first.php:

代码语言:javascript
运行
复制
<?hh

namespace MyExperiment;

async function server(string $host, int $port): Awaitable<void> {
    $master = stream_socket_server("tcp://$host:$port");
    stream_set_blocking($master, 0);

    while (true) {
        await stream_await($master, STREAM_AWAIT_READ, 1.0);

        $clientSocket = stream_socket_accept($master);
        stream_set_blocking($clientSocket, 0);

        handleClient($clientSocket);
    }
}

async function handleClient($socket): Awaitable<void> {
    await stream_await($socket, STREAM_AWAIT_READ, 1.0);

    $data = fread($socket, 1024);
    echo $data;

    await stream_await($socket, STREAM_AWAIT_WRITE, 1.0);

    fwrite($socket, 'aaaaaaaa');

    fclose($socket);
}

function run(): void {
    \HH\Asio\join(server('192.168.0.97', 8080));
}

run();

但这行不通。这个代码上的hh_client说:

first.php:16:3,29:这个表达式的类型是Awaitable,但它要么被丢弃,要么在等待之前以危险的方式使用(Typing4015) first.php:20:39,47:这就是为什么我认为它是可接受的

但我不想阻止和等待handleClient。

然后我以这样的方式运行代码: hhvm -d hhvm.hack.lang.auto_typecheck=0 first.php

服务器启动。但是,当我开始从浏览器服务器块向服务器发送请求时,经过很长一段时间很少的请求之后,http://192.168.0.97:8080/将不再接受新的连接。

我做错什么了吗?有可能在hacklang中创建这样的服务器吗?

代码语言:javascript
运行
复制
$ hhvm --version
HipHop VM 3.11.0 (rel)
Compiler: tags/HHVM-3.11.0-0-g3dd564a8cde23e3205a29720d3435c771274085e
Repo schema: 52047bdda550f21c2ec2fcc295e0e6d02407be51
EN

回答 1

Stack Overflow用户

发布于 2016-01-08 20:13:09

但我不想阻止和等待handleClient。

好吧,如果你不await他们,那就不能保证他们会跑!Hack的异步功能允许您以异步方式运行不同的数据获取,但是您需要以某种方式获得结果。在编写这段代码时,HHVM并没有承诺运行多少handleClient。它可能是全部,可能不是,它可能挂起handleClient在它中间的一些随机的await语句。

您在这里到底想做什么还不清楚,但是异步可能不是正确的工具。Hack的异步不是多线程,看起来您可能正试图以这种方式使用它。请继续使用PHP的单请求单线程模型。

我强烈建议您阅读(最近重写的) 异步的正式文档,它解释了它的优点以及如何使用它。

然后我以这样的方式运行代码: hhvm -d hhvm.hack.lang.auto_typecheck=0 first.php

不要关掉打字机--这表明你的代码在开始的时候出了问题。:)

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34683827

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档