我听说“将字符串写入socket需要花费更多时间在nodejs上,因为核心模块不允许将数据直接复制到套接字,但在转到套接字之前需要在内存中进行中间复制”。我在Ryan Dahl
采访中听到了这句话。我会在找到链接后发布链接。
如果我在理解其中任何一个方面错了,请纠正我,谢谢。
我的问题是 - 我们可以通过修改节点核心模块中的任何代码来跳过此中间复制问题吗?我在服务器中经历了5-6秒的延迟,它将庞大/大/大字符串复制到150多个插槽。
我正在尝试将数据量最小化到broadcst,但另一方面我们是否可以优化将字符串复制到套接字?
根据评论,添加更多内容。
我在做什么的例子 -
我正在广播n(> 100)用户的排行榜[所有这些都在一个房间]。它是JSON格式。 “排行榜”是一系列球员。玩家的每个对象都包含姓名,电子邮件,profile_pic_url,得分,排名。 所有对象都是json格式。 从redis获取用户信息,然后计算排名。然后这个排行榜在房间里播出。
以上操作每2秒发生一次。所以在第一次成功播出后,我可以看到一个滞后。
添加代码 - 我正在使用
socket.io
用于接受连接redis store
room
socket.io 代码 -
io.sockets.in(RoomID).emit(StateName, LeaderboardObject);
答案 0 :(得分:0)
我们可以通过修改节点核心模块中的任何代码来跳过这个中间复制问题吗?
否强>
你正在使用Socket.IO,其中大部分工作都是在JavaScript中进行的,而不是在编译的扩展中。即使您确实找到了解决缓冲区复制的方法,在这种情况下也无法使用它。
我建议发布一个单独的问题,询问您遇到的实际速度问题以及优化代码的方法。