查看“LlRequestURL”的源代码
←
LlRequestURL
跳转至:
导航
、
搜索
因为以下原因,您没有权限编辑本页:
您所请求的操作仅限于该用户组的用户使用:
用户
您可以查看与复制此页面的源代码。
{{LSL Header|ml=*}}{{LSLC|Keywords}}{{LSLC|Flow Control}}{{LSLC|}} {{函数详情 |函数名 = Function:key llRequestURL( ); |参数= 参数: |返回值= 返回值:请求此脚本使用一个HTTP:// url。[[http_request event]]由请求的结果触发。 返回a handle (a key) ,用于识别[[http_request event]]中的请求结果。 |注意事项= http -in不在通常的http端口号上;它在http_request事件中提供的url包含正确的端口号。 你的脚本(和任何使用它的客户端)不应该“验证”提供的URL;特别地,不要假设它映射到任何特定的地址,或者在任何特定的域中。在“第二人生”进入云计算的过程中,这些将会发生变化,在“第二人生”进入云计算之后,这些变化可能会更加动态。 这个函数的使用是被限制的。虽然它没有强制休眠时间,但是在短时间内如果有太多的请求(5个左右),将会导致所有进一步的请求被拒绝,直到脚本停止url请求至少1秒。在每个请求之间使用0.6秒或更长的[[llSleep]]将防止您被throttled。 当(重新)启动一个区域时,所有 HTTP server URLs都会自动释放并失效。 使用[[CHANGED_REGION_START]]检测,这样就可以请求新的URL。 可用url的数量是有限的资源,也就是说,脚本只能有这么多开放的url。 当放弃一个URL时,用[[llReleaseURL]]释放它,以避免泄漏。重新设置脚本或删除prim也足以释放url。 与[[listeners]]不同,url的持久性跨越状态更改 |示例= 在[[HTTP Server URL Registration]] 中可以找到一个完整的示例,该示例展示了如何获取URL、向外部客户端注册该URL,并进行适当的回退和重试以联系外部服务。 该脚本在区域重启后请求一个新URL。 请参阅讨论页面,以了解为什么这个特定的脚本不需要使用llReleaseURL()。 <pre> string url; key urlRequestId; default { state_entry() { urlRequestId = llRequestURL(); } on_rez(integer start_param) { llResetScript(); } changed(integer change) { if (change & (CHANGED_OWNER | CHANGED_INVENTORY)) llResetScript(); if (change & (CHANGED_REGION | CHANGED_REGION_START | CHANGED_TELEPORT)) urlRequestId = llRequestURL(); } http_request(key id, string method, string body) { if (id == urlRequestId) { if (method == URL_REQUEST_DENIED) llOwnerSay("The following error occurred while attempting to get a free URL for this device:\n \n" + body); else if (method == URL_REQUEST_GRANTED) { url = body; llLoadURL(llGetOwner(), "Click to visit my URL!", url); } } } } </pre> 重要的是要记住,如果您请求另一个URL,旧的URL将不会被释放,它将保持活动状态。下面的脚本说明了这一点。 如果您可以在您的土地上使用所有url,请尝试以下代码。删除prim/脚本将释放之前分配的所有url。 <pre> //警告: // //此脚本仅用于概念验证(演示目的)。 //不要使用它,如果你没有sim卡所有者和/或 //地产管理器可以测试此脚本。 //这个脚本可能会阻止来自sim和与sim之间的HTTP通信。 / /……关闭所有联网的供应商和/或类似的机器。 // //此脚本分配所有可用的url。 //删除脚本和/或取消包含脚本的对象, //将释放所有以前获取的url。 default { state_entry() { llRequestURL(); } http_request(key id, string method, string body) { if (method == URL_REQUEST_DENIED) llSetText("No free URLs!", <1.0, 0.0, 0.0>, 1.0); else if (method == URL_REQUEST_GRANTED) { llSetText( (string)llGetFreeURLs() + " URLs left\n" + body, <1.0, 1.0, 1.0>, 1.0); llRequestURL(); } else if (method == "GET") llHTTPResponse(id, 200, "Hello there!"); } } 如您所见,此脚本将使用您土地上所有可用的url,因为它在请求新url之前不会删除旧url。 只需将旧URL存储在一个全局变量中,然后用[[llReleaseURL]]释放它。 </pre> |相关函数= [[llRequestSecureURL]] [[llGetFreeURLs]] [[llReleaseURL]] [[llHTTPResponse]] [[llGetHTTPHeader]] }}
该页面使用的模板:
模板:LSL Header
(
查看源代码
)
模板:LSLC
(
查看源代码
)
模板:LSLGC
(
查看源代码
)
模板:Multi-lang
(
查看源代码
)
模板:函数详情
(
查看源代码
)
返回至
LlRequestURL
。
导航菜单
个人工具
登录
名字空间
页面
讨论
变种
视图
阅读
查看源代码
查看历史
更多
搜索
导航
网站首页
知识百科
编辑帮助
最近更改
工具
链入页面
相关更改
特殊页面
页面信息