luasocket有发送缓冲区么?

luasocket有发送缓冲区么?如果有的话,我想先写入个长度,然后写入内容。这样可行么?

send接口要传一个string进去,这个string就相当于缓冲区了,可以随便拼接和修改,比C里面的缓冲区好用多了

因为我这边项目是从页游转到手游的
假设要传一个json 那么页游会先提交一个长度到缓冲区然后再提交内容.
那么到luasocket里是不是先可以 len…jsonStr 然后服务端根据这样的格式去解析?

这样会有一点问题,因为这样连接的话,len不能转成要传的网络数据,而是变成了一个字串。这里通常会用到lpack来组织数据。

我们传长度主要是为了解决黏包的问题…那么在luasocket怎么解决黏包的问题呢

也是传一个长度啊。lpack使用很简单的,加载后其实就是扩展了string的功能而已,不要被吓到了啊,呵呵。

我记得luasocket,如果没收到\n则无法收到实际数据,你如果发送的都是些json格式的数据,直接在发送完加个\n不就行了。
json格式里保证不要出现\n

能不能稍微写下发送长度加内容的例子.
function GameSocket:send(value)
if not self.socket then
print(“connect first”)
return
end
local encode = json.encode(value)
local bit = ByteArray.new()
bit:writeInt(string.len(encode))
bit:writeStringUShort(encode)
print(bit:getPack())
self.socket:send(bit:getPack())
end
我这样写有问题没…如果要想将发送的包压缩.又应该怎么操作

纯文本数据收发确实可以使用这个功能。不过,他们的协议或者不会想这样作修改。

如果要压缩解压直接
zlib.deflate
zlib.inflate
就可以了么?

这两个接口确实是这样导出来了,具体我没有用过,不过应该没问题。你先试一下吧。

已经搞定了,真是happy啊!

mark mark