我正在使用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)