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

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

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

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

Socket.IO

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

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

Q&A

解決済

2回答

15276閲覧

Node.jsとSocket.IOを使った非同期通信の接続失敗の原因について

Parsley

総合スコア12

Node.js

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

Socket.IO

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

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

0グッド

0クリップ

投稿2016/07/01 11:29

Node.js+Socket.IOを使った非同期通信で、特定のブラウザでWebSocketの接続が正常に行われません。
この症状の原因がブラウザにあるのか、プログラム側にあるのか、またその対処法があればお教え下さい。

###server.js

var http = require('http'); var fs = require("fs"); var server = http.createServer(); var socketio = require("socket.io").listen(server); var counter = 0; server.on("request",function(req,res){ fs.readFile("client.html",function(err,data){ res.writeHead(200); res.end(data); }); }); socketio.sockets.on('connection',function(soc){ soc.on("connect",function(){ counter++; soc.broadcast.emit("count",counter); }); }); server.listen(8888,"localhost");

###client.html

<!DOCTYPE html> <html lang="ja"> <head> <meta charset="UTF-8"> <title>Client</title> <script src="https://cdn.socket.io/socket.io-1.4.5.js"></script> </head> <body> <h1>Client</h1> <p id="p">0</p> <button id="btn">button</button> </body> </html> <script> window.onload = function(){ var socket = io.connect("http://localhost:8888"); var b = document.getElementById("btn"); var pp = document.getElementById("p"); b.addEventListener("click",function(){ socket.emit("connect"); }); socket.on("count",function(data,fn){ pp.textContent = data; }); }//onload </script>

###Internet Explorer
正常に通信が行われます。

###FireFox
コンソールにエラーが表示されます。

ws://localhost:8888/socket.io/?EIO=3&transport=websocket&sid=hdxmjiV8NgdZouiwAAAB のサーバへの接続を確立できませんでした。 socket.io-1.4.5.js:1:27995
ページの読み込み中に ws://localhost:8888/socket.io/?EIO=3&transport=websocket&sid=hdxmjiV8NgdZouiwAAAB への接続が切断されました。 socket.io-1.4.5.js:1:27995
ws://localhost:8888/socket.io/?EIO=3&transport=websocket&sid=sMRwIDADQ9Orc-00AAAC のサーバへの接続を確立できませんでした。 socket.io-1.4.5.js:1:27995
ページの読み込み中に ws://localhost:8888/socket.io/?EIO=3&transport=websocket&sid=sMRwIDADQ9Orc-00AAAC への接続が切断されました。 socket.io-1.4.5.js:1:27995
ws://localhost:8888/socket.io/?EIO=3&transport=websocket&sid=A0XY6-BnSBZcxFNgAAAE のサーバへの接続を確立できませんでした。 socket.io-1.4.5.js:1:27995
ページの読み込み中に ws://localhost:8888/socket.io/?EIO=3&transport=websocket&sid=A0XY6-BnSBZcxFNgAAAE への接続が切断されました。 socket.io-1.4.5.js:1:27995
ws://localhost:8888/socket.io/?EIO=3&transport=websocket&sid=bno2MKqkPS18ty4vAAAH のサーバへの接続を確立できませんでした。 socket.io-1.4.5.js:1:27995
ページの読み込み中に ws://localhost:8888/socket.io/?EIO=3&transport=websocket&sid=bno2MKqkPS18ty4vAAAH への接続が切断されました。

###Chrome
コンソールにエラーが表示されます。

WebSocket connection to 'ws://localhost:8888/socket.io/?EIO=3&transport=websocket&sid=PBfRLQNEhUC3aptcAAAV' failed: WebSocket is closed before the connection is established.
socket.io-1.4.5.js:1 WebSocket connection to 'ws://localhost:8888/socket.io/?EIO=3&transport=websocket&sid=Jev3Co4eq1YYkIthAAAY' failed: WebSocket is closed before the connection is established.
socket.io-1.4.5.js:1 WebSocket connection to 'ws://localhost:8888/socket.io/?EIO=3&transport=websocket&sid=vomMJHHW0xc5qo8NAAAZ' failed: WebSocket is closed before the connection is established.
socket.io-1.4.5.js:1 WebSocket connection to 'ws://localhost:8888/socket.io/?EIO=3&transport=websocket&sid=72iLJJ0JUsAg-BDLAAAb' failed: WebSocket is closed before the connection is established.
socket.io-1.4.5.js:1 WebSocket connection to 'ws://localhost:8888/socket.io/?EIO=3&transport=websocket&sid=CzrSdXhQITaPjlZ7AAAd' failed: WebSocket is closed before the connection is established.
socket.io-1.4.5.js:1 WebSocket connection to 'ws://localhost:8888/socket.io/?EIO=3&transport=websocket&sid=blzWRyXwEIOmvpG9AAAf' failed: WebSocket is closed before the connection is established.
socket.io-1.4.5.js:1 WebSocket connection to 'ws://localhost:8888/socket.io/?EIO=3&transport=websocket&sid=lkX1J5YyKb0Lx88CAAAi' failed: WebSocket is closed before the connection is established.
socket.io-1.4.5.js:1 WebSocket connection to 'ws://localhost:8888/socket.io/?EIO=3&transport=websocket&sid=dB7OfgCOHGYjpf_8AAAk' failed: WebSocket is closed before the connection is established.
socket.io-1.4.5.js:1 WebSocket connection to 'ws://localhost:8888/socket.io/?EIO=3&transport=websocket&sid=aH58ADxVKOBWu5e-AAAl' failed: WebSocket is closed before the connection is established.

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

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

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

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

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

guest

回答2

0

ベストアンサー

javascript

1var server = http.createServer(); 2//var socketio = require("socket.io").listen(server);この時点ではイベントリスナの登録が完了していないhttpServerオブジェクトを設定しているので 3var counter = 0; 4 5server.on("request",function(req,res){ 6 fs.readFile("client.html",function(err,data){ 7 res.writeHead(200); 8 res.end(data); 9 }); 10}); 11 12var socketio = require("socket.io").listen(server);//httpServerオブジェクトのイベントリスナの登録が完了したあとに設定する 13 14socketio.sockets.on('connection',function(soc){ 15 soc.on("connect",function(){ 16 counter++; 17 soc.broadcast.emit("count",counter); 18 }); 19});

よく見かける

javascript

1var server = require('http').createServer(handler); 2var io = require('socket.io')listen(server); 3 4function handler(req,res){ 5//処理 6} 7 8server.listen(port,hostname);

は関数の巻き上げを利用している(利用している?)

投稿2016/08/25 16:45

Probationer

総合スコア16

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

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

0

Node.jsを起動しているサーバーの
ipアドレスを確認してServer.jsに次のように
記述してみて下さい。

サーバーのipアドレスは ip a のコマンドで確認できます。

var http = require('http');
var fs = require("fs");

var LISTEN_IP = 'xxx.xxx.xx.xx'; ⇦ (実際はipアドレスが入る)
var LISTEN_PORT = 8888;

var server = http.createServer();
var socketio = require("socket.io").listen(server);

var counter = 0;

server.on("request",function(req,res){
fs.readFile("client.html",function(err,data){
res.writeHead(200);
res.end(data);
});
});

socketio.sockets.on('connection',function(soc){
soc.on("connect",function(){
counter++;
soc.broadcast.emit("count",counter);
});
});

server.listen(LISTEN_PORT, LISTEN_IP);

このように記述してみて下さい。

投稿2016/07/27 09:15

Susanoo2442

総合スコア153

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問