由于项目要换成全Lua的,所以趁这个机会研究了下LuaSocket和Lua Loop
Lua Loop: http://loop.luaforge.net/
LuaSocket: http://www.tecgraf.puc-rio.br/~diego/professional/luasocket/
感觉用这个写个简单的聊天服务器,或者写个文字Mud的网络小游戏挺方便的,而且上手容易,适合一些策划做些自己想法的东西。Lua Loop我就不做介绍了,上面网站例子有很多。下面两段便是用Lua写的个服务器和客户端的示例代码:
运行很简单,只要将LuaSocket放在下面代码说在的路径,然后用lua5.0运行。
1 -- server端Lua代码
2
3 socket = require("socket");
4 host = host or "localhost";
5 port = port or "8383";
6 server = assert(socket.bind(host, port, 1000))
7 server:settimeout( 0 )
8
9 local client = {}
10 print("server: waiting for client connection")
11 local clientcount = 0
12 while 1 do
13 control = server:accept()
14
15 if control ~= nil then
16 client[control] = control
17 clientcount = clientcount + 1
18 print( "有新客户端连入链接总数为:" .. clientcount .. "\n" )
19 end
20
21
22 for user in pairs( client ) do
23 command = user:receive();
24 if command ~= nil then
25 print( command )
26 end
27 end
28
29 end
1 -- Client端Lua代码
2 local MaxLink = 220
3 local socket = require("socket")
4 local c = {}
5
6 host = host or "localhost"
7 port = port or 8383
8 if arg then
9 host = arg[1] or host
10 port = arg[2] or port
11 end
12 print("Attempting connection to host '" ..host.. "' and port " ..port.. "")
13 for i = 1, MaxLink do
14 c[i] = assert(socket.connect(host, port))
15 c[i]:settimeout( 0 )
16 end
17
18 print("Connected! Please type stuff (empty line to stop):")
19 l = io.read()
20 for i = 1, MaxLink do
21 assert( c[i]:send(l .. "\n") )
22 assert( c[i]:send("test" .. i .. "\n") )
23 print( "test" .. i .. "\n" )
24 end
25
26 while 1 do
27 for i = 1, MaxLink do
28 command = c[i]:receive()
29 if command ~= nil then
30 print(command)
31 end
32 end
33 end
34