2017-02-17 6 views
-1

に返すドキュメントページで、私はこのように使う必要があると言います。クライアントsocket.ioを変数

io.on('connection', function (socket) { 
    socket.emit('news', { hello: 'world' }); 
    socket.on('my other event', function (data) { 
     console.log(data); 
    }); 
}); 

クライアントに変数を公開する方法はありますか?ヘルプページ

var socket = io.on('connection'); 
socket.emit('news', { hello: 'world' }); 

彼らはServer#onconnection(socket:engine#Socket):Serverクライアントを公開すると言うが、私はそれを使用する方法を見つけ出すことはできません。 doc

このように私は他の機能の中でソケットを使うことができます。

異なるファイルへの道があり、互い

app.jsにイベントを発する:私はもう一つの問題すべてやり直すio.on('connection', function (socket)

がないものをemitingすべての機能上の今

var app = require('express')(); 
var server = require('http').Server(app); 
var io = require('socket.io')(server); 

発するfile1.html

<script src="socket.io/socket.io.js"></script> 
<script> 
    var socket = io('http://localhost'); 

    socket.emit('event15', function(x){ 
    }); 

</script> 

file2.htmlは、あなたが複数のソケット、各クライアントのための1に対処する必要がサーバー上で

<script src="socket.io/socket.io.js"></script> 
<script> 
    var socket = io('http://localhost'); 

    socket.on('event15', function(x){ 
    }); 

</script> 

答えて

0

を受けます。そのため、サーバーでは、接続する新しいクライアントごとにソケットを設定するイベントハンドラを作成します。基本的な考え方は、このされています

サーバー:

io.on('connection', function(socket) { 
    socket.on('chat message', function(msg) { 
    io.emit('chat message', msg); 
    }); 
}); 

あなたのメッセージ処理のすべては、外側の関数で設定することになっています。あなたはしかし、他の場所でソケットを使用する場合は、このようにそれを渡すことができます。

io.on('connection', function(socket) { 
    socket.on('login', function(data) { 
    myServer.attemptLogin(socket, data.user, data.hash); 
    }); 
}); 

attemptLogin(socket, user, hash)機能は今のパラメータを処理することができ、あなたがしたい場合は、socket.emit()

を呼び出すことにより、クライアントに返信変数に各ユーザーのソケットを格納するには、そのためのデータ構造を作成する必要があります。ここに例があります:

var users = {}; // empty object 
io.on('connection', function(socket) { 
    users[socket.id] = socket; // store socket for later use 
    // ... 
}); 

これは、接続されたユーザーが切断後に以前のセッションを何とか再開できる場合にのみ便利です。それ以外の場合は、関数と変数を適切に編成するだけです。

2番目の質問では、1つのHTMLドキュメントから別のドキュメントにデータを送信することはできません。ユーザがfile2.htmlにつながるリンクをクリックするとすぐに、新しいソケットが開かれ、socket.ioはこれがまだ同じユーザであることに気付かないでしょう。限り、socket.ioに関連して、ランダムな男はちょうど世界のどこかでfile2.htmlを開いた。
これには2つの方法があります。ユーザーが実際に別のサイトに移動することはない単一ページのアプリケーションを作成できます。しかし、誤ってタブを閉じたり、戻る、またはページを更新すると、接続が失われます。
もう1つの方法は、何らかの種類のセッション情報を使用することです。ユーザーがログインした場合は、ユーザー名とパスワードハッシュをlocalStorageに保存するだけです。各ページで、格納されている資格情報のlocalStorageを確認し、"login"メッセージをサーバーに送信します。

+0

これはいくつかのことを明確にするのに役立ちましたが、私はユーザーを気にせず、イベントやイベントを送信するだけの "ユーザー"はありません。 サーバ上ではほとんど何も処理されず、クライアント上でのみ処理されます。 それは私がfile1から放射し、file2から反応したい理由です。 –

+0

なぜsocket.ioを使っているのですか? file1の情報をfile2に保存したい場合は、 'localStorage'を使います。 –

+0

私は 'store'とは言いません、私はイベントを送信したと言っていますが、PC1は開いているファイル1(管理ページ)イベントを送信し、PC2はファイル2(フロントエンド)イベントに反応し、その逆は@ chris-g(3番目のPCはサーバー) –

関連する問題