Hello!
2016-08-29 0:06 GMT-07:00 zhang_jin_ming:
> 我在使用 stream-lua-nginx-module模块中 想用 ngx.req.socket 做个 TCP SERVER(TCP 长连接通信).
> 但是在接受数据使用 receive 时候遇到一些问题.想请教一下.
>
> 测试的数据假如为 010203040506abcd(可能是base64编码后的字符串,没有结尾标示)
> 数据特征如下: 字符串,长度不固定,没有换行结束标志.对于这样的数据我该如何接受?
> tcpsock:receive() 默认是接受一行数据
> tcpsock:receive(n) 对于指定个数,也要达到指定的个数后才会 有n个数据.
> tcpsock:receive("*l") 接受一行数据,无法使用
> tcpsock:receive("*a") 对于这个接收,我设置settimeout() 后还是没有接收到数据.
> 我现在唯一能想到的办法是 tcpsock:receive(1)
> 每来一个数据接收,自己拼装到一个字符串中,连续多少次接收不到数据判断接收完成,处理数据....
> 但是我感觉这样很麻烦.
>
> 对于接收这样的数据,应该怎么样使用 tcpsock:receive 方法. 还有 tcpsock:receive("*a") 是怎么使用?
感觉我们需要一个 receive("*b") 方法,用来实现 bsd socket API 中的 recv() 语义,即只要接收到数据就返回,不论多少。
你有兴趣贡献一个补丁吗?
多谢,多谢!
receive("*a") 并不是你想要的效果,因为是一直接收数据到对方关闭连接为止。
另外,建议移步 openresty 中文邮件列表讨论这样的问题,谢谢合作!请见
http://openresty.org/en/community.html 同时抄送给该列表。
Regards,
-agentzh