自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

一個(gè)開(kāi)源Lua網(wǎng)絡(luò)庫(kù)

開(kāi)發(fā) 開(kāi)發(fā)工具
Lua是一個(gè)小巧的腳本語(yǔ)言。今天我們將介紹一下如何為KendyNet為lua提供一套網(wǎng)絡(luò)接口。

 以前曾經(jīng)寫(xiě)過(guò)一篇為lua添加網(wǎng)絡(luò)功能的博客,當(dāng)然那篇文章提提供的lua網(wǎng)絡(luò)接口純粹是實(shí)驗(yàn)玩玩的,沒(méi)有任何實(shí)用性.今天突然又想起了這件事,想用前段時(shí)間寫(xiě)的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寫(xiě)一個(gè)高性能的網(wǎng)絡(luò)服務(wù)器,所以決定還是提供一個(gè)簡(jiǎn)單的接口,用來(lái)寫(xiě)寫(xiě)簡(jiǎn)單的小程序就可以了.

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

  1. lua_register(lState,"Connect",&luaConnect);                               //連接到遠(yuǎn)程服務(wù)器 
  2. lua_register(lState,"CloseConnection",&luaCloseConnection);    //銷(xiāo)毀連接 
  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è)寫(xiě)包 
  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ù)包中讀取字符串 

下面看一寫(xiě)用這套接口編寫(xiě)的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也一起下載.

原文鏈接:http://www.cnblogs.com/sniperHW/archive/2012/07/29/2614308.html

【編輯推薦】

  1. 編程語(yǔ)言新寵兒:Julia誕生記
  2. 當(dāng)下主流JVM語(yǔ)言一覽
  3. Lua開(kāi)發(fā)工具脫離Eclipse 成為獨(dú)立版本
  4. 菜鳥(niǎo)入門(mén)Java語(yǔ)言學(xué)習(xí)的要點(diǎn)
  5. 流行的編程語(yǔ)言之戰(zhàn)

責(zé)任編輯:彭凡 來(lái)源: 博客園
相關(guān)推薦

2013-08-09 09:49:19

開(kāi)源怎么開(kāi)源庫(kù)開(kāi)源

2023-10-10 08:22:12

Tesseract庫(kù)開(kāi)源

2024-05-28 07:06:44

2015-07-29 10:00:16

開(kāi)源項(xiàng)目

2014-10-21 10:25:50

程序員

2013-09-10 09:54:50

2022-09-28 13:57:41

鴻蒙開(kāi)源

2019-07-24 14:49:48

SQL開(kāi)源庫(kù)BI軟件

2011-08-23 17:42:42

Lua腳本

2022-12-28 14:07:52

Gamerzilla開(kāi)源游戲

2022-04-28 09:05:41

網(wǎng)絡(luò)爬蟲(chóng)Python

2015-06-02 09:51:40

iOS網(wǎng)絡(luò)請(qǐng)求封裝接口

2015-06-02 10:24:43

iOS網(wǎng)絡(luò)請(qǐng)求降低耦合

2023-12-21 11:12:31

Node.js.NET開(kāi)源庫(kù)

2023-05-09 07:10:53

2017-11-07 11:36:57

開(kāi)源項(xiàng)目代碼

2021-09-29 15:49:37

Exchange開(kāi)源用戶開(kāi)發(fā)者

2021-03-02 14:50:57

開(kāi)源技術(shù) 項(xiàng)目

2019-03-05 11:22:06

FinalCrypt開(kāi)源文件加密

2020-11-15 18:20:44

GnuCash開(kāi)源會(huì)計(jì)軟
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)