gpt4 book ai didi

javascript - 创建 PHP websockets 服务器

转载 作者:行者123 更新时间:2023-11-28 13:30:33 24 4
gpt4 key购买 nike

我是 websockets 技术的新手。我试图创建一个 websockets php 服务器并使用 javascript 客户端连接到该服务器。我正在使用 xampp 1.8.3。

我制作了这个简单的 PHP 服务器:

<?php 
error_reporting(E_ALL);
set_time_limit(0);

$address = "127.0.0.1";
$port = 1777;
$maxConnections = 10;

if(!($sock = socket_create(AF_INET, SOCK_STREAM, 0))){
$errorCode = socket_last_error();
$errorMsg = socket_strerror($errorCode);
die("socket_create() failed -> {$errorCode}:{$errorMsg}\n");
}
echo "Server created.\n";

if(!(socket_bind($sock, $address, $port))){
$errorCode = socket_last_error();
$errorMsg = socket_strerror($errorCode);
die("socket_bind() failed -> {$errorCode}:{$errorMsg}\n");
}
echo "Server opened on {$address}:{$port}\n";

if(!(socket_listen($sock, $maxConnections))){
$errorCode = socket_last_error();
$errorMsg = socket_strerror($errorCode);
die("socket_listen() failed -> {$errorCode}:{$errorMsg}\n");
}
echo "Waiting for connections...\n";

$client = socket_accept($sock);
if(socket_getpeername($client, $address, $port)){
echo "The client {$address}:{$port} is online.\n";
}
$msg = socket_read($client, 1024000);
if(!(socket_write($client, $msg, strlen($msg)))){
$errorCode = socket_last_error();
$errorMsg = socket_strerror($errorCode);
die("socket_write() failed -> {$errorCode}:{$errorMsg}\n");
}
echo "Message sent\n";

socket_close($client);
socket_close($sock);


?>

我使用以下表达式通过 xampp shell 运行了这个 php 文件:

php htdocs/server.php

我在 shell 上收到了这条消息:

php htdocs/server.php
Server created.
Server opened on 127.0.0.1:1777
Waiting for connections...

然后我在 chrome 上打开了 client.html(我支持 websockets)。我的 client.html 代码是:

<html>
<head>
<meta charset="UTF-8" />
<title>Websockets web-server connection</title>
</head>
<body>
<p>Websockets connection. Status: <span id="status"></span></p>
<script type="text/javascript">
var webSockets = new WebSocket("ws://127.0.0.1:1777/");
webSockets.onopen = function(){
document.getElementById("status").innerHTML="connected";
webSockets.send("ping");
}
</script>
</body>
</html>

我在 javascript 控制台日志上收到了此消息:

WebSocket connection to 'ws://127.0.0.1:1777/' failed:  client.html:9

我的 shell 有以下消息:

php htdocs/server.php
Server created.
Server opened on 127.0.0.1:1777
Waiting for connections...
The client 127.0.0.1:64446 is online
Message sent

但是我没有在客户端收到任何消息,我什至没有获得连接状态。

发生了什么事?我的错误在哪里?

谢谢。

最佳答案

WebSocket 不是原始 TCP 套接字。它们需要相当复杂的类似 HTTP 的握手来建立连接,并且需要通过它们传输的数据以非常特殊的方式进行编码和构建。该协议(protocol)定义于 RFC 6455 .

除非你感到难以置信的受虐狂,否则你不想尝试自己实现这个。使用像 Ratchet 这样的库在 PHP 中实现 WebSocket。

关于javascript - 创建 PHP websockets 服务器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25331042/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com