关于net模块写入数据
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 那就只能每次都创建拉