Apache + Node.js + Socket.IO 環境による動作でSocketエラーが発生
Apache + Node.js + Socket.IO 環境による動作でSocketエラーが発生
先日からNode.jsを触りだし、チャット機能を実装したサーバを立てた所、下記事象が発生致しました。
80番ポートでApacheを起動させているローカルサーバーに下記のリバースプロキシを設定し、Node.jsサーバーへ接続しております。
httpd.conf
< Location /server>
ProxyPass http://127.0.0.1:8124
ProxyPassReverse http://127.0.0.1:8124/
< /Location>
「(hogehoge.com[ドメイン])/server」以下にアクセスした場合、Node.jsで立てたサーバーへアクセスしております
Node.js - app.js
var http = require("http");
var socketio = require("socket.io");
var fs = require("fs");
var server = http.createServer(function(req, res) {
res.writeHead(200, {"Content-Type":"text/html"});
var output = fs.readFileSync("./index.html", "utf-8");
res.end(output);
}).listen(process.env.VMC_APP_PORT || 8124);
var io = socketio.listen(server);
io.sockets.on("connection", function (socket) {
console.log("Connection");
// メッセージ送信(送信者にも送られる)
socket.on("C_to_S_message", function (data) {
console.log("Sender Send");
io.sockets.emit("S_to_C_message", {value:data.value});
});
// ブロードキャスト(送信者以外の全員に送信)
socket.on("C_to_S_broadcast", function (data) {
console.log("BloadCast Send");
socket.broadcast.emit("S_to_C_message", {value:data.value});
});
// 切断したときに送信
socket.on("disconnect", function () {
// io.sockets.emit("S_to_C_message", {value:"user disconnected"});
});
});
Node.js - index.html
<!DOCTYPE HTML>
<html>
<head>
<meta charset="UTF-8">
<title>node.js chat</title>
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.5.1/jquery.min.js"></script>
<script src="http://nodejs.lo/server/socket.io/socket.io.js"></script>
<script type="text/javascript">
var s = io.connect('http://nodejs.lo/server'); //ローカル
//サーバから受け取るイベント
s.on("connect", function () {
console.log("Connect OK");
}); // 接続時
s.on("disconnect", function (client) {
console.log("Close OK");
}); // 切断時
s.on("S_to_C_message", function (data) {
addMessage(data.value);
});
//クライアントからイベント送信(イベント名は自由に設定できます)
function sendMessage() {
var msg = $("#message").val(); //取得
$("#message").val(""); //空白にする
s.emit("C_to_S_message", {value:msg}); //サーバへ送信
}
function sendBroadcast() {
var msg = $("#message").val(); //取得
$("#message").val(""); //空白にする
s.emit("C_to_S_broadcast", {value:msg}); // サーバへ送信
}
//jqueryでメッセージを追加
function addMessage (value,color,size) {
var msg = value.replace( /[!@$%<>'"&|]/g, '' ); //タグ記号とかいくつか削除
$("#msg_list").prepend("<div class='msg'>" + msg + "</div>");
}
</script>
<style>
*{
font-size:30px;
margin:0;
padding:0;
}
</style>
</head>
<body>
<div id="msg_list" style="height:300px; overflow:auto;"></div>
<form action="" method="post" onsubmit="return false;">
<input type="text" class="text" style="width:95%; padding:10px" id="message"/>
<input type="submit" class="button" style="padding:10px" onclick="sendMessage();" value="みんなに送信" />
<input type="submit" class="button" style="padding:10px" onclick="sendBroadcast();" value="自分以外に送信" />
</form>
</div>
</body>
</html>
ブラウザのコンソールに出力されているエラー
GET ttp://nodejs.lo/socket.io/?EIO=3&transport=polling&t=1426313600982-0 404 (Not Found)
content.scripts.c.js:11 TableManager::findTables()
socket.io.js:2919 GET ttp://nodejs.lo/socket.io/?EIO=3&transport=polling&t=1426313602201-1 404 (Not Found)
socket.io.js:2919 GET ttp://nodejs.lo/socket.io/?EIO=3&transport=polling&t=1426313604016-2 404 (Not Found)
socket.io.js:2919 GET ttp://nodejs.lo/socket.io/?EIO=3&transport=polling&t=1426313607637-3 404 (Not Found)
socket.io.js:2919 GET ttp://nodejs.lo/socket.io/?EIO=3&transport=polling&t=1426313612676-4 404 (Not Found)
socket.io.jsのリクエスト先が「/server」以下になっていない為、エラーが出力されていると考えておりますが、socket.io.jsのリクエスト先を調整できる箇所を発見できませんでした。
上記のエラーおよび設定方法に関して心当たりがある方、恐れ入りますがご教示をお願いいたします。