一个LaaSocket服务器如何能同时处理几个请求?
问题是我的LUA服务器无法同时接受多个请求. 我试图在Coroutine上处理每个客户端消息,但这似乎失败了. while true do local client = server:accept() coroutine.resume(coroutine.create( function() GiveMessage( client ) end ) ) end 此代码似乎实际上并未同时接受一个客户端消息.这种方法怎么了?谢谢您的帮助. 解决方案 您将无法仅与Coroutines创建真正的同时处理 - Coroutines适用于 Coomerative 多任务.同时只执行一个Coroutine. 您所写的代码与直接在循环中调用GiveMessage()没有什么不同.您需要编写一个Coroutine调度员,并找到明智的理由以GiveMessage()的方式屈服. 根据您的任务的细节至少有三种解决方案: 产生服务器的几个叉子,在每个叉子中处理Coroutine
8 2023-04-21
编程技术问答社区
SHOUTcast获取请求被拒绝,每次都是404
代码 function radiotest(host,port) local rstr="Online" local sock, err = socket.tcp() if not sock then return "Failed" end sock:settimeout(1) local res, err = sock:connect(host, port) if not res then return "offline" else sock:settimeout(1) sock:send("GET /index.html HTTP/1.0\r\n UserAgent: SHOUTcast Song Status \r\n Accept: */*\r\n\r\n") sock:settimeout(3) local dat
4 2023-03-15
编程技术问答社区
luasocket插座/core.dll所需的位置?
当我使用 时 local socket = require("socket.core") 它可以正常工作,dll位于" dir/socket/core.dll",但是当我将DLL移动 时 " dir/folder/core.dll"并使用 local socket = require("folder.core.") 它返回发现它被发现,但是找不到文件夹中的特定模块. 如何在其插座之外使用luasocket.core要求? 谢谢! 解决方案 如果要require("socket.core"),共享库(DLL)必须具有称为luaopen_socket_core的导出函数(Luasocket库具有).因此,它总是需要称为require("socket.core"). 如果要将DLL移至其他一些文件夹中,则必须修改 package.cpath ,其中包含将检查的文件模式. 假设您想将Luasocket二进制移至folder.您必须将二进制放在
50 2023-03-15
编程技术问答社区
我如何使用socket.select?
我需要使用套接字"选择"函数的帮助. 我的服务器代码是这样的: while true do for _,server in pairs(servers) do local client = server:accept() client:settimeout(5) local line, err = client:receive() if not err then client:send(line .. "_SERVER_SIDE\n") else client:Send("___ERRORPC"..err) end client:close() end end ,但是现在我想使用选择功能而不是像这样永远的循环. 阅读以下内容: http://w3.impa.br/~diegr/~dieg
4 2023-03-15
编程技术问答社区
在Luasocket中,在哪些情况下,即使select告诉它可以安全读取,accept调用也会被阻塞?
luasocket 另一个重要说明:在接收参数中使用服务器套接字的呼叫选择在接收到接受之前,请不保证接受会立即返回.使用settimeout方法或接受可能永远阻止. 在什么情况下可以接受 block,即使Select告诉它安全阅读是安全的?有没有办法强迫此问题发生,以进行测试? 解决方案 这是从已故W.Richard Stevens'Unix Network编程的第三版第16.6节(Nonblocking accept)节总结,第461-463页. UNP可能仍然是编写网络代码的最佳可用教科书. 尽管您可能会认为accept在select之后无法阻止select表示侦听套接字已经准备就绪,但史蒂文斯(Stevens)描述了某些网络堆栈实现中的竞赛条件,这可能会导致accept无限期地阻止. (脚注将描述归因于" a.gierth").该问题是通过回声客户端描述的,该客户端以: 连接到服务器; 在连接的套接字上设置SO_LINGER套接字选项; 立即
8 2023-03-15
编程技术问答社区
我怎样才能在Lua内部嵌入socket,就像oslib、debuglib一样?
我想实现该功能,就像嵌入LUA构建中的套接字功能一样. 因此,我不需要再复制socket.core.dll(只是为了娱乐). 我搜索莫利斯特,看到一些人讨论这个话题, 但我对细节步骤有疑问,谁可以为我提供更改LUA和Luasocket代码以使它们一起工作的详细步骤(而不是使用DLL方法). 我在Windows XP中使用VC2008尝试了这些步骤: 1)将luasocket代码复制到lua项目. 2)添加一些代码 static const luaL_Reg lualibs[] = { {"", luaopen_base}, {LUA_LOADLIBNAME, luaopen_package}, {LUA_TABLIBNAME, luaopen_table}, {LUA_IOLIBNAME, luaopen_io}, {LUA_OSLIBNAME, luaopen_os}, {LUA_STRLIBNAME, luaopen_string
2 2023-03-15
编程技术问答社区
将lua发送到网站
我在lua遇到麻烦. 我需要通过获取并从网站获得响应来发送请求. atm我所拥有的只是: local LuaSocket = require("socket") client = LuaSocket.connect("example.com", 80) client:send("GET /login.php?login=admin&pass=admin HTTP/1.0\r\n\r\n") while true do s, status, partial = client:receive('*a') print(s or partial) if status == "closed" then break end end client:close() 我该怎么做才能从服务器获得响应? 我想将一些信息发送到本网站并获得页面的结果. 有什么想法? 解决方案 我解决了通过标头 的问题 local LuaSocket = r
14 2023-03-15
编程技术问答社区
如何在Lua中下载一个文件,但在工作中写入一个本地文件
我正在尝试进行更新,因此当我的LUA应用程序过时时,它将使用 luasocket 下载新的.exe文件(可以运行我的LUA代码). 在此更新程序中,我希望它显示到目前为止下载了多少.但是,通过以下HTTP请求,它会阻止应用程序直到完全下载: local b, c, h = http.request("https://www.example.com/Download/Example.exe?from="..Game.Version) 我正在使用线程下载它,但是在线程内部下载之前,我仍然无法写入文件,因此进度栏将达到0%,100%,而没有任何内容. 我有什么可以下载远程文件的方法,但是将其保存到下载时将其保存到本地文件? 卷曲可以做到这一点.我不知道Luasocket还是其他任何东西可以. :( 解决方案 您是对的 - 卷发可以做到. Luasocket没有此功能.您可以创建一个LTN12接收器,该水槽将报告取得的进度,但是直到您完全下载它,您才知道文件的总尺
2 2023-03-15
编程技术问答社区
LuaSocket、Lua 5.2和Redis
有人能够将这些合作吗?我的工作效果很好,它可以找到Lua-redis(redis.lua),但是它失败了加载套接字模块,我似乎无法与Lua一起使用(Luasocket版本2.0.2).有人有任何提示可以使此工作吗? 我已经尝试制作Luasocket,但是它完全失败了,我认为这是由于我的LUA版本5.2. 答案只是为了恢复LUA 5.1,还是我不知道的另一个修复程序? 解决方案 由于许多LUA库,Luasocket的当前版本不支持LUA 5.2.对于LUA的第二位数字变化,该版本表示主要版本,并且不保持向后兼容性(在某些情况下通过编译标志以重新启用弃用的功能除外). . lua 5.1是稳定的,除非您需要在5.2中添加的功能. 也就是说,许多图书馆目前正在更新为5.2兼容,包括Luasocket.如果您已经确定并乐于从源和调整零件调整,请尝试这个存储库 5.2兼容Luasocket的版本. 请注意,LUA 5.2必须是使用此版本的Luasocket定义的
4 2023-03-15
编程技术问答社区
如何在luasocket库中检查一个套接字是否关闭?
我正在使用LUA编程语言编写服务器,并且网络层基于 luasocket a>. ,我找不到任何检测套接字的方法是否在其参考手册中关闭或不关闭,只是尝试从中读取数据(它将在调用该数据时返回nil和字符串"关闭"). 我的代码看起来像这样: local socket = require 'socket' local server = socket.tcp() local port = 9527 server:bind('*', port) local status, errorMessage = server:listen() if status == 1 then printf('Server is launched successfully on port %u', port) else printf('Server listen failed, error message is %s', errorMessage) return end l
10 2023-03-15
编程技术问答社区
lua http套接字超时
luasocket HTTP模块文档说可以在HTTP连接上设置超时: 可以设置以下常数以控制HTTP模块的默认行为: 端口:用于连接的默认端口; 代理:用于连接的默认代理; 超时:为所有I/O操作设置超时; Useragent:默认用户代理报告给服务器. http://w3.impa.br/~diegr/~diegr/~diego/software/luasoctware/luasocket/httpp .htm 如何在LUA脚本中设置这些常数? 解决方案 您可以这样做以设置一个请求的超时,而不是整个HTTP模块: local socket = require "socket" local http = require "socket.http" response = http.request{url=URL, create=function() local req_sock = socket.tcp() req_sock:settimeout(5
6 2023-03-15
编程技术问答社区
安装Lua套接字库
我要么被超越或盲目.我想学习与LUA的网络,因此我必须安装socket lib,因此我可以轻松地需要它,但是我不知道,我应该"需要"哪些文件.示例说: local socket = require("socket") ,但是正如我所说,我不知道我应该包含哪些文件,如果我使用socket.lua它不起作用,并且得到:No files found. 我从这里获得了lib: lua socket下载 或,是否有另一种安装插座lib的方法? 解决方案 当您加载require lua的模块时,请使用软件包路径来确定在哪里寻找模块.看看模块 LUA手册的部分.具体而言,package.path和package.cpath的部分. package.path:需要搜索LUA加载器(.lua模块)的路径 package.cpath:需要搜索C加载器(.so/.dll模块) 的路径 您可以检查当前路径是什么: print(package.path..'\n'.
0 2023-03-15
编程技术问答社区
在Windows上通过Luarocks安装的socket.core文件需要luasocket的错误
系统配置: OS: Windows 7 x64 lua -v Lua 5.1.4 luarocks -v 2.2.0beta1 luarocks list luasocket 3.0rc1-1 (installed) - C:/Program Files (x86)/LuaRocks/systree/lib/luarocks/rocks luarocks show luasocket LuaSocket 3.0rc1-1 - Network support for the Lua language LuaSocket is a Lua extension library that is composed by two parts: a C core that provides support for the TCP and UDP transport layers, and a set of Lua modules tha
10 2023-03-15
编程技术问答社区
Luasocket定制的标题,404变成了301
我以前的问题是关于使用socket.http模块在 lua 中获取页面标题.问题在这里.以前,YouTube页面使我进入了 404错误页面.基于 mattj的帮助,我为请求提供了自定义HOST标题.这就是我所做的,结果是什么: 代码 header = { host= "youtube.com" } local result,b,c,h = http.request{ url = "http://www.youtube.com/watch?v=_eT40eV7OiI", headers = header } print ( result, b, c, h ) for k,v in pairs(c) do print(k,v) end 结果 1 301 table: 0047D430 HTTP/1.1 301 Moved Permanently x-content-type-options nosniff content-length 0 expires Tue
2 2023-03-15
编程技术问答社区
Lua 5.2添加luasocket(不稳定)。
我试图将Luasocket与Lua 5.2一起使用.我下载了GIT存储库的代码并构建了代码.然后进行制作安装,以便生成core.dll和mime.dll.将它们放入自定义LUA程序目录[CPATH] IM开发并尝试加载它.但是我会得到以下错误消息: Failed at error loading module 'socket.core' from file 'D:\[..myprogram..]\socket\core.dll': Module was not found. 如何检查DLL是否正确.还是我做错了什么? 谢谢 解决方案 您的可执行文件是否与LUA文件相同的目录? 尝试将DLL放入可执行文件的目录中. 其他解决方案 很可能是为LUA 5.1而不是LUA 5.2编译的插座模块(或者至少在这样的情况下我遇到的错误).路径中某个地方的LUA 5.1是否有可能有插座模块?它可能带有Luaforwindows或其他软件包.您可以尝试删除/移动所编译的插座
4 2023-03-15
编程技术问答社区
LuaSocket(UDP)没有收到数据包
我正在尝试Luasocket进行正在从事的项目.我选择了UDP作为我的协议. 在线寻找文档和教程,我试图创建一个客户服务器对进行测试和学习. 根据我阅读的内容,以下代码应起作用.但是,只有服务器似乎正常工作.客户端发送消息,但不会从服务器中收到回复. 感谢您提供的任何帮助. 服务器: -- Server #!/usr/bin/env lua5.1 local socket = require("socket") udp = socket.udp() udp:setsockname("*", 53474) udp:settimeout(0) while true do data, ip, port = udp:receivefrom() if data then print("Received: ", data, ip, port) udp:sendto(data, ip, port) end
24 2023-03-15
编程技术问答社区
在lua中下载url文件
lua初学者. :) 我试图通过URL加载文件,不知何故我太愚蠢了,无法在此处获取所有代码样本,以便为我工作. "如何在lua中下载文件,但在工作时写入本地文件 在在Lua中给定路径的URL socket = require("socket") http = require("socket.http") ltn12 = require("ltn12") local file = ltn12.sink.file(io.open('test.jpg', 'w')) http.request { url = 'http://pbs.twimg.com/media/CCROQ8vUEAEgFke.jpg', sink = file, } 我的程序运行20-30秒,之后没有保存什么.有一个创建的test.jpg,但它是空的. 我还尝试将W+B添加到io.open()第二个参数,但不起作用. 解决方案 以下工作: -- retrieve the
4 2023-03-15
编程技术问答社区
LuaSocket server:accept() 超时(TCP)
问题 以下LuaSocket 简介我设法获得了服务器跑步.我还设法从客户端连接.但是,我注意到服务器脚本冻结,直到server:accept()获得连接. 研究 LuaSocket 参考指定: 使用settimeout方法或接受可能会阻止,直到出现另一个客户端. 这甚至包含在示例代码中.但是,client:settimeout(10)是在local client = server:accept()之后调用的,因此脚本在达到这一点之前被阻止. 我读到这可以通过多线程处理,但这似乎是夸张的. 问题 您如何导致服务器脚本停止等待连接并继续? 我如何从client:receive()(服务器端)和tcp:receive()(客户端)(或client:settimeout(10)照顾的)的类似问题中进行保护? 代码 server(LuaSocket presenct ) -- load namespace local socket
4 2023-03-15
编程技术问答社区
LuaLanes和LaaSockets
我正在使用使用插座与外界通信的Lua Lua应用程序(在Windows的Lua下)工作. (luasocket) 我正在尝试并行提出几个请求.所以我认为lualanes是必经之路. (当然,如果有更好的解决方案,我很开放替代方案,但不想为此处理Coroutines.) 类似的东西: server = assert (socket.bind ('*', 1234)) client = server : accept () -- set id to some unique value allClients [id] = client theLane = lanes.gen ("", laneTest) ( id ) print (theLane [1]) laneTest函数的定义如下: function laneTest (id) local client = allClients [id] print ('peer: ', client:get
4 2023-03-15
编程技术问答社区
如何将Lua 5.2与luasocket 3一起使用
我试图编译 luasocket 3 我在Github上找到了 lua 5.2 .问题是,我不确定如何用luasocket绑定Lua.我需要将luasocket汇编为dll,然后在lua代码中的某个地方引用,还是应该从lua console调用它? 解决方案 尝试使用 luarocks 进行安装.如果您没有Luarocks,请在网站上按照说明进行安装. 然后从Luasocket Repo下载RockSpec文件(Luasocket-SCM-0.RockSpec)和Run $ luarocks install *path to the rockspec file* 如果一切顺利,您将能够从Lua使用Luasocket: local socket = require "socket" -- now you can use socket.xxx functions 其他解决方案 通常,您只需要引用lua包含文件(只需要4个:luaconf.h,lua.h,lu
8 2023-03-15
编程技术问答社区