日本综合一区二区|亚洲中文天堂综合|日韩欧美自拍一区|男女精品天堂一区|欧美自拍第6页亚洲成人精品一区|亚洲黄色天堂一区二区成人|超碰91偷拍第一页|日韩av夜夜嗨中文字幕|久久蜜综合视频官网|精美人妻一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時(shí)間:8:30-17:00
你可能遇到了下面的問(wèn)題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營(yíng)銷解決方案
一個(gè)開(kāi)源Lua網(wǎng)絡(luò)庫(kù)

 以前曾經(jīng)寫過(guò)一篇為lua添加網(wǎng)絡(luò)功能的博客,當(dāng)然那篇文章提提供的lua網(wǎng)絡(luò)接口純粹是實(shí)驗(yàn)玩玩的,沒(méi)有任何實(shí)用性.今天突然又想起了這件事,想用前段時(shí)間寫的KendyNet為lua提供一套網(wǎng)絡(luò)接口.

這套接口是單線程的,通過(guò)PeekMsg獲取網(wǎng)絡(luò)事件,PeekMsg會(huì)在底層驅(qū)動(dòng)epoll主循環(huán).雖然也可以提供多線程的接口,在下面啟動(dòng)一個(gè)線程來(lái)驅(qū)動(dòng)epoll,將事件提交到消息隊(duì)列,由PeekMsg獲取。但是,沒(méi)人有會(huì)指望用lua寫一個(gè)高性能的網(wǎng)絡(luò)服務(wù)器,所以決定還是提供一個(gè)簡(jiǎn)單的接口,用來(lái)寫寫簡(jiǎn)單的小程序就可以了.

首先介紹一下向lua提供的接口:

 
 
 
  1. lua_register(lState,"Connect",&luaConnect);                               //連接到遠(yuǎn)程服務(wù)器 
  2. lua_register(lState,"CloseConnection",&luaCloseConnection);    //銷毀連接 
  3. lua_register(lState,"CreateNet",&luaCreateNet);                         //創(chuàng)建網(wǎng)絡(luò)接口 
  4. lua_register(lState,"PeekMsg",&luaPeekMsg);                            //從消息隊(duì)列提取事件 
  5. lua_register(lState,"CreateWpacket",&luaCreateWpacket);        //創(chuàng)建一個(gè)寫包 
  6. lua_register(lState,"ReleaseRpacket",&luaReleaseRpacket);     //釋放一個(gè)讀包 
  7. lua_register(lState,"SendPacket",&luaSendPacket);                   //發(fā)送一個(gè)數(shù)據(jù)包 
  8. lua_register(lState,"PacketReadString",&luaPacketReadString);//從數(shù)據(jù)包中讀取字符串 

下面看一寫用這套接口編寫的echo服務(wù)器

 
 
 
  1. echo.lua 
  2.  
  3. local registernet = assert(package.loadlib("./luanet.so","RegisterNet"))   
  4. registernet() 
  5. function mainloop() 
  6.     local netengine = CreateNet("127.0.0.1",8012) 
  7.     while true do 
  8.         local type,connection,rpacket = PeekMsg(netengine,50) 
  9.         if type then 
  10.             if type == 1 then 
  11.                 print("a connection comming") 
  12.             elseif type == 3 then 
  13.                 local wpkt = CreateWpacket(rpacket,0)  
  14.                 SendPacket(connection,wpkt) 
  15.                 local msg = PacketReadString(rpacket) 
  16.                 print(msg) 
  17.                 ReleaseRpacket(rpacket) 
  18.             elseif type == 2 then 
  19.                 print("disconnect") 
  20.                 CloseConnection(connection) 
  21.             else 
  22.             end 
  23.         end 
  24.          
  25.     end     
  26. end     
  27.  
  28. mainloop()   

相當(dāng)簡(jiǎn)單,首先是導(dǎo)入luanet.so動(dòng)態(tài)庫(kù),并調(diào)用網(wǎng)絡(luò)接口注冊(cè)函數(shù),然后在127.0.0.1的8012端口上創(chuàng)建一個(gè)網(wǎng)絡(luò)引擎.

然后循環(huán)調(diào)用PeekMsg獲取事件即可.

目前還有些小bug需要解決.

項(xiàng)目地址:https://github.com/sniperHW/luanet

要注意的是本項(xiàng)目依賴于kendylib,所以下載時(shí)請(qǐng)把kendylib也一起下載.


網(wǎng)頁(yè)標(biāo)題:一個(gè)開(kāi)源Lua網(wǎng)絡(luò)庫(kù)
文章路徑:http://www.dlmjj.cn/article/djjigio.html