0
var WebSocket = require('ws')
var ws = [];

for (var i = 0; i < 10 ; ++i) {
    ws[i] = new WebSocket('ws://127.0.0.1:9898/echo/websocket');   

    ws[i].on('open', function() {
        ws[i].send('why');
    });

}

nodejs で 10 個の websocket 接続を開こうとしていますが、どういうわけかループが機能しません。コードの何が問題になっていますか? ありがとう

4

2 に答える 2

3

Nitzan Shakedが言うように、あなたの問題はループの問題によるものです。コールバックが起動し始めると、すべてのi値が9ここにあります。

一般的なソリューション

一般的な解決策として、単純なクロージャーを使用して解決します。

var WebSocket = require('ws')
var ws = [];

for (var i = 0; i < 10 ; ++i) {

    ws[i] = new WebSocket('ws://127.0.0.1:9898/echo/websocket');   
    ws[i].on('open', generator(ws[i]));

}

//generator makes a function with present object and returns it
var generator = function (k) {

    return function() {
        k.send('why');
    }

}

簡単な方法

ws[i]ただし、コンテキストに固有の最も簡単な方法は、単にthis

var WebSocket = require('ws')
var ws = [];

for (var i = 0; i < 10 ; ++i) {

    ws[i] = new WebSocket('ws://127.0.0.1:9898/echo/websocket');   
    ws[i].on('open', function() {
         this.send('why');
    });

}
于 2013-10-09T04:15:43.603 に答える