我正在使用Vert.x及其ServerWebSocket类进行服务器项目。

当前,我的项目使用Pump#pump()ServerWebSocket#write()方法将大型二进制数据发送到客户端,并且效果很好。但是我发现ServerWebSocket还有另一种发送二进制数据的方法writeBinaryMessage()

该手册说:


  writeBinaryMessage():如果该数据超出WebSocket最大帧大小,则可能被写入多个帧


但是我认为ServerWebSocket#write()还通过泵送流将数据作为多个部分发送。

writeBinaryMessage()write()有什么区别?

最佳答案

writeBinaryMessage():


将(可能很大)二进制数据写入连接。如果此数据超过最大WebSocket框架大小,则可能被写入多个框架。


写()


将一些数据写入流。数据被放在内部写队列中,并且写实际上是异步发生的。为避免通过在写入队列上放置过多内存而耗尽内存,请在写入之前检查WriteStream.writeQueueFull()方法。如果使用泵,这将自动完成。


两者都返回相同类型的数据,并采用Buffer类型的参数。

唯一的区别是两个函数内部处理数据的方式不同。

如果要写入较大的二进制数据,则应使用writeBinaryMessage(Buffer data);如果要动态发送大量小消息,则应使用异步功能write(Buffer data)

看到:


write(Buffer data)
writeBinaryMessage(Buffer data)

10-04 19:05