2

私の目標: 2 つの Web ブラウザー間でアンチイング (イベント、文字列、関数呼び出し) を送信する node.js サーバーとクライアント アプリケーションを作成します。

シンプルなサーバーをインストールして作成しましたが、クライアントの作成から問題が発生します。http://socket.io/で述べたように、コマンドでインストールしました:

npm install socket.io

しかし、基本的な例で必要なファイル:

<script src="/socket.io/socket.io.js"></script>

ダウンロードまたはインストールされていません。にそのような名前のファイルがあります/node_modules/socket.id/libが、同じファイルですか? これはsocket.ioクライアントだと思いますが、サーバー用のモジュールであり、Webブラウザのjavascript用ではありませんよね?

socket.io.jsio/socket/require is not defined などのエラーなしで、それを機能させて node.js サーバーに接続する方法を教えてください。

通常の http リクエストに応答する Web サーバーを作成したくありません。接続を保持し、2 つのブラウザーで JS スクリプト間で通信できるサーバーが必要です

世界中の誰もが可能なすべてのディレクトリにsocket.io.jsファイルを持っているような形で誰もがnode.jsについて書いていることに、私はただ耐えることができます。可能な重複:

socket.io.js が見つかりません

require()クリーンな JavaScript API にはない関数呼び出しで開始します。だから私はこのソリューションを試していません。io.* を適切に含めて定義する方法を誰か説明できますか? それはExpressフレームワークに関するものですか?node.js と socket.id ページが明示的な要件について何も述べていないのはなぜですか?

問題は、CLIENT js ライブラリが必要であり、「サーバー上のクライアント」という意味ではなく、ノード バイナリ サーバーが他のページ/サーバーに接続して通信できることです。HTMLクライアントページのクライアントを意味します。また、必要に応じて、その他の関連する JS。

http://serv1.aelag.com:8084/のデモから例を取得しました

/** Socket.IO 0.6.2 - Built with build.js */
/**
 * Socket.IO client
 * 
 * @author Guillermo Rauch <guillermo@learnboost.com>
 * @license The MIT license.
 * @copyright Copyright (c) 2010 LearnBoost <dev@learnboost.com>
 */

this.io = {
    version: '0.6.2',
...

そのファイルを通常の方法で取得し、他のサーバー (おそらく不安定または古いバージョン) から盗まない方法は? そして、私はそのファイルを正確に必要としています。依存関係はありますか? 「build.js」でビルドして作成する必要がありますか、それとも開発者が作成しましたか?

4

3 に答える 3

3

私は最終的にこれを解決しました

socket.io スクリプトはフラット ファイルとして存在しません。node.js サーバーによって生成され、ブラウザーに提供されます。そう。それを含める:

<script src="/socket.io/socket.io.js"></script>

node.js サーバーが、Web アプリケーションを使用する Web サーバーと同じポートで開始されている場合にのみ機能します。たとえばポート 80 で apache からこのスクリプトをロードしようとする場合、node.js サーバーのリッスン ホストへのパス全体を配置する必要があります。

<script src="http://localhost:8080/socket.io/socket.io.js"></script>

于 2012-08-03T13:54:58.247 に答える
2

/socket.io/socket.io.jsどこでも追加する必要があります。アプリケーションを介して socket.io をインストールした場合はnpm install socket.io、その処理方法を知っています。私は数ヶ月前に自分でsocket.ioをいじりましたが、これは私が思いついた非常に単純な「チャット」で、うまくいきました。だから、それはあなたを助けるかもしれません!(私はExpressJSを使用しています。非常に役立つNode.JSフレームワークです)

これはあなたのサーバー側アプリケーションです:

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

app.listen(3000);

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

io.sockets.on('connection', function (socket) {
    socket.on('news', function (data) {
        socket.emit('news', { content: data.text });
        socket.broadcast.emit('news', { content: data.text});
    });
});

これはあなたのindex.htmlです

<!DOCTYPE html>
<html>
<head>
<title>socket test</title>
</head>
<body>
<input type="text" id="Username"> <input type="text" id="Content"><input type="button" value="send" onclick="sendMessage()"><br />
<script src="/socket.io/socket.io.js"></script>
<script>
  var socket = io.connect('http://localhost:3000/pathtoproject');
  socket.on('news', function (data) {
    document.body.innerHTML += data.content + "<br />";
  });
  function sendMessage() {
      socket.emit('news', { text: document.getElementById('Username').value + ": " + document.getElementById('Content').value });
  }
</script>
</body>
</html>
于 2012-08-03T12:24:56.847 に答える
0

次のように、クライアント側に socket.io をロードすることができました。

jQuery.getScript("bower_components/socket.io/lib/socket.js", function() {
   var socket = io.connect('http://localhost');
   socket.on('news', function (data) {
     console.log(data);
     socket.emit('my other event', { my: 'data' });
   });
});
于 2014-05-24T16:41:24.193 に答える