关于net模块写入数据
发布于 6 年前 作者 243011068 2187 次浏览 来自 问答

socket.write(buffer)方法写入的buffer不能指定偏移和长度,导致整个buffer数据都会传过去,我想创建一个很大buffer来填充数据而不是每次发送消息都创建个新的buff,有什么解决办法吗

6 回复

貌似没有,我也是直接创建个新buff

@lovegnep 这么频繁的创建没问题么

@243011068 项目上没有这么做。我们消息体的长度是固定的,只需要分配一次就行了。如果有多种长度的消息,可以提前分配好。

@lovegnep 感谢回答,我这边消息体长度是变化的,这种方法应该不适用

man了下linux的send函数: ssize_t send(int sockfd, const void *buf, size_t len, int flags);

the message is found in buf and has length len.

OS提供的接口不支持偏移但是支持长度,在linux上用c写socket程序的时候我就试过建立一个很大的buff,然后每次send的时候重用这个buff并且指定len。不过node可能出于某些原因没有封装成系统api的样子。

@youth7 那就只能每次都创建拉

回到顶部