gpt4 book ai didi

php - 将 WebSocket (socketo.me) 连接到托管服务器时出现问题

转载 作者:行者123 更新时间:2023-12-03 12:08:21 31 4
gpt4 key购买 nike

当我尝试从连接到 MySQL 数据库的 localhost 运行聊天应用程序时,该数据库已通过 WebSocket 用 PHP 编码,它成功了。

当我试图运行时
从 PuTTY 终端登录到 SSH 凭据,它显示为 Server Started with the port# 8383

somelabz@bh-ht-3 [~/public_html/chatroom-php-mysql/bin]# php server.php
Server Started.somelabz@bh-ht-3 [~/public_html/chatroom-php-mysql/bin]# php server.php
Server Started.

服务器以除 8080 之外的任何端口号启动。所以我决定用 8383 打开端口,结果它已经成功启动

使用端口 8080,error_log 生成为
[07-Oct-2018 06:11:02 Etc/GMT] PHP Fatal error:  Uncaught RuntimeException: Failed to listen on "tcp://0.0.0.0:8080": Address already in use in /home/somelabz/public_html/chatroom-php-mysql/vendor/react/socket/src/TcpServer.php:164
Stack trace:
#0 /home/somelabz/public_html/chatroom-php-mysql/vendor/react/socket/src/Server.php(36): React\Socket\TcpServer->__construct('tcp://0.0.0.0:8...', Object(React\EventLoop\StreamSelectLoop), Array)
#1 /home/somelabz/public_html/chatroom-php-mysql/vendor/cboden/ratchet/src/Ratchet/Server/IoServer.php(59): React\Socket\Server->__construct('0.0.0.0:8080', Object(React\EventLoop\StreamSelectLoop))
#2 /home/somelabz/public_html/chatroom-php-mysql/bin/server.php(15): Ratchet\Server\IoServer::factory(Object(Ratchet\Http\HttpServer), 8080)
#3 {main}
thrown in /home/somelabz/public_html/chatroom-php-mysql/vendor/react/socket/src/TcpServer.php on line 164

服务器.php
<?php
use Ratchet\Server\IoServer;
use Ratchet\Http\HttpServer;
use Ratchet\WebSocket\WsServer;
use MyApp\Chat;

require dirname(__DIR__) . '/vendor/autoload.php';

$server = IoServer::factory(
new HttpServer(
new WsServer(
new Chat()
)
),
8383
);
$server->run();

聊天室.php
// For other computers to connect, you will probably need to change this to your LAN IP or external IP,
// alternatively use: gethostbyaddr(gethostbyname($_SERVER['SERVER_NAME']))
// $Server->wsStartServer($_SERVER['SERVER_ADDR'], 9300);
var conn = new WebSocket('ws://localhost:8383');
<script type="text/javascript">
$(document).ready(function(){
var conn = new WebSocket('ws://localhost:8383');
conn.onopen = function(e) {
console.log("Connection established!");
};

...
</script>

从浏览器检查控制台信息当我尝试切换/更改域名以及端口# 使用文件 chatroom.php 中的排列和组合播放时,我得到了以下日志和 server.php

var conn = new WebSocket('ws://localhost:8383');
var conn = new WebSocket('ws://192.197.161.61/~somelabz:8383');
var conn = new WebSocket('ws://somelabz.ml/chatroom-php-mysql:8383');
var conn = new WebSocket('ws://somelabz.ml:8383/');
var conn = new WebSocket('ws://192.197.161.61:8383/');



我曾经收到以下错误:

chatroom.php:73 WebSocket connection to 'ws://somelabz.ml:8383/' failed: Error in connection establishment: net::ERR_CONNECTION_TIMED_OUT

chatroom.php:73 WebSocket connection to 'ws://192.197.161.61/~somelabz:8383' failed: Error during WebSocket handshake: Unexpected response code: 404

WebSocket connection to 'ws://somelabz.ml/chatroom-php-mysql:8383' failed: Error during WebSocket handshake: Unexpected response code: 404

WebSocket connection to 'ws://somelabz.ml:8383/' failed: Error in connection establishment: net::ERR_CONNECTION_TIMED_OUT

WebSocket connection to 'ws://192.197.161.61:8383/' failed: Error in connection establishment: net::ERR_CONNECTION_TIMED_OUT



WebSocket 连接它时,我想如何解决/克服它尤其是来自具有 http://somelabz.ml/chatroom-php-mysql 等域名的托管服务器

var conn = new WebSocket('ws://localhost:8383');



这是执行并添加 src 文件夹后生成的 composer 文件 $composer require cboden/ratchet
composer.json(在服务器上)
{
"autoload": {
"psr-4": {
"MyApp\\": "src"
}
},
"require": {
"cboden/ratchet": "^0.4.1"
}
}

composer.json(在本地主机上)
{
"autoload": {
"psr-4": {
"MyApp\\": "src"
}
},
"require": {
"cboden/ratchet": "^0.4.3"
}
}

最佳答案

最后的结论是

即使使用 Node.js,您也永远不会有任何其他选项可以在转销商帐户服务器上运行任何服务。

解决方案在于更改我们的编码或升级/购买服务器:

  • AJAX 长池
  • 专属托管服务
  • 虚拟专用服务器(VPS)

  • 首先,

    好吧,Bluehost 网站写道:

    "We block access to certain ports to help avoid having security holes in the firewall... Purchasing a dedicated IP will allow us to grant you access to the ports you will need to run your specific services on.".



    由于 BlueHost 服务器在特定端口上阻止对套接字的传入请求,是因为它们不允许在共享主机上使用 WebSocket。
    获得类似结果的唯一方法是使用 AJAX Long Pooling 或
    我们需要升级到虚拟服务器来运行您自己的服务。

    we are not supposed to run scripts like phpwebsocket within a web service (it is a server itself). This confuses a lot of people since PHP is typically used for scripting web pages, not for coding daemons



    我这样说是因为我提到过在 Xampp 中运行脚本,并将托管服务称为“Bluehost”。
    如果是这种情况,我们需要升级到虚拟服务器包,以便您可以运行自己的服务。

    最多有 65,535 个端口。 Web 服务器不能使用低于 1024 的端口作为监听套接字,
    因为在下面的大多数系统端口上,都需要 root 权限。
    没有理智的供应商会以 root 身份运行 Web 服务器。这会影响所有 Linux 服务器。
    这就是为什么它分别在 httpd-ssl.conf 和 httpd.conf 中具有端口# 443 和 80 的 Xampp 上工作的原因。我们需要有专门的服务器。至少是虚拟的。

    其次,

    在监听套接字之前,我必须首先将其绑定(bind)到一个地址。
    绑定(bind)到地址准确定义了哪个接口(interface)应该打开该服务器端口。
    当您想监听接口(interface)知道的所有 IP 地址时,绑定(bind)到 0.0.0.0 是一种特殊情况。
    专门绑定(bind)到 127.0.0.1 应该使服务器端口仅对可以连接到本地主机的代码(例如本地进程)可见。
    绑定(bind)可用于仅接受本地连接。如果您有多个 IP 地址,您还可以让不同的服务器监听
    相同的端口但在不同的IP

    更新:

    就我而言,服务器不支持运行 Web 服务。有人可能会选择 GCP、Amazon、Heroku 等云服务。但它肯定会产生一些与之相关的间接成本,以防你试图在更长的时间内运行这些项目

    关于php - 将 WebSocket (socketo.me) 连接到托管服务器时出现问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52686375/

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