Socket.ioでサーバーをセットアップしようとしていますが、結果は良くありません。
多少古くなっていますが、ほとんどこのガイドに従っています: http://www.williammora.com/2013/03/nodejs-tutorial-building-chatroom-with.html
問題はsocket.ioに付属しています。クライアント側かサーバー側かはわかりません。サーバーを継続的にポーリングしようとしているようですが、404を取り戻しています。 socket.ioが実行されていないように思えますが、すべて問題ないようです。また、パスと何か関係があり、「パブリック」ディレクトリを持っているかもしれませんが、私は本当に知りません。
127.0.0.1 - - [Thu, 17 Jul 2014 00:51:36 GMT] "GET /socket.io/?EIO=2&transport=polling&t=1405558296120-0 HTTP/1.1" 404 73 "http://localhost:8080/" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_3) AppleWebKit/537.76.4 (KHTML, like Gecko) Version/7.0.4 Safari/537.76.4"
127.0.0.1 - - [Thu, 17 Jul 2014 00:51:37 GMT] "GET /socket.io/?EIO=2&transport=polling&t=1405558297181-1 HTTP/1.1" 404 73 "http://localhost:8080/" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_3) AppleWebKit/537.76.4 (KHTML, like Gecko) Version/7.0.4 Safari/537.76.4"
127.0.0.1 - - [Thu, 17 Jul 2014 00:51:39 GMT] "GET /socket.io/?EIO=2&transport=polling&t=1405558299207-2 HTTP/1.1" 404 73 "http://localhost:8080/" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_3) AppleWebKit/537.76.4 (KHTML, like Gecko) Version/7.0.4 Safari/537.76.4"
サーバー
var exec = require( "child_process" ).exec;
var path = require( "path" );
var morgan = require( "morgan" );
var bodyParser = require( "body-parser" );
var _ = require( "underscore" );
var express = require( "express" );
var app = express();
var http = require( "http" ).createServer( app );
var io = require( "socket.io" )( http );
app.set( "ipaddr", "127.0.0.1" );
app.set( "port", 8080 );
//support JSON, urlencoded, and multipart requests
app.use( bodyParser() );
//log the requests using morgan
app.use( morgan() );
//specify the Jade views folder
app.set( "views", __dirname + "/../views" );
//set the view engine to Jade
app.set( "view engine", "jade" );
//specify static content
app.use( express[ "static" ]( "public", __dirname + "/../public" ) ); //using map-access of static so jslint won't bitch
io.on( "connection", function( socket )
{
console.log( "A user connected." );
});
クライアント
script( src="js/socket.io.js" )
var socket = io.connect( "http://localhost:8080" );
クライアントjsファイルは、node_modules/socket.io/node_modules/socket.io-client/socket.io.jsから取得しました。
そのパスは、私が使用しているチュートリアルが言っていること、またはsocket.ioが使用するように言っていることのいずれとも一致しないため、おそらくそれが問題かもしれませんが、おそらく正しいファイルのようです。
ここで何か助け?
[〜#〜] edit [〜#〜]追加情報については、ここに私のフォルダ階層があります:
Webserver/
my_modules/
server.js
node_modules/
body-parser/
express/
jade/
morgan/
socket.io/
underscore/
public/
css/
js/
server.js
views/
index.jade
index.js
package.json
My_modulesフォルダー内のserver.jsは、サーバー側でsocket.ioを開始する場所です。 jsフォルダー内のserver.jsは、Webサイトから接続するためのクライアントコードです。
Socket.IOは/socket.io/
で始まるリクエストをインターセプトできないようです。これは、あなたの場合、リスナーがapp
-Expressハンドラーであるためです。 Socket.IOがリクエスト処理にアクセスできるように、http
をリスナーにする必要があります。
交換してみてください
app.set( "ipaddr", "127.0.0.1" );
app.set( "port", 8080 );
と
http.listen(8080, "127.0.0.1");
詳細については、ドキュメントを参照してください: http://socket.io/docs/#using-with-express-3/4
私の場合、 Express application generator でアプリを作成しました。この問題を解決するために、プロジェクトのルートフォルダーにあるapp.jsファイルを編集する代わりに、サーバーが定義された後の行でbin/wwwファイルを編集しました。
/**
* Create HTTP server.
*/
var server = http.createServer(app);
var io = require('socket.io')(server); // Add this here
更新
ここでより良い方法を見つけました Express Generator and Socket.io
サーバーまたはクライアントの問題を確認するために、このWebを使用できます: websocket-echo 、このクライアントがサーバーに直接接続している場合(最初のフォームクライアントは、サーバーがオンラインの場合、ホスト上にある場合、websocket.orgからの引用に役立ちます...
テキストエディターを使用して、次のコードをコピーし、websocket.htmlとしてハードドライブのどこかに保存します
コード: websocket-test
私が観察できる私のものと異なる唯一のものは、ioクライアントソースです:<script src="/socket.io/socket.io.js"></script>
クライアント側。
サーバーで次の方法を試してください。
var express = require('express'),
app = express(),
http = require('http'),
server = http.createServer(app),
io = require('socket.io').listen(server),
exec = require('child_process').exec,
util = require('util');
//serve our code
app.use(express.static('public'));
app.use(express.json());
app.use(express.urlencoded());
//listening on connections
io.on('connection', function (socket) {
console.log('client connected!');
}
server.listen(8080);
この方法は、この依存関係で正常に機能することに注意してください。package.jsonファイルに以下のコードを追加することをお勧めします。
"dependencies": {
"express": "3.x.x",
"socket.io": "*",
"util": "*"
}
乾杯!