Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/lua/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Tcp 发送大量数据时出现延迟_Tcp_Lua_Udp_Multiplayer_Love2d - Fatal编程技术网

Tcp 发送大量数据时出现延迟

Tcp 发送大量数据时出现延迟,tcp,lua,udp,multiplayer,love2d,Tcp,Lua,Udp,Multiplayer,Love2d,我建立了一个多人游戏的小游戏,我的问题是当我发送子弹的时候有一个延迟,当它超过大约80 我使用UDP类型,将代码连接到服务器: udp = socket.udp() udp:settimeout(0) udp:setpeername(address, port) udp:send('%S03'..startX..','..startY..','..bulletAngleX..','..bulletAngleY) My udp:将项目符号发送到服务器: udp = socket.udp() u

我建立了一个多人游戏的小游戏,我的问题是当我发送子弹的时候有一个延迟,当它超过大约80

我使用UDP类型,将代码连接到服务器:

udp = socket.udp()
udp:settimeout(0)
udp:setpeername(address, port)
udp:send('%S03'..startX..','..startY..','..bulletAngleX..','..bulletAngleY)
My udp:将项目符号发送到服务器:

udp = socket.udp()
udp:settimeout(0)
udp:setpeername(address, port)
udp:send('%S03'..startX..','..startY..','..bulletAngleX..','..bulletAngleY)
服务器:检索项目符号并将其发送回其余客户端:

    elseif code == '%S03' then

        local bulleta = string.gmatch(params, "[^,]+")

        local sX = tonumber(bulleta())
        local sY = tonumber(bulleta())
        local dX = tonumber(bulleta())
        local dY = tonumber(bulleta())


        for i,v in ipairs(clients) do
            udp:sendto('%C01'..math.random(120, 200)..','..sX..','..sY..','..dX..','..dY, v['ip'], tonumber(v['port']))
        end
    end
客户端:获取项目符号数据并在表中创建它们:

        elseif code == '%C01' then
        local xy = string.gmatch(re, "[^,]+")
        local dis = tonumber(xy())
        local xStart = tonumber(xy())
        local yStart = tonumber(xy())
        local xAngle = tonumber(xy())
        local yAngle = tonumber(xy())
        table.insert(bullets, {distance = dis, sX = xStart, sY = yStart, x = xStart, y = yStart, dx = xAngle, dy = yAngle})
客户端在获取项目符号x、y时更新项目符号的x和y坐标,在距离第一个位置超过300像素时删除项目符号


但我的问题是,在拍摄时仍然存在延迟。

我对网络细节不太熟悉,但很可能您只是发送了太多的数据包,需要捆绑或压缩发送的数据以减少发送的UDP消息的总数

来自(也使用UDP):

如果您需要,很容易使网络连接完全饱和 我们对发送(或请求)的数据包不小心,所以我们会规避风险 通过限制我们发送(和请求)更新的频率

(根据记录,每秒十次被认为对大多数正常人是有益的 游戏(包括许多MMO),你不应该真的需要更多 即使是快节奏的游戏,每秒更新也超过30次。)

我们可以发送每个小动作的更新,但我们会整合 最后一次更新的价值在这里变成了一个单一的数据包,大大减少了我们的 带宽使用

如果没有看到您的全部/更多代码,我无法确认这是否是问题所在。但是,每秒多次将每个项目符号的数据分别发送到每个客户端,带宽使用率可能会变得非常高,最明显的是将每个项目符号的数据分别发送到

我将首先尝试将每个项目符号的数据捆绑在一起,然后再将捆绑的数据发送到每个客户机,这将大大减少发送的单个数据包的数量。另外,如果您没有,请确保您没有在love.update中发送数据包,这是一个非常非常常见的调用。相反,在网络上创建一个单独的更新函数,并使用定时器大约每100ms调用一次

如果代码中已经考虑到了这些问题,请告诉我,或者向我们展示您的网络代码的更大上下文