質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Node.js

Node.jsとはGoogleのV8 JavaScriptエンジンを使用しているサーバーサイドのイベント駆動型プログラムです。

Socket.IO

Socket.IOはNode.js上で動くライブラリであり、すべてのブラウザとモバイルデバイスでリアルタイムのアプリを作動させる事を目的としています。

CakePHP

CakePHPは、PHPで書かれたWebアプリケーション開発用のフレームワークです。 Ruby on Railsの考え方を多く取り入れており、Railsの高速性とPHPの機動性を兼ね備えています。 MVCやORMなどを「規約優先の考え方」で利用するため、コードを書く手間を省くことができます。 外部のライブラリに依存しないので、単体での利用が可能です。

Q&A

解決済

1回答

2673閲覧

Node.jsで受け取っているポートへ、CakePHPを介して同ドメインから接続

HiruLow

総合スコア55

Node.js

Node.jsとはGoogleのV8 JavaScriptエンジンを使用しているサーバーサイドのイベント駆動型プログラムです。

Socket.IO

Socket.IOはNode.js上で動くライブラリであり、すべてのブラウザとモバイルデバイスでリアルタイムのアプリを作動させる事を目的としています。

CakePHP

CakePHPは、PHPで書かれたWebアプリケーション開発用のフレームワークです。 Ruby on Railsの考え方を多く取り入れており、Railsの高速性とPHPの機動性を兼ね備えています。 MVCやORMなどを「規約優先の考え方」で利用するため、コードを書く手間を省くことができます。 外部のライブラリに依存しないので、単体での利用が可能です。

0グッド

2クリップ

投稿2018/04/20 16:43

タイトルのままなのですが、NodeJSでsocket.ioを使ってチャット接続用ポートを作っています。

そのアドレスに接続しようとしたらCakePHPのroutesにより「Socket.ioコントローラ」を参照しようとしてしまいます。

接続URL
http://111.111.11.11/socket.io/

エラー文

Missing Controller Cake\Routing\Exception\MissingControllerException Documentation API Error: Controller could not be found. In the case you tried to access a plugin controller make sure you added it to your composer file or you use the autoload option for the plugin. Error: Create the class Controller below in file: src/Controller/Socket.io.php

同じドメイン下でソケットにそのまま接続をさせるにはどうすればいいのでしょうか?

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

CakePHPのroutesにより「Socket.ioコントローラ」を参照しようとしてしまいます。

CakePHPのroutesに入ってしまう前にパケットをSocket.ioに流すように調整すれば可能です。
PHPは単独で動作することが出来ず、Apacheのモジュール等として動作するからです。

しかし、Webサーバは基本的に80/TCPポートで待つべきであり、
これはApache+CakePHPが占拠している形になっています。

同じドメイン下でソケットにそのまま接続をさせるにはどうすればいいのでしょうか?

リバースプロキシを使いましょう。
例えばApache+CakePHPはそのまま80番ポート、Node.jsのSocket.ioサーバは8080番で待ち受けるようにしておいて、
特定のURLのリクエストが来たらSocket.ioサーバである8080番ポートに受け流すという事が可能です。

「apache 2.2 リバースプロキシ」等のワードでぐぐって頑張ってみてください。

ただ…私も調べましたが、
Apacheはあまりリバースプロキシサーバとして用いられませんので、
あまりパッとした情報が出てきませんでした。
Apacheだけでリバプロをやるには完成まで色々と壁があって何度も失敗しそうですね。

Nginxはこの用途でも非常に多く使われています。
こちらのソフトを使えば情報が沢山転がっているので比較的簡単に実装完了まで持っていけるでしょう。
下記のように組んでしまってNginx宛てのURL文字列で特定のものだけ4000番、他は3000番に受け流すというような設計が良いでしょう。

  • 80/tcp: Nginx
  • 3000/tcp: Apache + CakePHP
  • 4000/tcp: Node.js (Socket.io)

投稿2018/04/21 01:11

編集2018/04/21 12:14
miyabi-sun

総合スコア21158

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

HiruLow

2018/04/21 21:58

とても参考になりました。Nginxで調べてみると有効な資料が見つかった気がします、さっそく試してみようと思います。ありがとうございました!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問