关于luasocket的编译和部署

2018-08-03 15:18:17 浏览数 (1)

  • lua语言是一门轻量级、可扩展、使用方便的脚本语言,近年来在很多领域得到了广泛的使用,特别是在游戏领域,很多服务器和客户端引擎都选择使用lua来做扩展。同时lua自出生以来受到很多开发者的青睐,并为之开发了很多扩展库,例如lfs、luasql、redis-lua、luasocket、luajson等都得到了广泛的使用。

  • 其中luasocket主要是提供网络方面的扩展,提供了包括tcp、udp、http、ftp、smtp等协议的支持,并且支持跨平台。使用它能够很容易的在lua进行网络程序的开发,本文主要讲解一下如何编译和部署luasocket。

  • 首先,我们需要下载源码。
    • 下载地址:http://files.luaforge.net/releases/luasocket/luasocket 如果是windows,可以直接下载luasocket-2.0-beta2-win32,里面有编译好的dll文件,使用了是lua5.1。但是如果需要使用luajit,那么则需要下载源码编译。下载luasocket-2.0.2则是源码。
  • 编译luasocket的源码。
    • winddows:解压后里面有vs的工程,打开sln文件,修改一下lua的头文件路径和lib路径,然后可以直接编译。产生socket.dll和mime.dll。
    • linux: 1、wget http://pkgs.fedoraproject.org/repo/pkgs/lua-socket/luasocket-2.0.2.tar.gz 2、tar -zxvf ./luasocket-2.0.2.tar.gz 3、cd luasocket-2.0.2 4、修改config文件,添加lua的头文件路径。LUAINC=-Ilua-5.1.1/src 5、make,会在src目录产生socket.so和mime.so。
  • 部署luasocket,部署其实比较简单,这里说一下如何扩展
    • 首先,需要有lua的运行环境,就是需要能够运行lua。
    • 其次,库文件的存放有规则,soket.dll(so)需要放在宿主程序目录下socket的目录中,并改名为core.dll(so),mime.dll(so)需要放在宿主程序目录下mime的目录中,并改名为core.dll(so)。(注:之所以需要这样,是因为在socket.lua里面加载c库使用了require(socket.core),利用了lua加载库的一个特性,lua加载完库后会检查库里面是否存在luaopen_xxx_xx的入口函数,其中的xx就是路径的名字,比如socket.dll里面的入口函数就是luaopen_socket_core,所以这样加载会默认调用入口函数,后面我会再介绍一下如何手动加载入口函数。)。
    • 再次,将源码包内的lua文件放到自己的脚本目录,并按存放路径require,然后在使用的地方require(module name)或者使用module name调用接口。示例代码如下:
代码语言:javascript复制
--加载luasocket,这里按照实际路径包含。
require "script.socket.socket"
require "script.socket.ltn12"
require "script.socket.mime"
--调用接口,使用包名(module name)
local socket = require("socket")
socket.connect(...)
  • 介绍一下手动加载入口函数的方法,就是使用用lualib的方式,用代码来加载,示例代码如下:
代码语言:javascript复制
--入口初始化函数
function luasocket_init()   
    --第一个参数是dll或者so库文件名,第二个参数是入口函数名称
    local open_function, code = package.loadlib("socket", "luaopen_socket_core")
    if open_function then
        return open_function()
    end
    error("luasocket init failed because:%s", code)
end
--调用入口函数
local socket = luasocket_init()

好了,luasocket的编译和部署就讲完了,做完上面这些步骤,就可以用luasocket来编写网络程序了。


首次使用MarkDown编辑器写博客,总体说来效果还可以,比以前的方式要好很多,不过和wiki的语法比起来,还是感觉比较繁琐,最不习惯的就是没有缩进支持,也可能是我没找到,编辑起来怪怪的,希望csdn能够改进吧。

0 人点赞