php session_start 如何使用流处理器 Pipy 来创建网络代理

php session_start 如何使用流处理器 Pipy 来创建网络代理

上述命令会用提供的脚本启动 Pipy 服务器。敏锐的用户可能已经注意到,我们通过环境变量提供了一个远程 Pipy 脚本的链接php session_start 如何使用流处理器 Pipy 来创建网络代理,而不是一个本地文件,Pipy 足够智能,可以处理这种情况。

下面是

/01-hello/hello.js文件的内容,供参考:

pipy()
.listen(8080)
  .serveHTTP(
    new Message('Hi, there!n')
  )

在这个脚本中,我们定义了一个端口管道,它监听 8080 端口,并为从监听端口收到的每个 HTTP 请求返回“Hi, there!”。

既然我们已经通过上面的 run命令暴露了本地 8080 端口,那么我们可以在同一端口上进行测试了:

$ curl http://localhost:8080

执行上述命令,控制台中应该显示“Hi, there!”。

如果是出于学习、开发或调试的目的,建议在本地安装 Pipy(从源代码构建 Pipy 或针对你的操作系统下载一个预构建版本),因为它提供了 Web 管理控制台以及相关的文档和教程。

安装到本地后,运行pipy,不需要任何参数,就可以在6060端口启动管理控制台,但如果要监听不同的端口,可以通过–admin-port=参数配置。

php session_start

监听 6060 端口的 Pipy 管理控制台

要从源代码构建 Pipy 或针对你的操作系统安装预编译的二进制文件,请参考 库的 .md 文件。

通过 CLI 运行

要启动 Pipy 代理,可以用一个 脚本文件运行 Pipy。例如,如果需要一个简单的回显服务器,针对每个传入的请求都用所接收到的消息体进行响应,那么就用脚本

/01-hello/hello.js:

$ pipy tutorial/01-hel lo/hello.js

另外,在开发和调试时,可以启动带有内置 Web UI 的 Pipy:

$ pipy tutorial/01-hello/hello.js --admin-port=6060

显示命令行选项

$ pipy --help

php session_start

列出内置过滤器及其参数

$ pipy --list-filters
$ pipy --help-filters   

前文从概念和技术上对 Pipy 做了一个简短的介绍,这些内容也是我们实现一个支持缓存和负载均衡的网络代理所需要了解的,这一点我们在下一节会看到。

编写一个网络代理

假设我们正在运行不同服务的单独实例php session_start,我们想要添加一个代理php session_start 如何使用流处理器 Pipy 来创建网络代理,根据请求的 URL 路径将流量转发到相关服务。这样做的好处是,我们只需要提供一个 URL,并在后端扩展我们的服务,而用户不需要分别记住不同服务的 URL。在正常情况下,服务会在不同的节点上运行,每个服务可以有多个实例在运行。假设在这个例子中,我们正在运行下面的服务,我们希望根据 URI 将流量分配给它们。

Pipy 的脚本是用 编写的,你可以用任何文本编辑器来编辑它们。另外,如果你在本地安装了 Pipy,就可以使用 Pipy 提供的 Web 端管理 UI,它提供了语法高亮、自动完成、提示等特性,你甚至可以运行脚本,所有这些都在同一个控制台上。

好了,让我们启动一个 Pipy 实例,不需要任何参数,这样,Pipy 管理控制台将在 6060 端口启动。现在,打开你喜欢的 Web 浏览器,导航到 :6060,就会看到 Pipy 内置的 Web 端管理 UI(如图 1)。

创建一个 Pipy 程序

将代码和配置分开是一种很好的设计实践。Pipy 通过插件(你可以把它想成是 模块)来支持这种模块化设计。也就是说,我们将把配置数据存储在 文件夹下,把编码逻辑存储在 文件夹下不同的文件中。主代理服务器脚本将存储在根目录下,主代理脚本(proxy.js)将包含并组合这些单独的模块所定义的功能。 一旦我们完成了下述步骤,最终的文件夹结构将是下面这个样子:

├── config
│   ├── balancer.json
│   ├── proxy.json
│   └── router.json
├── plugins
│   ├── balancer.js
│   ├── default.js
│   └── router.js
└── proxy.js

让我们开始吧:

点击新建代码库php session_start,在对话框中输入/proxy(或任何你想使用的名称)作为代码库名称,然后点击创建。你将进入到新创建的代码库的代码编辑器。点击上面的“+”按钮,添加一个新文件。输入//proxy.json(这是配置文件,我们将用来配置代理)作为文件名,然后点击创建。现在,你会看到,左侧窗格的文件夹下多了一个proxy.json文件。点击该文件把它打开,并添加如下所示的配置信息,务必点击顶部面板上的磁盘图标来保存文件:

{
  "listen": 8000,
  "plugins": [
    "plugins/router.js",
    "plugins/balancer.js",
    "plugins/default.js"
  ]
}

