跳到主要内容
CNode

关于net模块写入数据

问答
2243011068发布于 8 年前最后回复 8 年前
629530

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

查看回复

回复 (6)

Y
youth7#58 年前

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

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

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

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

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

L
lovegnep#18 年前

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

参与回复

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