当前位置: 首页 > 知识库问答 >
问题:

Websocket在本地工作,但不能在Heroku-PHP应用程序上工作

弓晔
2023-03-14

我已经很久没有使用Heroku了,所以我有点生疏了。我创建了一个运行Ratchet IOServer的小型PHP应用程序。它监听端口5000。如果我运行herokulocal并使用telnet localhost 5000连接,一切似乎都能正常工作。我尝试了几种让PHP进程运行并接受连接的方法

我的Procfile如下所示;

web: php bin/console bot:start

正在运行Heroku Local

Downloading forego-0.16.1 to /Users/roje/.heroku... done
forego | starting web.1 on port 8080
web.1  | It works!
web.1  | New connection! (97)
web.1  | Connection 97 sending message "sdfdfs"

然后,当我将服务器部署到Heroku时,它就不工作了。当我尝试telnet到端口5000上的框时,我得到

telnet myapplication.herokuapp.com 5000
Trying 46.137.127.234...
telnet: connect to address 46.137.127.234: Connection refused
telnet: Unable to connect to remote host
2016-03-19T16:08:27.258081+00:00 heroku[web.1]: State changed from crashed to starting
2016-03-19T16:08:29.754688+00:00 heroku[web.1]: Starting process with command `php bin/console bot:start`
2016-03-19T16:08:31.659074+00:00 app[web.1]: It works!
2016-03-19T16:09:29.999903+00:00 heroku[web.1]: Error R10 (Boot timeout) -> Web process failed to bind to $PORT within 60 seconds of launch
2016-03-19T16:09:29.999903+00:00 heroku[web.1]: Stopping process with SIGKILL
2016-03-19T16:09:30.638659+00:00 heroku[web.1]: Process exited with status 137
2016-03-19T16:09:30.660710+00:00 heroku[web.1]: State changed from starting to crashed
2016-03-19T16:18:51.610894+00:00 heroku[web.1]: State changed from crashed to starting
2016-03-19T16:18:55.208396+00:00 heroku[web.1]: Starting process with command `php bin/console bot:start`
2016-03-19T16:18:56.648708+00:00 app[web.1]: It works!
2016-03-19T16:19:55.569256+00:00 heroku[web.1]: Error R10 (Boot timeout) -> Web process failed to bind to $PORT within 60 seconds of launch
2016-03-19T16:19:55.569256+00:00 heroku[web.1]: Stopping process with SIGKILL
2016-03-19T16:19:56.252235+00:00 heroku[web.1]: Process exited with status 137
2016-03-19T16:19:56.264205+00:00 heroku[web.1]: State changed from starting to crashed

我刚刚读了关于Heroku分配动态端口的部分Heroku+node.js错误(Web进程在启动后60秒内绑定到$port失败)

我尝试监听该端口,但我仍然无法通过连接。远程登录。虽然我确实有一些有趣的原木。也许你们中有些人正在尝试IP地址?

2016-03-19T16:38:35.577130+00:00 app[web.1]: It works!
2016-03-19T16:38:35.827466+00:00 app[web.1]: New connection! (97)
2016-03-19T16:38:35.827531+00:00 app[web.1]: Connection 97 has disconnected
2016-03-19T16:38:35.832097+00:00 app[web.1]: New connection! (107)
2016-03-19T16:38:35.832160+00:00 app[web.1]: Connection 107 has disconnected
2016-03-19T16:38:49.891455+00:00 app[web.1]: New connection! (108)
2016-03-19T16:38:49.891506+00:00 app[web.1]: Connection 108 has disconnected
2016-03-19T16:40:54.694321+00:00 app[web.1]: New connection! (109)
2016-03-19T16:40:54.694368+00:00 app[web.1]: Connection 109 has disconnected

但我还是会犯同样的错误。

Trying 176.34.255.126...
telnet: connect to address 176.34.255.126: Connection refused
telnet: Unable to connect to remote host

共有1个答案

蔚学林
2023-03-14

我能够使用nginx作为web套接字前面的代理来管理这一点。

procfile:

web: private/bin/start_socket vendor/bin/heroku-php-nginx -C nginx_app.conf

start_socket:

php private/bin/start_socket.php &
exec "$@"
<?php
require_once(dirname(dirname(__DIR__)) . '/vendor/autoload.php');
require_once(__DIR__ . '/socket/socket.php');

use Ratchet\Server\IoServer;
use Ratchet\Http\HttpServer;
use Ratchet\WebSocket\WsServer;

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

nginx.conf:

location /wss {
    proxy_pass http://localhost:8085;
    proxy_http_version 1.1;
    proxy_set_header Upgrade $http_upgrade;
    proxy_set_header Connection "upgrade";
}

现在您可以访问套接字,如下所示:ws://myapp.com/wss?mydata=testt。这并不能回避这样一个事实,即每个dyno都将运行自己独特的WebSocket服务器,但这是一个完全独立的问题。

 类似资料:
  • 我的Flask应用程序AWS Postgres连接在本地工作,但在Heroku上不工作。该应用程序在Heroku上工作,但它不向AWS Postgres获取/发送数据。 Heroku日志指出了一个endpoint在双引号中的问题。我不确定如何解决这个问题,因为我使用的是使用Psycopg2的SQLAlchemy。我没有直接使用psycopg2。 我的AWS安全组设置为所有入站IP。 更改AWS以接

  • 所以我试图从Heroku上部署的spring应用程序发送一封电子邮件。在本地运行时,电子邮件发送得非常好,但在heroku上,我得到了这个错误: MessagingException:无法将套接字转换为TLS;2021-04-30T14:46:49.318141+00:00 app[web.1]:嵌套异常为:2021-04-30T14:46:49.318145+00:00 app[web.1]:j

  • 我使用devise gem with rails进行身份验证,我的应用程序在本地运行良好,但是在heroku上部署时无法访问device视图。 检查日志时出现以下错误: ←[app[web.1]:←[0mDevis处理e::SessionsController#新作为超文本标记语言 ←[app[web.1]:←[0mDevis处理e::SessionsController#新作为超文本标记语言 ←

  • 我正在使用Amazon Linux AMI在EC2 AWS上运行以下脚本 从今天起,由于EC2上没有任何更改或新安装,脚本在昨天之前一直工作时停止工作。 本地计算机上的相同脚本仍然有效。 相反,在EC2上会出现以下错误: (节点:12636)UnhandledPromiseRejectionWarning:错误:导航失败,因为浏览器已断开连接!在cdpsession.lifecyclewatche

  • 代码: 知道是什么导致了这个问题吗。可能与VPC或安全组有关?并给出了思考和建议。谢了。

  • Peer.JS server.js github链接到项目:链接 新来的赫罗库。任何帮助都将不胜感激!