5

Websocket サーバーをデプロイして実行を開始しようとしましたが、常に次のようになります。

PHP Fatal error:
Uncaught exception 'React\Socket\ConnectionException'
with message       'Could not bind to tcp://my_ip_here:8080:
                    Address already in use'
in                 /var/www/html/webscoket/vendor/react/socket/src/Server.php:29

これが私のものserver.phpです:

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

use Ratchet\Server\IoServer;
use Ratchet\Http\HttpServer;
use Ratchet\WebSocket\WsServer;
use React\Socket\Server;
use React\ZMQ\Context;

$loop   = React\EventLoop\Factory::create();
$app    = new onyxsocket();
$webSock = new Server($loop);
$webSock->listen(8080, 'my_ip_here');
$webServer = new IoServer(
    new HttpServer(
        new WsServer(
            $app
        )
    ),
    $webSock
);

$context = new Context($loop);
$pull = $context->getSocket(ZMQ::SOCKET_PULL);
$pull->bind('tcp://my_ip_here:5555');
$pull->on('error', function ($e) {
    var_dump($e->getMessage());
});
$pull->on('message', array($app, 'onbroadcast'));
$loop->run();

これまでに試したことは、運用サーバーで使用できる利用可能なポートを確認することです。netstat - anpポート8080が空いていることがわかりました。しかし、問題は、アドレスが既に使用されているというエラーが表示されることです。管理者から提供された他のポートも試しましたが、うまくいきませんでした。

server.phpデプロイしようとしている は、ローカルホストで正常に動作しています。しかし、本番サーバーで動作させるために何をする必要があるのか​​ わかりません。

助けが必要。ありがとう。

4

1 に答える 1

5

上記の@ user3666197コメントから:

コードを明確にしてください。サーバー コード ZeroMQ .bind() -s をポート番号 5555 に設定します。では、上記の未処理の例外で報告されている localhost ポート番号 8080 にバインドするコードは誰ですか? クラッシュした EventLoop/Factory をグレースフル終了してリソースを解放し、孤児のハングを回避するにはどうすればよいですか?

netstat: を再netstat -tulpenチェックして、ポート 8080 と 5555 をチェックし、現在接続しているポートに PID が登録されていることを確認することにしました。これらのアプリケーションは、コンソールで実行したい同じスクリプトでもありましたserver.php

PID:を強制終了し、コンソールで再度kill PID_number実行します。server.php出来た。

于 2014-09-17T11:36:11.407 に答える