-1

Node.jsの新機能。SOで多くの回答を検索しましたが、この問題の適切な解決策を見つけることができませんでした。memcachedサービス(phpを使用して保存)からデータを取得するためにnode.jsのカスタムmemcacheサーバーコードを使用しています。以下に関連するコードのみを追加しました。

var net = require("net");
net.createServer(function(socket) {
     socket.setEncoding('utf8');

     var cmd = {};
     var incoming = '';
     socket.addListener('receive', function(data) {
         incoming += data;
         // in the mid of receiving some data, so we can't
         // parse it yet.
         if(data.substring(data.length - 2) != '\r\n')
            return;

         data = incoming;
         incoming = '';

         var parts = data.split(/ /);
         if(parts[0].match(/^(add|set|delete|get|gets)$/i)) {
             switch(parts[0]) {
                 case 'add':
                     var message = JSON.parse(data.split('\r\n')[1]);
                     self._add.call(socket, parts[1].replace('\r\n', ''), message);
                     break;

                 case 'set':
                     var message = data.split('\r\n')[1];
                     try {
                        message = JSON.parse(message);
                     } catch(e) {}
                        var subparts = parts[1].replace('\r\n', '').split('/');
                        self._set.call(socket, subparts.slice(0, 2), subparts.slice(2).join('/'), message);
                 break;

                 case 'delete':
                     self._delete.call(socket, parts[1].replace('\r\n', ''));
                 break;

                 case 'get':
                     self._get.call(socket, parts[1].replace('\r\n', ''));
                 break;

                 case 'gets':
                     var getsparts = parts.slice(1);
                     getsparts[getsparts.length - 1] =
                     getsparts[getsparts.length - 1].replace('\r\n', '');
                     self._gets.call(socket, getsparts);
                 break;
            }
         }
     });
}).listen(11211, "localhost");

しかし、ノードサーバーを起動しようとするとEADDRINUSE、memcachedサービスがすでにポートで実行されていることが原因であると表示されます11211。ポートを(51242)などの他の何かに変更すると、エラーは表示されませんが、memcachedからデータが取得されません。

11211したがって、このnode.js memcacheサーバーコードから同じポートを使用してmemcachedサービスに接続する方法はありますか?私はNode.jsを初めて使用するため、考えられる解決策を見つけることができませんでした。したがって、 node.js memcachedモジュールを使用せずにこの問題を修正するにはどうすればよいですか、または完全に間違ったパスにいますか?補足として、私はWindows7でmemcachedサービスとnodejsを実行しています。提案してください

アップデート

それ以外の

net.createServer(function(socket) {

テストのためにフォローに変更しました

this.start = function() {
        var socket = net.createConnection(11211, "127.0.0.1");
        console.log('Socket created.');
        socket.on('data', function(data) {          
            console.log('RESPONSE: ' + data);
        }).on('connect', function() {

            socket.write("GET / HTTP/1.0\r\n\r\n");
        }).on('end', function() {
             console.log('DONE');
        });
}

しかし、コンソールでは、Socket Createdが表示され、エラーがスローされます:: Error connectECONNREFUSED

4

1 に答える 1

2

これは、ノードがサーバー(ポートをバインドして着信接続を受け入れる)としてではなく、クライアントとしてmemcachedと対話する必要があるために発生します。net.createServerの代わりにnet.createConnectionを調べてください

于 2013-02-12T04:53:04.550 に答える