前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >关于luasocket的编译和部署

关于luasocket的编译和部署

作者头像
帘卷西风
发布2018-08-03 15:18:17
3.3K0
发布2018-08-03 15:18:17
举报
文章被收录于专栏:帘卷西风的专栏
  • 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能够改进吧。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2015年03月16日,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
云数据库 Redis
腾讯云数据库 Redis(TencentDB for Redis)是腾讯云打造的兼容 Redis 协议的缓存和存储服务。丰富的数据结构能帮助您完成不同类型的业务场景开发。支持主从热备,提供自动容灾切换、数据备份、故障迁移、实例监控、在线扩容、数据回档等全套的数据库服务。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档