重复步骤 2 和 3,创建另一个文件//.json,它将存储路由信息,配置数据如下:

{
  "routes": {
    "/hi/*": "service-hi",
    "/echo": "service-echo",
    "/ip/*": "service-tell-ip"
  }
}

重复步骤 2 和 3,创建另一个文件//.json,它将存储服务到目标的映射信息,内容如下:

 {
  "services": {
    "service-hi"      : ["127.0.0.1:8080", "127.0.0.1:8082"],
    "service-echo"    : ["127.0.0.1:8081"],
    "service-tell-ip" : ["127.0.0.1:8082"]
  }
}

现在,我们编写第一个 Pipy 脚本,当我们收到一个没有配置任何目标(端点/url)的请求时,它将被用作默认的后备选项。重复上述步骤,创建文件//.js。使用 作为文件名只是一个习惯做法,并不是 Pipy 的要求,你可以选择任何你喜欢的名字。该脚本将包含如下代码,返回 HTTP 状态代码 404,信息为 No found:

pipy()
.pipeline('request')
  .replaceMessage(
    new Message({ status: 404 }, 'No handler found')
  )

创建//.js文件,存储路由逻辑:

(config =>
pipy({
  _router: new algo.URLRouter(config.routes),
})
.export('router', {
  __serviceID: '',
})
.pipeline('request')
  .handleMessageStart(
    msg => (
      __serviceID = _router.find(
        msg.head.headers.host,
        msg.head.path,
      )
    )
  )
)(JSON.decode(pipy.load('config/router.json')))

创建//.js文件,存储了我们的负载均衡逻辑。顺便说明一下,Pipy 提供了多种负载均衡算法,但简单起见,我们这里将使用 Round Robin 算法。

(config =>
pipy({
  _services: (
    Object.fromEntries(
      Object.entries(config.services).map(
        ([k, v]) => [
          k, new algo.RoundRobinLoadBalancer(v)
        ]
      )
    )
  ),
  _balancer: null,
  _balancerCache: null,
  _target: '',
})
.import({
  __turnDown: 'proxy',
  __serviceID: 'router',
})
.pipeline('session')
  .handleStreamStart(
    () => (
      _balancerCache = new algo.Cache(
        // k is a balancer, v is a target
        (k  ) => k.select(),
        (k,v) => k.deselect(v),
      )
    )
  )
  .handleStreamEnd(
    () => (
      _balancerCache.clear()
    )
  )
.pipeline('request')
  .handleMessageStart(
    () => (
      _balancer = _services[__serviceID],
      _balancer && (_target = _balancerCache.get(_balancer)),
      _target && (__turnDown = true)
    )
  )
  .link(
    'forward', () => Boolean(_target),
    ''
  )
.pipeline('forward')
  .muxHTTP(
    'connection',
    () => _target
  )
.pipeline('connection')
  .connect(
    () => _target
  )
)(JSON.decode(pipy.load('config/balancer.json')))

php session_start

现在,我们来编写入口点或代理服务器脚本,它会使用上述插件。创建一个新的代码库(步骤 1),这个过程会创建一个默认的main.js文件作为入口点。我们可以用它作为我们的主入口点,或者如果你希望换个名字,可以随时删除main.js,然后用你选的名字新建一个文件。让我们删除它并新建一个名为/proxy.js的文件。务必点下顶部的旗标,将其设置为主入口点,这可以确保在你点击运行按钮(右侧的箭头图标)时开始执行脚本:

(config =>
pipy()
.export('proxy', {
  __turnDown: false,
})
.listen(config.listen)
  .use(config.plugins, 'session')
  .demuxHTTP('request')
.pipeline('request')
  .use(
    config.plugins,
    'request',
    'response',
    () => __turnDown
  )
)(JSON.decode(pipy.load('config/proxy.json')))

如果你已经按照上面的步骤进行了操作php session_start,就可以看到类似于以下截图的东西:

php session_start

现在,我们点击播放图标按钮(右起第四个)来运行我们的脚本。如果脚本没有任何错误,我们将看到 Pipy 运行我们的代理脚本,输出类似下面这样:

php session_start

