Heim > Backend-Entwicklung > PHP-Tutorial > 求php socket长连接多个来回通信的例子或教程

求php socket长连接多个来回通信的例子或教程

WBOY
Freigeben: 2016-06-23 13:37:52
Original
1096 Leute haben es durchsucht

网上找到的例子的大概是这样的处理流程的:
socket_create //连接
socket_bind //绑定
socket_listen //监听

do {
if (收到socket_accept连接)
{
socket_read //读取接收到的信息
socket_write //传回回应信息
}
socket_close //关闭连接
} while(true);

监听之后,就等待请求,如果接收到请求之后就会读取传来的信息然后回应,回应之后就关闭连接。
(上面这些我从例子代码上理解出来的处理流程,可能我也有理解错的地方)
用这个例子试验之后发现问题是:这个例子,好像不能让客户端保持长连接,因为他 “如果接收到请求之后就会读取传来的信息然后回应,回应之后就关闭连接”

希望有大侠指点一下php socket长连接多个来回通信的实现流程,或给个教程或给个例子


回复讨论(解决方案)

你不在循环内 socket_close //关闭连接 不就行了?

试过不在循环内 socket_close //关闭连接,但还是接收不到客户端发来的第二次信息,相关代码:

do {	if (($msgsock = socket_accept($sock)) === false)	{//得到一个链接		echo "套接字接收失败,原因:".socket_strerror(socket_last_error($sock)) . "\n";		break;	}	echo '阅读客户端消息\n';	$buf = strlen(socket_read($msgsock, 8192));	$talkback = "客户端说:$buf\n";	$talkback = "服务器端说:好啊\n";	flush();	if (false === socket_write($msgsock, $talkback, strlen($talkback))) {		echo "套接字写失败,原因:" . socket_strerror(socket_last_error($sock)) ."\n";	} else {		echo '发送成功';	}	//socket_close($msgsock);	//flush();} while(true);
Nach dem Login kopieren

php socket 服务器何必自己写呢,用 workerman socket 服务器框架啊,长链接还是短链接一个配置字段的事儿,稳定,性能又高,最主要是简单

if (($msgsock = socket_accept($sock)) === false){	echo "套接字接收失败,原因:".socket_strerror(socket_last_error($sock)) . "\n";	break;}do {	echo '阅读客户端消息\n';	$buf = strlen(socket_read($msgsock, 8192));	$talkback = "客户端说:$buf\n";	$talkback = "服务器端说:好啊\n";	flush();	if (false === socket_write($msgsock, $talkback, strlen($talkback))) {		echo "套接字写失败,原因:" . socket_strerror(socket_last_error($sock)) ."\n";	} else {		echo '发送成功';	}	//socket_close($msgsock);	//flush();} while(true);
Nach dem Login kopieren

可以再发出一个请求后立即再发一个

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage