我尝试同时实施PHP-WebSocket和Wrench。两者都遇到了同样的问题:我无法连接到其中任何一个。 Chrome和Firefox都表示连接已重置。我使用命令行(php server.php
)运行我的扳手服务器。问题很可能是由客户端引起的,因为我通常不会使用Javascript。另外,奇怪的是,Javascript中没有抛出任何异常,浏览器控制台中只有一个错误。
重要编辑:
WEBSOCKET_HOST设置为“localhost”,WEBSOCKET_PORT设置为“9000” 此外,服务器正在使用端口转发的VirtualBox Ubuntu服务器上运行,尽管我从未遇到过问题,ssh和http端口转发工作正常。
编辑2:
我可以通过命令行工具wscat连接到服务器就好了。
server.php
require_once(__DIR__."/../../composer/vendor/autoload.php");
use Wrench\Application\Application;
use Wrench\Application\NamedApplication;
use Wrench\Application\EchoApplication;
$server = new \Wrench\BasicServer('ws://' . WEBSOCKET_HOST . ':' . WEBSOCKET_PORT, array(
'allowed_origins' => array(
HTTP_HOST,
)
));
$server->registerApplication("app", new EchoApplication());
$server->run();
client.js:
function $(id){ return document.getElementById(id); }
var socket;
window.onload = function()
{
var host = "ws://<?php echo WEBSOCKET_HOST . ":" . WEBSOCKET_PORT ?>/app";
try
{
socket = new WebSocket(host);
socket.onopen =
function(msg)
{
window.alert("Connection Opened!");
};
socket.onmessage =
function(msg)
{
$("json").innerHTML = msg;
};
socket.onclose =
function(msg)
{
};
}
catch(ex)
{
window.alert(ex.message);
$("json").innerHTML = ex.message;
}
}
setInterval(function()
{
if(socket != null && socket.readyState == 1)
{
socket.send("test");
}
}, 500);
window.onbeforeunload = function()
{
socket.close();
}