PHP WebSocketでコーディングされたMySQLデータベースに接続されたlocalhostからチャットアプリを実行しようとしたので、成功しました。
また、SSH資格情報にログインしてPuTTY端末から実行しようとすると、サーバーがポート番号8080で起動したと表示されていました。
ubuntu@ec3-193-123-96:/home/admin/web/ec3-193-123-96.eu-central-1.compute.amazonaws.com/public_html/application/libraries/server$ php websocket_server.php
PHP Fatal error: Uncaught React\Socket\ConnectionException: Could not bind to tcp://0.0.0.0:8080: Address already in use in /home/admin/web/ec3-193-123-96.eu-central-1.compute.amazonaws.com/public_html/application/libraries/vendor/react/socket/src/Server.php:29
Stack trace:
#0 /home/admin/web/ec3-193-123-96.eu-central-1.compute.amazonaws.com/public_html/application/libraries/vendor/cboden/ratchet/src/Ratchet/Server/IoServer.php(70): React\Socket\Server->listen(8080, '0.0.0.0')
#1 /home/admin/web/ec3-193-123-96.eu-central-1.compute.amazonaws.com/public_html/application/libraries/server/websocket_server.php(121): Ratchet\Server\IoServer::factory(Object(Ratchet\Http\HttpServer), 8080)
#2 {main}
thrown in /home/admin/web/ec3-193-123-96.eu-central-1.compute.amazonaws.com/public_html/application/libraries/vendor/react/socket/src/Server.php on line 29
ubuntu@ec3-193-123-96:/home/admin/web/ec3-193-123-96.eu-central-1.compute.amazonaws.com/public_html/application/libraries/server$
そのため、ポート#8080をポート#8282に変更しようとしましたが、成功しました
ubuntu@ec3-193-123-96:/home/admin/web/ec3-193-123-96.eu-central-1.compute.amazonaws.com/public_html/application/libraries/server$ php websocket_server.php
シェルスクリプトを実行したまま、いくつかのWebブラウザーウィンドウを開き、JavaScriptコンソールまたは次のJavaScriptのページを開きます。
var conn = new WebSocket('ws://0.0.0.0:8282');
conn.onopen = function(e) {
console.log("Connection established!");
};
conn.onmessage = function(e) {
console.log(e.data);
};
ブラウザコンソールの結果から:
「ws://5.160.195.94:8282 /」へのWebSocket接続に失敗しました:接続の確立中にエラーが発生しました:net :: ERR_CONNECTION_TIMED_OUT
私はパブリックIPとプライベートIPを割り当てようとしましたが、同じ古い結果になりましたか?
WebSocketから、特にホストされているサーバーから http://ec3-193-123-96.eu-central-1.compute.amazonawsのようなドメイン名のサーバーから接続して、解決/克服するとどうしたらよいでしょうか。 .com /
var conn = new WebSocket('ws://localhost:8383');
AWS EC2インスタンスで独自のサービスを実行するために、仮想サーバーをどのように設定する必要がありますか?
更新:
セキュリティグループから
インスタンスに関連付けられているEC2Security Groupがすべてのポート8282、8383などへのアクセスを許可していることを確認します。
また、JSコードが接続しようとするIPまたはホスト名は何ですか? EC2インスタンスのパブリック/エラスティックIPですか?そのはず。他には何も機能しません。
通常、JSコードは、Webページを提供したのと同じサーバーを呼び出します。つまり、URLが https://www.example.com/ の場合、JavaScripsはws:// wwwに接続します。 .example.com:8282 /-ホスト名をハードコーディングせず、代わりにURLで使用されていたものを使用します。これは、IPアドレス、正規名、またはec2-12-34-56-78.eu-west-2 ...アドレスのいずれかであり、ユーザーが入力した内容に関係なくすべて機能します。
それが役に立てば幸い:)