我在其上使用棘轮0.3.3,Laravel 5和PHP 5.5.9建立了一个实时的多人游戏工作,服务器操作系统是Ubuntu Linux系统。服务器通过WebSocket(数百个用户)向每个用户发送每个周期约500字节的数据。 它看起来像WebSocket缓冲请求并一次发送5到6个请求(每个500字节)。 我们有30毫秒的周期。有没有办法手动设置WebSocket缓冲区设置,所以我的请求可以毫不拖延地发送?如何设置实时WebSocket缓冲区?
1
A
回答
2
我发现这个问题的解决方案。首先,IoServer类从Ratchet创建并扩展了IoServer。
class IoServer extends \Ratchet\Server\IoServer {
public static function factory(MessageComponentInterface $component, $port = 80, $address = '0.0.0.0') {
$loop = LoopFactory::create();
$socket = new Reactor($loop);
$socket->listen($port, $address);
$sock = socket_import_stream($socket->master);
socket_set_option($sock, SOL_TCP, TCP_NODELAY, true);
return new static($component, $socket, $loop);
}
}
0
Azure本身对Ubuntu VM的缓冲区设置没有任何限制。首先,我将使用此处列出的命令 - How to find the socket buffer size of linux检查当前的缓冲区设置值。 其次,如果要配置或调整它们,你可以参考 - http://www.cyberciti.biz/faq/linux-tcp-tuning/
不知道这是你正在寻找的答案,因为Ghedipunk指出,这可能是使用Nagle算法中的一个问题,在这种情况下,你可能想尝试在隧道的配置加上TCP_NODELAY配置 -
插座= 1:TCP_NODELAY = 1 插座= R:TCP_NODELAY = 1
虽然我个人从来没有与棘轮工作。
PS-我想将此添加为评论,因为我不确定这是否是您正在寻找的正确答案,但SO论坛不允许我添加评论。
相关问题
- 1. 如何“重置”缓冲区?
- 2. 如何为特定缓冲区设置缓冲区本地面属性?
- 3. 如何在flex中设置缓冲区设置?
- 4. EMACS缓冲区等于文件时如何重置缓冲区修改标志
- 5. 在JavaScript的Websocket上清除缓冲区
- 6. 如何在运行时设置缓冲区长度时使用read(ubyte []缓冲区)读取BufferedFile?
- 7. 如何实现共享缓冲区?
- 8. Linux缓冲区是如何实现的?
- 9. 设置AVPlayer AVPlayerItem缓冲区大小?
- 10. 使用OSMF设置缓冲区图形
- 11. 将隐藏缓冲区设置为'nobuflisted'
- 12. 设置管道缓冲区大小
- 13. 设置缓冲区内容与变量
- 14. 设置GLKView渲染缓冲区大小
- 15. jetty-maven-plugin设置缓冲区大小
- 16. 模板缓冲区测试设置DirectX9
- 17. 无法设置深度缓冲区?
- 18. DeviceIoControl没有设置输出缓冲区
- 19. 在GZipStream中设置缓冲区大小
- 20. 去协议缓冲区设置错误?
- 21. CL_INVALID_ARG_VALUE设置缓冲区参数
- 22. Naudio缓冲区和实时流传输
- 23. FFMPEG实时缓冲区全帧丢失
- 24. OpenAL缓冲区实时更新
- 25. 级联(缓冲区)实现
- 26. 设置接收和发送缓冲区的套接字缓冲区大小
- 27. 用临时缓冲区使用ofstream写入临时缓冲区
- 28. 如何在php中设置输出缓冲区名称?
- 29. 如何忽略vimrc设置中的nerdtree缓冲区?
- 30. 如何在emacs中设置缓冲区局部变量
我无法理解您的问题。你的websocket服务器会每30毫秒发送一次消息给连接的客户端吗?但是现在你的客户会收到5或6条消息吗?你是什么意思“在每个周期发送每个请求”? –
是我的websocket服务器每隔30毫秒向连接的客户端发送消息。问题是这些消息不知何故排队,并且客户端同时得到5或6条消息。每当服务器生成它时,我都需要发送每条消息。 –
听起来像你是纳格尔算法的牺牲品。我建议设置'TCP_NODELAY'标志,但是你使用棘轮... – Ghedipunk