首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >PHP工人-客户端websocket连接问题

PHP工人-客户端websocket连接问题
EN

Stack Overflow用户
提问于 2018-02-09 10:01:01
回答 1查看 2.3K关注 0票数 0

我是jsut,试图在PHP的Workerman和javascript客户机之间建立非常简单的连接。我无法在javascript客户端上正确地设置websocket的url。

工人库

实际上,我使用Cloud9进行测试,然后我想将这个示例移到共享主机。

这是我的文件夹结构:

这是我的php示例start.php

代码语言:javascript
复制
<?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

代码语言:javascript
复制
<!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运行我的脚本

代码语言:javascript
复制
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地址,以便正确地与工人库一起使用它呢?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 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:8081http://-.c9users.io:8082访问。 请注意,8080、8081和8082是宿主Cloud9工作区上唯一可用的端口。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48703224

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档