[ARCHIVED] Warp - very fast & powerful networking library

Upcoming update in 1.0.5:

  • Cached incoming packets data for undefined events (aka event is not created yet on client), Once the client-side defined the event, that cached packets will processed as pre-process, This internal-feature for preventing potential packet-loss.

ok, Also what else is coming out in 1.0.5 ?

also tbh the update is really helpful since i can just send gameid stuff and game id mof info and chat stuff and more on one single event with arrays. Also are you working on bindable support for the warps next update?

Warp | 1.0.5


  • New: Cache Incoming packet for undefined event (created but not connected/binded) (Internal Feature)
  • New: Signal

Full Changelogs - v1.0.5
Get .RBXM from github
With Wally
Get Module (Roblox Creator)


finally, i can rest now.

I see you added signal arrays what does that do? it looks to be similar to bindable event

do i have to repeat it again?

This text will be blurred

How do networking libraries like these work? How is sending blank remotes with networking libraries faster than sending them with normal RemoteEvents?

got an error when trying to fire the player thing and a message: ReplicatedStorage.Warp.Index.Server.ServerProcess:90: table index is nil - Server - ServerProcess:90

heres code:

local thing = script.Parent
local warp = require(game.ReplicatedStorage.Warp)
local send = warp.Server('orangesend')
thing.MouseButton1Click:Connect(function(player)
	send:Fire(true,player,'orange')
end)

firing from the server script.

making a thing where u can color the keyboard to your liking.

just trying to make my game as clean so i dont get confused.

:skull: you firing from server and ur doing .MouseButton1Click with player parameter which is not exist.

1 Like

gotta love the builders man

This text will be blurred

what’s the easiest way to migrate regular remotes/events to this? or is the best way just to go through every script that has a remote and change the lines

u can keep the remote event instances and open find & replace all menu then write :FireServer( and on replace box :Fire(true, then replace all, this will replace all method for FireServer on every scripts (specially for client like localscript), for server you can do :FireClient( to :Fire(true, and :FireAllClients( to :Fires(true, .

and for batching remote events to warp you can do:

-- ex:
-- local Remote1 = ReplicatedStorage:WaitForChild('"RemoteEvent")
local Remote1 = Warp.Server("Remote1")
local Remote2 = Warp.Server("Remote1
2")
local Remote3 = Warp.Server("Remote3", {
maxEntrance: 10,
interval: 0.75,
})
-- or
local Events = Warp.fromServerArray({

"Remote1",
"Remote2",
["Remote3"] = {
maxEntrance: 10,
interval: 0.75,
},-- if you like to set a rate limit for this event (remote3)

}) -- for multiple events (shorten, easiest & faster)

-- usage
Remote1:Fires(true, "hello") -- use reliable event
Remote2:Fires(false, "sup") -- use unreliable event

Events.Remote1:Fires(true, "hello") -- use reliable event
Events.Remote2:Fires(false, "sup") -- use unreliable event

do i even looks rude? just because the emoji?

I’ve personally forked this and made this change but I suggest moving the reliable boolean to the .new method of server/client. its redundant specifying if a remote should be reliable or not on each fire. i think the value of network modules come from less boiler plate code.

but its not flexible like you have to create another event for reliable and unreliable.

How is this 9 times faster than remote events? Don’t they have to use remote events internally??

2 Likes

(server receive, client → server)

client:

that benchmark you see is bulk benchmark not single.

conclusion:
regular might faster for single sent but not for multiples. migrating from regular to warp (or other library that kind like this) will receive/gain a huge improvements for big / heavy game task scale.

hope you understand.

1 Like

May I get the benchmark code? thank you!

its just lil simple code like using os.clock with optimized usage.

Appreciating your work on Warp, but I noticed a hiccup with the custom Assert function. It seems the string formatting in the error message will run every time, regardless of the assertion’s outcome. This is essentially the same as the built-in assert.

Consider tweaking your Assert to only format the error message when necessary (string formatting is costly):

lua

return function(condition: any, errorFunc: () -> string): ()
    if not condition then
        error(errorFunc(), 2)
    end
end

Use it like this to avoid premature string formatting:

lua

Assert(typeof(Identifier) == "string", function()
    return `[Warp]: Identifier must be a string type, got {typeof(Identifier)}`
end)

This should help in truly enhancing assert performance. For a deeper dive on optimizing assert, check out a post I’ve written years ago: Be Careful When Using Assert and Why. Might give more valuable insights.

Keep up the good work with Warp!

Is there any way to differentiate OnServerInvoke and Connect? so it can be used by just one ‘identifier’ like BridgeNet2?