首页 > 解决方案 > PHP Socket卡在接受

问题描述

我有一个 php 套接字服务器和一个 javascript websocket,但 websocket 卡在连接到套接字。没有错误,但 websocket 保持连接。

袜子.php

set_time_limit(0);

$ip   = '127.0.0.1';


$sock = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
$ret  = socket_bind($sock, $ip);
$ret  = socket_listen($sock);

do 
{
 $ref = socket_accept($sock);

 /*
   Write message
 */
 $msg ="Success receive from client\n";

 socket_write($ref, $msg, strlen($msg));

 /*
   Read message
 */
 $buf = socket_read($ref , 1024);

 echo "Received message: $buf\n";

 socket_close($ref);

}while (true);

socket_close($sock);

?>

javascript网络套接字:

var sock = new WebSocket('ws://localhost/sock.php');
sock.onopen(function()
{
 console.log('socket connected.');
});

标签: phpsockets

解决方案


您必须指定正确的端口,socket_bind()否则它将侦听随机端口。您可以netstat在 Linux 和 Windows 上进行检查。当您尝试连接时ws://localhost,应该是端口 80。但是通常不允许绑定到端口 80,除非您是管理员用户。最好绑定到另一个端口,例如 8080,然后连接到ws://localhost:8080.


推荐阅读