10

socket.io を Hapi.js サーバーにフックしようとしています。バニラ Node.js で socket.io 実装をテストしましたが、すべてうまくいきました。Hapi 実装のサーバー側は正常に動作しているように見えますが、「/socket.io/socket.io.js」リソースはクライアントに提供されません。

私はHapiの例をチェックしましたが、サーバー上で何をすべきかを示しているだけで、クライアントハンドシェイクに関するドキュメントは奇妙に思えます.ポート8000​​にサーバーがありますが、socket.ioハンドシェイクを8080に投稿するように言っています--私はこれを試してみましたが(これは不安定で、他のすべての socket.io 実装と矛盾しているようです)、運がありませんでした。

ありがとう!

4

4 に答える 4

3

回答: CDN からクライアント スクリプトを読み込む

特定の質問に答えるために:アプリの読み込みを高速化するために、CDN (例: http://cdnjs.com/libraries/socket.iosocket.io.js ) からスクリプトを読み込むことにしました。参照: index.html#L23

オフラインで作業中...? (または、CDN を使用しない方がよいですか? )

ダイヤルアップまたはオフラインで作業しているため、CDN からクライアント スクリプトを読み込むことができない場合は、inertを使用してファイルをアプリに公開します。例えば:

var Hapi = require('hapi');
var server = new Hapi.Server();

server.connection({
    host: '0.0.0.0',
    port: Number(process.env.PORT || 3000)
});
// uses https://github.com/hapijs/inert to serve static files
server.register(require('inert'), function () {

    server.route([
      { method: 'GET', path: '/', handler: { file: "index.html" } },
      { method: 'GET', path: '/socket.io.js', handler: { file: './node_modules/socket.io-client/socket.io.js' }
    ]);

    server.start(function () {
      console.log('Visit: http://127.0.0.1:'+server.info.port);
    });

});
module.exports = server;

クライアント ファイルは、your_project/ node_modules/socket.io-client/socket.io.js にあります。

最新のソリューション/エンド ツー エンド テストの例

Hapi.js アプリSocket.io を使用する方法のを引き続き探している場合は、完全なものを作成しました (ドキュメント/コメントとエンドツーエンドのテストを含む)。

参照: https://github.com/dwyl/hapi-socketio-redis-chat-example

ビルド ステータス codecov.io によるテスト カバレッジ コードの気候 依存状態 devDependency ステータス Hapi と Socket.io の最新バージョンに対応し、Redis Pub-Sub を使用してチャット メッセージを永続化および配布します。

于 2015-11-23T17:06:57.363 に答える
3

Hapi 8 はいくつかの新しい複雑さを導入したので、誰かがこの問題を再検討する場合...

クライアントでは、を使用する必要は/socket.io/socket.io.jsなく、代わりに使用します

  1. CDN ( https://cdnjs.cloudflare.com/ajax/libs/socket.io/0.9.16/socket.io.min.js)
  2. またはより具体的にファイルを提供する ( http://yoursite.io/js/socket.io/socket.io.js)
  3. さらに良いことに、 npm/browserify や ( https://www.npmjs.com/package/socket.io-client )のようなものを使用します。

    var socket = require('socket.io-client')('http://localhost:8080');

上記のクライアント側コードを含めるために選択した方法

Hapi 8 では、次のようなチャットを使用して、サーバー上でクールなことを行うことができます。

サーバー.js

server.connection({ port: 8000, labels: 'app' });
server.connection({ port: 8080, labels: 'chat' });
server.register({
    register: require('./server/plugins/socketIO')
}, 
function(err) {
    if (err) throw err;
});

/plugins/socketIO/index.js

exports.register = function(server, options, next) {
    var io = require('socket.io').listen(server.select('chat').listener,{log:false});
    io.sockets.on('connection', function (socket) {
        socket.on('someAction', function(name, cb) {
           ...
        });
        ...     
   });
}
于 2014-12-25T01:39:32.770 に答える
0

socket.io.js ファイルを node.js ディレクトリから既知のディレクトリにコピーしてみることができます。

于 2013-08-27T09:38:43.827 に答える
0

まず、リクエストの処理を妨げるファイアウォールの問題がないことを確認します。

ファイアウォールがリクエストのブロックに関与していない場合は、javascript ファイルの src が、Hapi.createServer 行に示されているように、構成したのと同じサーバーとポート番号を指していることを確認してください。

リクエストがサーバーに到達すると、ファイルを提供したことを示すデバッグ行がターミナルに出力されます。

于 2013-08-27T21:40:07.943 に答える