2012-02-25 2 views
16

実行するために非常に基本的なsocket.ioサンプルを取得することにも問題があります。基本的なsocket.ioサンプルを取得する

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

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

とクライアント側の

<script src="/socket.io/socket.io.js"></script> 
<script> 
    var socket = io.connect('http://localhost'); 
    socket.on('news', function (data) { 
    console.log(data); 
    socket.emit('my other event', { my: 'data' }); 
    }); 
</script> 

:例自分のサイトのウェルカムページ上の最初の例。私は host.jsファイル内のサーバー側を保存し、クライアント側 client.htmファイルで、私は npm host.jsを実行する場合、私はすでに本当に期待されていない

info - socket.io started 
    warn - error raised: Error: listen EADDRINUSE 

を取得します。それで、client.htm(または少なくとも私がそれと関係があると思っているのは、それをclient.htmファイルに貼り付ける)のために、私は空白の画面しか得られません。あまり驚くべきことではありませんが、それは存在しないファイル/socket.io/socket.io.jsを含むことから始まりますが、これをhost.jsに変更しても、私は空白の画面しか得られないという事実は変わりません...

私は無知だ。

答えて

16

EADDRINUSEは、アドレスが既に使用中であるため、ソケットを取得できないことを意味します。あなたのマシン上のポート80で既に何かが実行されていますか? 80は、Webサーバーで一般的に使用されます。

他のポートで試すこともできます。

空白のファイルが表示される理由は、ノード・サーバーに接続しない(ソケットを取得できなかったため)オン・ニュース・イベントは決して呼び出されません。サーバーを実行したときに、それもあなたがポートの競合を解決した後、そのイベント:)

を発することはありません80上で実行されている任意の他のソケットに接続しているかもしれないが、それは言うだけする必要があります

info - socket.io started

これで接続を待っています。

htm行を自分のポートに更新してください。例えば、81の場合:

var socket = io.connect('http://localhost:81'); // note the :81 

EDIT: 私はちょうどそれを試してみたとHTMファイルに私はsocket.io.jsファイルへの相対パスを設定する必要がありました。それはnpm経由でインストールした後、私のディレクトリにありました。

<script src="node_modules/socket.io/node_modules/socket.io-client/dist/socket.io.js"></script> 

(/で始まらない)そのパスがHTMファイルへの相対であることを確認してください。ここでは鉱山があった場所、私が見つけた方法は次のとおりです。勝利に

find . -name 'socket.io.js' 

: DIR socket.ioを。JS /秒

また、(* nixの上であなたが前にsudoを必要とする場合があります)でホストを実行する必要があります。

node host.js 

サンプルをしようとしたときに、私がした最後のものは、HTMファイルに数行を変更しましたイベントが発生したときに警告メッセージボックスが表示されることがありました。

socket.on('news', function (data) { 
    alert(JSON.stringify(data)); 
+1

どのポートに関係しますか?私は81を試しましたが、今度はホスト側を走らせるとハングアップします。つまり 'info-socket.io started 'と表示されますが、コマンドラインには戻りません。 .htmページはまだ空白なので、これは問題を解決していないようです。 – user1111929

+3

最初の問題だったEADDRINUSEエラーを解決しました。はい、それは重要です。また、サーバが通信を待っているため、ハングしていません。だから、あなたは問題のサーバー側の半分を解決しました。 – bryanmac

+0

問題のクライアント側では、htmページをhttp:// localhost:81(81ではない)に接続するように更新しましたか? – bryanmac