CNode

关于net模块写入数据

问答
2243011068发布于8 年前最后回复8 年前6 回复2926 浏览0 收藏

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

查看回复

回复 (6)

L
lovegnep#1·8 年前

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

2
243011068#2·8 年前
引用 lovegnep貌似没有,我也是直接创建个新buff

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

L
lovegnep#3·8 年前
引用 243011068@lovegnep 这么频繁的创建没问题么

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

Y
youth7#5·8 年前

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的样子。

参与回复
登录后即可参与回复。登录