Skip to content

Oooocean/chuck

 
 

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

#chuck

  • first, Chuck is my son's name.

  • second, Chuck is a high perference,asynchronous and easily use C/Lua network library under Linux/Freebsd.

#build

download and make lua 5.3

static library for c:

make libchuck

dynamic library for lua:

make chuck.so
make packet.so

#examples

##echo.lua

local chuck = require("chuck")
local socket = chuck.socket

local event_loop = chuck.event_loop.New()

local server = socket.stream.ip4.listen(event_loop,"127.0.0.1",8010,function (fd)
	local conn = socket.stream.New(fd,4096)
	if conn then
		conn:Bind(event_loop,function (data)
			if data then 
				print(data:Content())
				local response = data:Clone()
				response:AppendStr("hello world\r\n")
				conn:Send(response)
			else
				print("client disconnected") 
				conn:Close() 
			end
		end)
	end
end)

if server then
	event_loop:Run()
end

##broadcast_svr.lua

local chuck = require("chuck")
local socket = chuck.socket
local packet = require("packet")

local event_loop = chuck.event_loop.New()

local clients = {}
local client_count = 0
local packet_count = 0

local server = socket.stream.ip4.listen(event_loop,"127.0.0.1",8010,function (fd)
	local conn = socket.stream.New(fd,65536,packet.Decoder())
	if conn then
		clients[fd] = conn
		client_count = client_count + 1
		conn:Bind(event_loop,function (data)
			if data then 
				for k,v in pairs(clients) do
					packet_count = packet_count + 1
					v:Send(data)
				end
			else
				client_count = client_count - 1
				print("client disconnected") 
				conn:Close()
				clients[fd] = nil 
			end
		end)
	end
end)

local timer1 = event_loop:RegTimer(1000,function ()
	collectgarbage("collect")
	print(client_count,packet_count)
	packet_count = 0
end)

if server then
	event_loop:Run()
end

##broadcast_cli.lua

local chuck = require("chuck")
local socket = chuck.socket
local packet = require("packet")

local event_loop = chuck.event_loop.New()

local connections = {}
local packet_count = 0

for i=1,500 do
	socket.stream.ip4.dail(event_loop,"127.0.0.1",8010,function (fd)
		local conn = socket.stream.New(fd,65536,packet.Decoder())
		if conn then
		connections[fd] = conn
		conn:Bind(event_loop,function (data)
				if data then 
					packet_count = packet_count + 1
				else
					print("client disconnected") 
					conn:Close()
					connections[fd] = nil 
				end
			end)
		end
	end)
end

local timer1 = event_loop:RegTimer(1000,function ()
	print(packet_count)
	collectgarbage("collect")
	packet_count = 0
end)

local timer2 = event_loop:RegTimer(300,function ()
	for k,v in pairs(connections) do
		local buff = chuck.buffer.New()
		local w = packet.Writer(buff)
		w:WriteStr("hello")
		v:Send(buff)
	end
end)

event_loop:Run()

#customer

About

high performance and easily use asynchronous network library for C/Lua

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages

  • C 70.9%
  • HTML 10.4%
  • Lua 7.3%
  • Shell 5.5%
  • Perl 2.7%
  • Makefile 1.9%
  • Other 1.3%