我是jsut,试图在PHP的Workerman和javascript客户机之间建立非常简单的连接。我无法在javascript客户端上正确地设置websocket的url。
实际上,我使用Cloud9进行测试,然后我想将这个示例移到共享主机。
这是我的文件夹结构:

这是我的php示例start.php
<?php
require_once '/home/ubuntu/workspace/workerman/vendor/autoload.php';
use Workerman\Worker;
// Create a Websocket server
$ws_worker = new Worker("websocket://0.0.0.0:2346");
// 4 processes
$ws_worker->count = 4;
// Emitted when new connection come
$ws_worker->onConnect = function($connection)
{
echo "New connection\n";
};
// Emitted when data received
$ws_worker->onMessage = function($connection, $data)
{
// Send hello $data
$connection->send('hello ' . $data);
};
// Emitted when connection closed
$ws_worker->onClose = function($connection)
{
echo "Connection closed\n";
};
// Run worker
Worker::runAll();这是我的客户端示例index.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>Workerman Sockets Test</title>
</head>
<body>
<h3>Hello</h3>
<script type="text/javascript">
// How to set url for websocket in this case???
var socket = new WebSocket("wss://project-user.c9users.io:2346/workerman/test/");
socket.onopen = function() {
alert("Connection established.");
};
socket.onclose = function(event) {
if (event.wasClean) {
alert('The connection is closed.');
} else {
alert('Connection failure'); // for example, the server process is "killed"
}
alert('Code: ' + event.code + ' reason: ' + event.reason);
};
socket.onmessage = function(event) {
alert("Received data " + event.data);
};
socket.onerror = function(error) {
alert("Error" + error.message);
};
</script>
</body>
</html>然后使用以下命令$ php start.php运行我的脚本
Workerman[start.php] start in DEBUG mode
----------------------- WORKERMAN -----------------------------
Workerman version:3.5.4 PHP version:5.5.9-1ubuntu4.22
------------------------ WORKERS -------------------------------
user worker listen processes status
ubuntu none websocket://0.0.0.0:2346 4 [OK]
----------------------------------------------------------------
Press Ctrl+C to quit. Start success.然后我正在运行apache服务器,打开页面时会出现超时错误:Error in connection establishment: net::ERR_CONNECTION_TIMED_OUT
那么,在这种情况下,能否有人建议如何在客户端上设置websocket地址,以便正确地与工人库一起使用它呢?
发布于 2018-02-09 10:07:33
我的第一个假设是这个端口不是由Cloud9打开的。
阅读他们的文档可以证实:https://docs.c9.io/docs/run-an-application
如果您正在开发服务器应用程序,则宿主Cloud9工作区上的可用端口请注意,您需要侦听0.0.0.0 ($IP)和8080 ($PORT)。收听此端口将使您的应用程序可以在http://-.c9users.io上查看。 您还可以绑定到端口8081和8082,这两个端口分别可以被http://-.c9users.io:8081和http://-.c9users.io:8082访问。 请注意,8080、8081和8082是宿主Cloud9工作区上唯一可用的端口。
https://stackoverflow.com/questions/48703224
复制相似问题