Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/242.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 无法使用套接字\u recv增加套接字缓冲区大小_Php_Websocket - Fatal编程技术网

Php 无法使用套接字\u recv增加套接字缓冲区大小

Php 无法使用套接字\u recv增加套接字缓冲区大小,php,websocket,Php,Websocket,我已经成功地创建了一个web套接字连接,并且能够正确地发送和接收数据。但是,我无法增加套接字接收缓冲区的大小 通过使用下面的代码,我可以将接收字节限制在1000到更少 $bytes = socket_recv($socket,$buffer,2048,0); 但是,当我试图将其长度增加到65536字节时,它没有增加。 我正在使用下面提到的凭据创建web套接字连接 set_time_limit ( 0 ) ; ob_implicit_flush ( ) ; $master=socket_crea

我已经成功地创建了一个web套接字连接,并且能够正确地发送和接收数据。但是,我无法增加套接字接收缓冲区的大小

通过使用下面的代码,我可以将接收字节限制在1000到更少

$bytes = socket_recv($socket,$buffer,2048,0);
但是,当我试图将其长度增加到65536字节时,它没有增加。 我正在使用下面提到的凭据创建web套接字连接

set_time_limit ( 0 ) ;
ob_implicit_flush ( ) ;
$master=socket_create(AF_INET, SOCK_STREAM, SOL_TCP) or die("socket_create() failed");
socket_set_option($master, SOL_SOCKET, SO_REUSEADDR, 1) or die("socket_option() failed");
socket_bind($master, $address, $port) or die("socket_bind() failed");
socket_listen($master,20) or die("socket_listen() failed");

使用
flags
参数中的
MSG_WAITALL
选项告诉它在收到
len
字节之前不要返回。

为什么要将缓冲区增加到64KByte?我相信在大多数情况下,这没有多大意义。套接字缓冲区的最大大小当然也取决于底层实现。也许有一个内部的最大尺寸,你不能超过。 如果要接收更大的数据/消息,应多次使用
socket\u recv
函数调用


顺便说一句,如果您使用的是PHP,您应该寻找一些功能强大的框架。我认为尝试使用原始套接字不是一个好主意。

先生,我尝试过,但使用它后,我的程序卡住了,握手过程没有完成。如果客户端不打算一次发送所有64KB数据,您就不能用它进行握手。你想解决什么问题?事实上,我想了解更多关于HTML5 websocket的信息,目前我没有在我的应用程序中使用它,但将来我会尝试这个。。。。rite现在我正在尝试创建一个小型web应用程序/页面,在这里我可以使用WS-protocol发送所有HTML内容,因此通过在其中进行试验,我可以将大型HTML内容发送到web浏览器,但无法在服务器端接收,我想如果工作正常,我的应用程序将非常快速和实时。先生,我试图在循环中检索数据,但当我这样做时,我的数据就会损坏。它返回一些字节,其余的都为空。记住
socket\u recv
返回读取的字节数。在此之后,您不能尝试访问缓冲区的某些部分,因为它们无效。