这表明我们的代理服务器正在监听 8000 端口(这是在//proxy.json中配置的)。我们用 curl 来运行一个测试:

$ curl -i http://localhost:8000
HTTP/1.1 404 Not Found
content-length: 10
connection: keep-alive
No handler found

这没问题,因为我们没有为 root 配置任何目标。让我们试下配置过的路由,如/hi:

$ curl -i http://localhost:8000/hi
HTTP/1.1 502 Connection Refused
content-length: 0
connection: keep-alive

我们看到了 502 这个消息,因为我们没有在配置的目标端口上运行服务。

你可以更新//.json,加入你已经运行的服务的主机、端口等细节,以匹配你的实际情况,或者我们在 Pipy 中编写一个脚本,监听我们配置的端口,并返回简单的消息。

将以下代码片段保存到你本地计算机上的一个文件中,命名为mock-proxy.js,并记住文件的存储位置。

pipy()
.listen(8080)
  .serveHTTP(
    new Message('Hi, there!n')
  )
.listen(8081)
  .serveHTTP(
    msg => new Message(msg.body)
  )
.listen(8082)
  .serveHTTP(
    msg => new Message(
      `You are requesting ${msg.head.path} from ${__inbound.remoteAddress}n`
    )
  )

打开一个新的终端窗口,通过 Pipy 运行这个脚本(其中/path/to是存储该脚本文件的位置):

$ pipy /path/to/mock-proxy.js
2022-01-11 18:56:31 [INF] [config]
2022-01-11 18:56:31 [INF] [config] Module /mock-proxy.js
2022-01-11 18:56:31 [INF] [config] ================
2022-01-11 18:56:31 [INF] [config]
2022-01-11 18:56:31 [INF] [config]  [Listen on :::8080]
2022-01-11 18:56:31 [INF] [config]  ----->|
2022-01-11 18:56:31 [INF] [config]        |
2022-01-11 18:56:31 [INF] [config]       serveHTTP
2022-01-11 18:56:31 [INF] [config]        |
2022-01-11 18:56:31 [INF] [config]  |
2022-01-11 18:56:31 [INF] [config]        |
2022-01-11 18:56:31 [INF] [config]       serveHTTP
2022-01-11 18:56:31 [INF] [config]        |
2022-01-11 18:56:31 [INF] [config]  |
2022-01-11 18:56:31 [INF] [config]        |
2022-01-11 18:56:31 [INF] [config]       serveHTTP
2022-01-11 18:56:31 [INF] [config]        |
2022-01-11 18:56:31 [INF] [config]  <-----|
2022-01-11 18:56:31 [INF] [config]  
2022-01-11 18:56:31 [INF] [listener] Listening on port 8080 at ::
2022-01-11 18:56:31 [INF] [listener] Listening on port 8081 at ::
2022-01-11 18:56:31 [INF] [listener] Listening on port 8082 at ::

现在,我们已经模拟了监听 8080、8081 和 8082 端口的服务。让我们在代理服务器上再做一次测试,你会看到,模拟服务返回了正确的响应。

小结

我们使用了 Pipy 的许多特性,包括变量声明、导入/导出变量、插件、管道、子管道、过滤器链、、和link等 Pipy 过滤器,以及JSON、algo.、

algo.er和algo.Cache等 Pipy 类。彻底解释所有这些概念超出了本文的范围,如果你希望了解更多信息,请阅读 Pipy 的文档。你可以通过 Pipy 的 Web 端管理 UI 查看这些文档,并按照入门教程一步步操作。

结语

公告:
1. 本站所有资源来源于用户上传和网络,如有侵权请联系站长!
2. 分享目的仅供大家学习和交流,您必须在下载后24小时内删除!
3. 不得使用于非法商业用途,不得违反国家法律。否则后果自负!
4. 本站提供的源码、模板、插件等等其他资源,都不包含技术服务请大家谅解!
5. 如有链接无法下载、失效或广告,请联系站长处理!
6. 本站不售卖代码,资源标价只是站长收集整理的辛苦费!如果您喜欢该程序,请支持正版软件,购买注册,得到更好的正版服务。
7. 站长QQ号码 2205675299

资源库 - 资源分享下载网 » php session_start 如何使用流处理器 Pipy 来创建网络代理

常见问题FAQ

关于资源售价和售后服务的说明?
本站所有资源的标价均为本站收集资源的辛苦费,不代表资源本身的价值。软件是高智慧高价值的商品,不可能是白菜价。本站资源标价只是赞助费用,收取的赞助费仅用来维持本站的日常运营!毕竟收集整理资料需要投入云计算资源和站长大量的精力。
代码有没有售后服务和技术支持?
由于代码的运行具有不可预见性,本站不保证代码完整可运行,不提供技术支持和售后服务。 本站原创代码都是站长自己开发的,可以有偿提供技术支持服务。 网站里标明【亲测】的代码都是站长亲测过的,其他的代码由于精力有限,没有一一测试,不能保证代码就一定能够使用,更没有技术支持服务,下载前请自行斟酌。
有没有搭建服务?
由于搭建服务比较费时费力,所以本站除了原创代码外均不提供搭建服务。本站分享代码纯属兴趣爱好,不以盈利为目的,请勿咨询有没有搭建服务,谢谢理解。
链接地址失效了怎么办?
请带上资源链接地址联系客服,工作时间内我们看到后将第一时间回复。
关于解压密码
本站资源一般都没有加密,如果发现需要解压密码的,那么就输入 hao.35dc.com 试试。

发表评论

资源库,由老程序员细心甄别、精心筛选,只为提供优质的源码资源

关于我们 联系我们