• skynet源码分析:http


    skynet中有http server和http client的代码,用来支持http访问。在分析http之前,要先看一下url库。文件位于skyet/lualib/http/url.lua。

    skynet 从 v0.5.0 开始提供了简单的 http 服务器的支持。skynet.httpd 是一个独立于 skynet 的,用于 http 协议解析的库,它本身依赖 socket api 的注入。使用它,你需要把读写 socket 的 API 封装好,注入到里面就可以工作。

    skynet.sockethelper 模块将 skynet 的 Socket API 封装成 skynet.httpd 可以接受的形式:阻塞读写指定的字节数、网络错误以异常形式抛出。

    httpc


    skynet 提供了一个非常简单的 http 客户端模块。你可以用:

    httpc.request(method, host, uri, recvheader, header, content)

    来提交一个 http 请求,其中

    • method 是 "GET" "POST" 等。
    • host 为目标机的地址
    • uri 为请求的 URI
    • recvheader 可以是 nil 或一张空表,用于接收回应的 http 协议头。
    • header 是自定义的 http 请求头。注:如果 header 中没有给出 host ,那么将用前面的 host 参数自动补上。
    • content 为请求的内容。

    它返回状态码和内容。如果网络出错,则抛出 error 。

    httpc.dns(server, port)

    可以用来设置一个异步查询 dns 的服务器地址。如果你不给出地址,那么将从 /etc/resolv.conf查找地址。如果你没有调用它设置异步 dns 查询,那么 skynet 将在网络底层做同步查询。这很有可能阻塞住整个 skynet 的网络消息处理(不仅仅阻塞单个 skynet 服务)。

    另外,httpc 还提供了简单的 httpc.get 以及 httpc.post 的封装,具体可以参考源代码。

    如果有https的需求,可使用 lua-webclient 它是libcurl multi interface的简单封装,支持单线程,非阻塞的大量http、https请求。

    httpc 可以通过设置 httpc.timeout 的值来控制超时时间。时间单位为 1/100 秒。

    https://github.com/cloudwu/skynet/wiki/Http

  • 相关阅读:
    原来生成函数这么简单
    p1919 A*B Problem升级版
    线性基初步
    高斯消元详解
    FFT模板
    BSGS(大小步)算法
    p1516&poj1061&bzoj1477 青蛙的约会
    p1082 同余方程
    qboimathtest1 t1 魔法串
    qboimathtest1 t2 配对
  • 原文地址:https://www.cnblogs.com/losophy/p/9203551.html
Copyright © 2020-2023  润新知