一个开源Lua网络库

开发 开发工具
Lua是一个小巧的脚本语言。今天我们将介绍一下如何为KendyNet为lua提供一套网络接口。

 以前曾经写过一篇为lua添加网络功能的博客,当然那篇文章提提供的lua网络接口纯粹是实验玩玩的,没有任何实用性.今天突然又想起了这件事,想用前段时间写的KendyNet为lua提供一套网络接口.

这套接口是单线程的,通过PeekMsg获取网络事件,PeekMsg会在底层驱动epoll主循环.虽然也可以提供多线程的接口,在下面启动一个线程来驱动epoll,将事件提交到消息队列,由PeekMsg获取。但是,没人有会指望用lua写一个高性能的网络服务器,所以决定还是提供一个简单的接口,用来写写简单的小程序就可以了.

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

lua_register(lState,"Connect",&luaConnect);                               //连接到远程服务器 
lua_register(lState,"CloseConnection",&luaCloseConnection);    //销毁连接 
lua_register(lState,"CreateNet",&luaCreateNet);                         //创建网络接口 
lua_register(lState,"PeekMsg",&luaPeekMsg);                            //从消息队列提取事件 
lua_register(lState,"CreateWpacket",&luaCreateWpacket);        //创建一个写包 
lua_register(lState,"ReleaseRpacket",&luaReleaseRpacket);     //释放一个读包 
lua_register(lState,"SendPacket",&luaSendPacket);                   //发送一个数据包 
lua_register(lState,"PacketReadString",&luaPacketReadString);//从数据包中读取字符串 
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.

下面看一写用这套接口编写的echo服务器

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

相当简单,首先是导入luanet.so动态库,并调用网络接口注册函数,然后在127.0.0.1的8012端口上创建一个网络引擎.

然后循环调用PeekMsg获取事件即可.

目前还有些小bug需要解决.

项目地址:https://github.com/sniperHW/luanet

要注意的是本项目依赖于kendylib,所以下载时请把kendylib也一起下载.

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

【编辑推荐】

  1. 编程语言新宠儿:Julia诞生记
  2. 当下主流JVM语言一览
  3. Lua开发工具脱离Eclipse 成为独立版本
  4. 菜鸟入门Java语言学习的要点
  5. 流行的编程语言之战

责任编辑:彭凡 来源: 博客园
相关推荐

2013-08-09 09:49:19

开源怎么开源库开源

2024-05-28 07:06:44

2023-10-10 08:22:12

Tesseract库开源

2014-10-21 10:25:50

程序员

2013-09-10 09:54:50

2015-07-29 10:00:16

开源项目

2022-09-28 13:57:41

鸿蒙开源

2019-07-24 14:49:48

SQL开源库BI软件

2022-12-28 14:07:52

Gamerzilla开源游戏

2011-08-23 17:42:42

Lua脚本

2022-04-28 09:05:41

网络爬虫Python

2015-06-02 09:51:40

iOS网络请求封装接口

2015-06-02 10:24:43

iOS网络请求降低耦合

2023-05-09 07:10:53

2019-03-05 11:22:06

FinalCrypt开源文件加密

2020-11-15 18:20:44

GnuCash开源会计软

2023-12-21 11:12:31

Node.js.NET开源库

2017-11-07 11:36:57

开源项目代码

2021-03-02 14:50:57

开源技术 项目

2021-09-29 15:49:37

Exchange开源用户开发者
点赞
收藏

51CTO技术栈公众号