

PCのブラウザとサーバ上とでSocket通信をしようと思っています。環境は以下の通りです。

Ubuntu 14.04  
apache2 2.4.7

ブラウザでページを開くとサーバに接続してメッセージ「hello」を送るプログラムです。なぜかNode.jsのログを確認しても、ブラウザのログを確認しても接続したログがありません。

Node.js（サーバ側) msg.js

[code]

        var fs = require("fs");
        var http = require("http");
        var server = http.createServer(function(req,res) {
                res.writeHead(200, {"Contents-Type":"text/html"});
                var output = fs.readFileSync("./index.html", "utf-8");
                res.end(output);
    });
    
    // socketioの準備
    var io = require('socket.io')(server);
    
    // クライアント接続時の処理
    io.on('connection', function(socket) {
        var id = socket.id;
        console.log("client connected!!");
        console.log(id)
    
        // クライアント切断時の処理
        socket.on('disconnect', function() {
            console.log("client disconnected!!")
        });
        // クライアントからの受信を受ける (socket.on)
        socket.on("from_client", function(obj){
            io.emit("from_server", obj);
            console.log(obj)
        });
    });
    
    server.listen(3000);
    
[/code]

PCブラウザ(クライアント)側のindex.html

[code]

    <meta charset="UTF-8">
    <html>
    <head>
    </head>
      <body>
    <script src="http://www.ubuntu.jp/node/socket.io/socket.io.js"></script>
    <script>
    var socket = io.connect('ws://www.ubuntu.jp',{path:'/node/'});
    
    socket.on('connect', function() {
            console.log('connected');
            socket.emit('from_client', 'from PC browser');
            socket.on('from_server', function(msg) {
                    console.log(msg);
            });
    });
    </script>
    </body>
    </html>
    
[/code]

apacheでwsプロトコルをReverse Proxyしています。apacheの設定としては以下の通りです。

[code]

    <VirtualHost *:80>
        ServerAdmin webmaster@localhost
        ServerName ubuntu.jp
        ServerAlias www.ubuntu.jp
        DocumentRoot /var/ubuntu
        Options FollowSymLinks MultiViews ExecCGI
        DirectoryIndex index.html index.php
    
        Alias /node /var/ubuntu/node
    
          ProxyPass /node/ http://localhost:3000/
          ProxyPass /node/ ws://localhost:3000/
          ProxyPassReverse /node/ http://localhost:3000/
          ProxyPassReverse /node/ ws://localhost:3000/
    
        ErrorLog ${APACHE_LOG_DIR}/ubuntu_error.log
    
        # Possible values include: debug, info, notice, warn, error, crit,
        # alert, emerg.
        LogLevel warn
    
        CustomLog ${APACHE_LOG_DIR}/ubuntu_access.log combined
        ServerSignature Off
    
        <Directory "/var/ubuntu/">
            Require all granted
        </Directory>
    </VirtualHost>
    
[/code]

ブラウザで  
<http://www.ubuntu.jp/node/>  
にアクセスしました。Firefoxで確認しましたが、consoleログに

> SyntaxErr‌​or: expected expression, got '<'( socket.io.js:1:0)

という表示で、socket.io.jsからエラーが出ています。

原因および対処方法をご存知の方はご教授お願いします。


CC BY-SA 3.0
2015-08-18T15:40:50.233
14601
2015-08-31T16:30:20.037
2015-08-31T16:30:20.037
5519
8593
question
node.js socket.io
PCブラウザからNode.jsのプログラムにSokect.ioで接続できません。


現在のコードだと以下のように`res.write("Hello World!!");`となっているので、ブラウザでサーバにアクセスすると常に"Hello
World!!"というテキストを返す状態になっており、「PCブラウザ(クライアント)側のhtml」の内容がブラウザに表示されません。

[code]

    var http = require("http");
    var server = http.createServer(function(req,res) {
        res.write("Hello World!!");
        res.end();
    });
    
[/code]

ということで、 **msg.js**
の先頭を以下のように修正して、ブラウザでサーバにアクセスした際に、「PCブラウザ(クライアント)側のhtml」の内容を返すようにする必要があると思います（以下コードは「PCブラウザ(クライアント)側のhtml」が
**index.html** という名称と仮定しています）。

[code]

    var fs = require("fs");
    var http = require("http");
    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);
    });
    
[/code]

**参考記事**

  * [[node] Socket.IOを使ったチャットアプリ。インストールから実装まで。](http://www.yoheim.net/blog.php?q=20120408)


CC BY-SA 3.0
2015-08-19T12:46:58.923
14627
2015-08-19T12:52:33.840
2015-08-19T12:52:33.840
33
33
14601
answer