2012-03-29 15 views
0

私はsocket.ioで作業していますが、私はすべてのメッセージをサーバーから送信して受信するというユニークなページを持つことに苦労しています。複数の一意のクライアントsocket.ioとexpressを使用して

私はほとんどのチュートリアルに従って、サーバーのスクリプトは、このようなもので始まり:

var app = require('express').createServer() 
var io = require('socket.io').listen(app); 
var clients = {}; 

app.listen(8080); 

// routing 
app.get('/', function (req, res) { 
    res.sendfile(__dirname + '/index.html'); 
}); 

と私はローカルホストで私のクライアントアプリケーションをテストすることができます:8080。しかし、私が望むのは、http://localhost:8080/myApp/client1.htmlhttp://localhost:8080/myApp/client2.htmlのようなもので複数のクライアントアプリケーションを動かすことです。私はこれをしようとすると、それはのようなものを返す:

Cannot GET /myApp/client1.html 

私の目標は、ソケットを介して相互にメッセージを送ることができる2つの以上のユニークなページを持つことです。どんな助けでも大歓迎です。私はこれほど長い間、これについて私の頭を叩いています。

答えて

1

私はあまりExpressに精通していませんが、本能はget()がGET HTTPリクエストを参照するためwebsocketではないことを伝えます。私はあなたがExpressを使ってページリクエストのためにHTMLを返すことになっていると思うが、リアルタイムのデータ転送はSocket.ioによって処理されるだろうと思う。私は、再び

var socket = io.connect('http://localhost:8080'); 
socket.on('msg', function (data) { 
    //code to add data.msg somewhere on page 
}); 
somebutton.on('click', function(e){ 
    socket.emit('msg', {msg:$(e.targetElement).value()}); 
}); 

var io = require('socket.io').listen(app); 

io.sockets.on('connection', function (socket) { 
    socket.on('msg', function (data) { 
    io.sockets.emit('msg', {msg: data.msg}); 
    }); 
}); 

クライアント:

app.get('/myApp/client1.html', function(blah){}); 
app.get('/myApp/client2.html', function(blah){}); 

はその後socket.ioが話しを処理します:

だから、あなたは実際のページ要求のためのエクスプレス・リターンを持っているでしょう私は構文が間違っているかもしれないので、Expressを知らないが、私の要点は、あなたは2つのtあなたが別々に扱う必要があるヘリングが進行しています。 1つは実際のHTMLページの返却であり、もう1つはロードされたページ間のリアルタイムデータ通信です。私の例は粗末なものですが、Socket.io Readmeのほうが良い例があります。あなたのファイルのための

+0

ありがとうございました!あなたは私の注意を正しい場所(app.get()の最初のパラメータ)に向けました。それが私の問題を解決するために必要なものです。 – prototyper

+0

Expressを使用する必要がありますか?そうでない場合は、異なるHTMLページ間でソケット通信を可能にするために、Expressコードを置き換えるものは何ですか? – prototyper

+0

ソケット通信だけで明示する必要はありません。私が提供した例は非常に基本的なチャットルームであり、私は主にsocket.ioの例からコピーしました。あなたは、socket.ioのウェブサイトから例をコピーして、少なくとも何かを始めることができます。 –

1

またはダイナミックハンドラを追加します。

app.get('/myApp/:file', function(req, res) { 
    res.sendfile(__dirname+'/'+req.param('file')); 
}); 

または正規表現で少しそれを牛肉:

app.get(/^\/myApp\/(.+)\.html$/, function(req, res) { 
    res.sendfile(__dirname+'/'+req.params[0]); 
}); 
+0

ちょっとBrad。私はあなたの移植を理解しているかどうかはわかりませんが、あなたは私が今扱っている問題にぶつかっていると思います。XHRの答えは私の最初の質問を解決するのに役立ちましたが、ロードするすべてのファイルに対してapp.get()を追加する必要があるように見えます。私はあなたが提案しているものだと思うよりダイナミックなものを好むでしょうが、あなたの提案を働かせることができませんでした。私は、myAppのすべてのファイルをリクエストして、myappから必要なものをロードすることができるように、サーバースクリプト内の各ファイルのリクエストを追加することはできません。 – prototyper

+0

これはまさに動的経路でできることです。あなたがそれをやろうとしたとき、正確には動かなかったのは何ですか?それは単に実装の詳細かもしれません。 –

+0

次のスクリプトでhtmlページが読み込まれるように見えますが、htmlページが参照するファイルには表示されません。 //サーバスクリプト var express = require( 'express'); var app = express.createServer(); var io = require( 'socket.io')。listen(app); app.listen(8080); app.get( '/ myApp /:file'、function(req、res){ res.sendfile(__ dirname + '/' + req.param( 'file')); }); // HTMLページ\t \t //または prototyper

関連する問題