4

まず、問題に関する疑問がすでに解決されていることがわかりました。

PHP Web ソケットがソケットをバインドできない

ソケットサーバーの設定に関する問題

socket_bind(): アドレス [99] をバインドできません (Amazon EC2 上の Ubuntu)

および他の多くのリソースで、問題は使用中のポートまたは外部 IP などであると述べています。

しかし、私はそれを乗り越えることができませんでした。私のサーバーは CentOS 6.3 で実行され、CPanel を使用しています (HP サーバーhttps://www.hpcloud.com/です)。

私が入手した Web ソケットのデモ ソース コードはhttps://code.google.com/p/phpwebsocket/にあります。

私の設定は

$master  = WebSocket("127.0.0.1",4444); // even I tried with localhost, they worked same

私が試したステップと対応するエラーは次のとおりです。

1/. 次のコマンドを試して、使用していたポートが使用できることを確認しました

$ lsof|grep 4444

$ netstat -a -p -n

しかし、このポート4444は空いていますが、常にエラーが発生しました

警告: socket_bind(): アドレス [98] をバインドできません: アドレスは /home/myapp/public_html/websocket/server.php の 60 行目で既に使用されています

2/. 奇妙なことに、使用していたポート 835 を確認したところ、

 crond      1621      root  DEL       REG              252,1               39835 /lib64/libpam.so.0.82.2.#prelink#.B1eyGx

atd        1633      root  DEL       REG              252,1               39835 /lib64/libpam.so.0.82.2.#prelink#.B1eyGx 

面白いことが起こりました:

次に、ターミナル コマンド シェルで server.php を実行しました。

 php /home/myapp/public_html/websocket/server.php

エラーはなくなりました。

サーバー開始: 2013-08-16 03:19:54

マスター ソケット: リソース ID #4

リッスン: 127.0.0.1 ポート 835

動くようになったと思ったら動かなかっserver.php

http://mysite/server.php

エラーは「許可が拒否されました」です

警告: socket_bind() [function.socket-bind]: アドレス [13] をバインドできません: 行 60 の /home/myapp/public_html/websocket/server.php で許可が拒否されました socket_bind() が失敗しました

編集:許可について、server.phpと同じレベルのディレクトリにあるclient.htmlを問題なく開くことができました。フォルダー コードのパーミッションは 755 で、ユーザーは root ではありません。私のコマンドはすべてルート権限で実装されました

どんな助けでも大歓迎です:(

4

1 に答える 1

0

問題は、Websocket サーバーを Web ブラウザーにロードしようとしていることにあると思います。ほとんどの場合、サーバーが一般的でないポートでリッスンすることを許可しない apache ユーザーのセキュリティ設定があります。

CentOS は通常、デフォルトで SELinux が有効になった状態で出荷されます。CentOS Linux の Apache に対するセキュリティ ポリシーの一部は、デフォルトで、Apache は HTTP に関連付けられた認識済みのポート (ポート 80、8080 など) へのサービス アクセスのみを許可することです。

SELinux を有効にすると、「semanage」コマンドを使用して SELinux 内で許可するルールを追加することで、Apache が tcp ポート 4444 でリッスンできるようになります。

~$ semanage port -a -t http_port_t -p tcp 4444 
于 2013-09-10T03:13:10.910 に答える