luasocket源码编译_luasocket教程

hacker|
92

文章目录:

谁有3.2的luasocket使用范例

在本范例的 net 包中,有3个 lua 类:

net.PacketBuffer

我们收到的数据包经常是不完整的,特别是当数据包比较大的时候。因此我们必须确保数据包完整才能使用。PacketBuffer 就是做这件事的。

net.Protocol

这个类把数据包解析成人类可读的格式。它转换一个数据包到一个lua table,并且为每个数据项命名。数据项的名称定义在net.protocols 文件中。

net.protocols

这是你的协议定义文件。你可以写一个生成器程序来生成它。

下面是本范例运行的log文件。当然,你需要自己实现服务端程序。

[0.2467] [INFO] socket.getTime:1389319197.462940

[0.2472] [INFO] os.gettime:1389319197.000000

[0.2477] [INFO] socket._VERSION: LuaSocket 2.1-rc1

[0.2530] [INFO] Scene "MainScene:onEnter()"

[1.9754] [INFO] socket status: SOCKET_TCP_CONNECTED

[5.8635] send 1000 packet: 86 7B 00 0B 00 00 00 B1 04 00 03 00 08 10 C0 3E 01 01

[5.8859] socket receive raw data: 86 7B 00 60 00 00 00 00 7D 00 0D 00 09 11 18 20 28 30 38 40 48 50 58 60 00 3C 63 73 76 3D 34 38 32 28 30 31 30 39 2E 31 35 33 32 32 38 29 0A 66 73 3D 31 33 31 28 30 31 30 39 2E 31 35 33 31 35 31 29 0A 67 73 3D 33 35 32 28 30 31 30 39 2E 31 38 30 33 32 37 29 04 74 65 73 74 00 14 50 D6 03 96 01 00 00 00 0F 6E 103

[5.8873] start analyzing... buffer len: 103, available: 103

[5.8878] method:2000

[5.8884] before get meta position:11

[5.8897] after get meta position:25

[5.8904] after get body position:104

[5.8909] dump from: [string "d:/cocos2dx/quick/samples/luasocket/scripts/scenes/MainScene.lua"]:54: in function [string "d:/cocos2dx/quick/samples/luasocket/scripts/scenes/MainScene.lua"]:48

[5.8921] - "var" = {

[5.8924] - "body" = {

如何安装luasocket源码

第一种方法:如果你有安装了 Lua 模块的安装和部署工具 LuaRocks,那么一条指令就能安装部署好 LuaSocket:

# luarocks install luasocket

第二种方法:如果没安装有 LuaRocks,也可以源码安装。

先把 LuaRocks 下载下来,当前可用的版本是 luasocket-3.0-rc1(luasocket的源码有托管在Github.com):

# git clone

把源码clone下来之后就可以进行本地源码安装,直接进入到luasocket目录进行编译安装了

# cd luasocket

# make make install

如何修改luasocket-2.0.2源码

我使用了windows下的msys做的编译,进入lua源文件的src目录下,把mingw段改成如下:

mingw:

$(MAKE) "LUA_A=lua52.a" "LUA_T=lua.exe" \

"AR=$(AR) -o" "RANLIB=strip --strip-unneeded" \

"SYSCFLAGS=-static" "SYSLIBS=" "SYSLDFLAGS=-s" lua.exe

$(MAKE) "LUAC_T=luac.exe" luac.exe

然后在上一层调用make mingw就可以了

lua 怎么实现路径的socket

socket是面向连接的只传数据,socket和HTTP可以说是两回事,但又是一家人~

我发现现在很多人socket和http混起来了。其实他们不在一个层面上。

首先,socket是一种实现而HTTP是一种协议。

socket最早是由BSD socket也就是*nix系统实现了TCP/UDP协议,是一种实现。而HTTP是应用层协议,它底层通过socket建立连接,所以你如果看UNIX系统编程,那就会发现系统提供了SOCKET调用,却不提供HTTP。

如果上面这些概念你看不明白,那么很简单。你可以和一个HTTP服务器建立一个socket连接,然后发送下面一数据:(记得我每个回车就是一个\r\n)

POST /path HTTP/1.0 

Host: 

Connection: Close

Content-Length: 5

data

这样是不是很熟悉,就是一个HTTP标准的请求报文,发送后你就会发现HTTP服务器会返回一长串HTTP格式的数据,也就是响应报文。这就是一个HTTP的请求响应流程。

最后,我猜测很多人把socket和HTTP混乱的原因,可能是因为概念上的混淆。socket是面向连接的,是一种长连接,如TCP就经过三次握手,就开始传送数据,如果不是一方主动断开,那么连接一直建立着,直到掉线。而HTTP却不是,HTTP是建立连接后,接收完一个报文后,服务器基本上是选择了主动断开连接,这在tomcat之类的服务器除非特殊设置,否则都是这样的。即使connection发送的是keep-alive。

然而,我还是想再说一次,他们真的不是一回事。也许大家都知道HTTP协议是基于TCP协议实现的,却不知道socket实现了TCP,这可能是这笔糊涂账的根源吧,也许是学校应试教育给学生带来的后遗症。他教会我们网络有OSI七层协议,HTTP在应用层,TCP/IP在传输层,却不告诉我们为什么是这样,以及这样的目的是什么?我记得读书的时候,为了考试,花了许多功夫背啊,物理层,数据链路层,网络层,传输层……OK,考试过了,但是又能怎么样呢?

说了这么多,就是觉得学习的时候,要多问问自己这是为什么。

lua源码分析4(lua是怎么执行的)收藏

当分析到这里,对于lua生成中间码的过程就比较熟悉了。关键是生成的中间码必须要和lua虚拟机的执行联系在一起。所以,对于这里分析的函数调用,要结合lua虚拟机的执行一起来分析。

上篇文章对生成局部函数中间码做了简单的介绍。这里知道,当lua发现一个新定义的函数的时候,会生成OP_CLOSURE指令。那么,lua虚拟机执行到OP_CLOSURE后怎么执行呢?

在此之前,先说在lua解析代码完了以后,会做那些善后之事呢?

前面说过,lua会把一个代码文件当作是一个函数解析执行。在解析期间,它会率先生成一个FuncState的结构,作为最外面的函数。但这是解析时做的事情,运行期间,是不会有FuncState这个东西出现的。在运行期间,是由一个个叫CallInfo的数据结果的,它指的是当前运行的函数。

那么,在解析代码以后,是怎么转入运行的呢?

ULua如何打开luasocket

使用luaide进行lua调试,

需要先禁用或卸载其他的lua调试插件.

步骤:

如果你没有生成过调试配置 那么先生成

演示

演示

演示

UluaToLua

2.如果你已经有调试配置了可修改/删除工作目录下的.vscode/launch.json

3.根据调试需要选择本地或者远程调试即可

2条大神的评论

  • avatar
    访客 2022-07-08 下午 10:20:37

    样,以及这样的目的是什么?我记得读书的时候,为了考试,花了许多功夫背啊,物理层,数据链路层,网络层,传输层……OK,考试过了,但是又能怎么样呢?说了这么多,就是觉得学习的时候,要多问问自己这是为什么。lua源码分析

  • avatar
    访客 2022-07-09 上午 12:56:13

    CP就经过三次握手,就开始传送数据,如果不是一方主动断开,那么连接一直建立着,直到掉线。而HTTP却不是,HTTP是建立连接后,接收完一个报文后,服务器基本上是选择了主动断开连接,这在tomcat之类的服务器除非特殊设置,否则

发表评论