Skip to content
/ lus Public

Building blazing fast WebSocket application

License

Notifications You must be signed in to change notification settings

hide2/lus

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

6 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

lus - Building blazing fast WebSocket application

Install

Usage

  • echo.lua
local app = require("./lus/websocket").WebSocket:new()

app:listen({port=8001}, function(net)
  p("-- [Server]onListen", net:peeraddress().ip..":"..net:peeraddress().port)
end, function(net, data)
  p("-- [Server]onReceive", data, net:peeraddress().ip..":"..net:peeraddress().port)
  net:send(data)
end, function(net)
  p("-- [Server]onClose")
end)
print("================= Server listen at", "websocket://"..app._ip..":"..app._port)

Run:

luvit echo.lua
  • JavaScript WS Client(require lus/ws.js)
var ws = WS.new();
ws.connect({host:'ws://127.0.0.1:8001',enc:'json'},
function(e) {
  ws.send("hello");
},
function(data) {
  console.log("[onMessage]"+data);
},
function(e) {
  console.log("[onClose]"+e);
},
function(e) {
  console.log("[onError]"+e);
});
  • user.lua(with db)
local db = require("./lus/db").DB:new("sqlite3", "/tmp/test.sqlite3")
local User = require("./lus/db").Model:extend():new(db)
local app = require("./lus/websocket").WebSocket:new()

app:listen({port=8002,enc='json'}, function(net)
  p("-- [Server]onListen", net:peeraddress().ip..":"..net:peeraddress().port)
  net:on('User', function(args)
    print("= [Server]on User", args.id)
    local user = User:find(args.id)
    net:Emit('User', {user=user})
  end)
end, function(net, data)
  p("-- [Server]onReceive", data, net:peeraddress().ip..":"..net:peeraddress().port)
end, function(net)
  p("-- [Server]onClose")
end)
print("================= Server listen at", "websocket://"..app._ip..":"..app._port)
  • JavaScript WS RPC Client(require lus/ws.js)
var ws = WS.new();
ws.connect({host:'ws://127.0.0.1:8002',enc:'json'},
function(e) {
  ws.Emit("User", {id:1});
  ws.on("User", function(data){
    console.log("User", data.user);
  });
},
function(data) {
  console.log("[onMessage]"+data);
},
function(e) {
  console.log("[onClose]"+e);
},
function(e) {
  console.log("[onError]"+e);
});

Benchmark

  • luvit bench_raw.lua

    Requests per second: 50000 #/sec

  • luvit bench.lua

    Requests per second: 26000 #/sec

About

Building blazing fast WebSocket application

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published