3

こんにちは皆さん、私のコードのエラーが何であるかを理解したいと思います。私のコードはsocket.ioとredis pub/subに関するもので、これを試すのは初めてです。助けていただければ幸いです。

これは私のindex.htmlです

<!doctype html>
<html>
    <script src="/socket.io/socket.io.js"></script>
    <script> 
        var socket = new io.Socket();
        socket.connect();

        socket.on('connection', function (socket) {
            console.log('Connected');
        });

        socket.on('disconnect', function (socket) {
            console.log('Disconnected');
        });
    </script>
    <center>
    <h1>Test Page</h1>
    </center>
</html>

これは私のapp.jsです

var redis = require('redis');
var app = require('http').createServer();
var io = require('socket.io').listen(app);
var client = redis.createClient();
var pub = redis.createClient();
var sub = redis.createClient();

app.listen(1234);

io.sockets.on('connection', function (socket){
    sub.on('subscribe', function (channel){
        pub.publish('Pub','Test Message 1');
        pub.publish('Pub','Test Message 2');
        pub.publish('Pub','Test Message 3');
    });
    sub.on('message', function (channel, message) {
        console.log(channel + ':' + message);
    sub.unsubscribe();
    pub.end();
    sub.end();
    });
    sub.incr('Channel Test');
    sub.incr('Pub');
});

このコードの修正にご協力いただければ幸いです。よろしくお願いします。

4

2 に答える 2

3

コードに多くのエラーが表示されます:

  • index.html ではhttp://localhost:1234/、サーバー コードで定義されているため、 に接続する必要があります。
  • var clientapp.js では使用されません
  • sub何かにサブスクライブすることはありません。チャンネル登録が必要です
  • の接続はsubscriber moderedis にコマンドを送信できません: サブスクリプション セットを変更するコマンドのみが有効です
  • sub.incrメッセージを公開することはありません: publish を呼び出す必要があります。
  • pub.end()またはsub.end()、接続が閉じられるため、電話しないでください。
  • 接続イベントの下のイベントにハンドラーを追加しないでくださいmessage: メモリ リーク

あなたが何をしたいのか正確にはわかりませんが、ここに更新されたバージョンがあります:

index.html

<!doctype html>
<html>
    <script src="http://localhost:1234/socket.io/socket.io.js"></script>
    <script>
        var socket = io.connect('http://localhost:1234/');

        socket.on('connection', function (socket) {
            console.log('Connected');
        });

        socket.on('disconnect', function (socket) {
            console.log('Disconnected');
        });
    </script>
    <center>
    <h1>Test Page</h1>
    </center>
</html>

app.js

var redis = require('redis');
var app = require('http').createServer();
var io = require('socket.io').listen(app);
var pub = redis.createClient();
var sub = redis.createClient();

app.listen(1234);

sub.subscribe('Pub');//subscribe to Pub channel
sub.on('message', function (channel, message) {
    console.log(channel + ':' + message);
});

io.sockets.on('connection', function (socket) {
    pub.publish('Pub', 'New Connection');
    pub.incr('Channel Test');   //increment 'Channel Test' but do not publish messages
    pub.incr('Pub');            //increment 'Pub' but do not publish messages
});
于 2013-09-11T08:51:51.780 に答える
1

あなたがredisをsocket.ioサーバーのストアとして設定したのを見ませんでした。あなたの参考のために私がしたいくつかの例:

// start up express server along with socket.io
var express = require('express');
var server = express();
var socket = require('socket.io');
var io = socket.listen(server);

// socket.io
io.set('store', new socket.RedisStore);

// set-up connections...
io.sockets.on('connection', function(socket) {

        io.emit('an event sent to all connected clients');

        socket.on('some-event', function(rooms) {
            ...
        });

});

以下のドキュメント リンクを読むことができます。

  1. Socket.IO の構成
  2. socket.io github サイト
于 2013-09-11T08:27:39.190 に答える