2015-10-02 2 views
2

В сценарии ниже я пытаюсь открыть десять подключений WebSocket на сервер:устанавливают отправить свойство для нескольких соединений webscoket

var webscd=[]; 
function initweb(){ 

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

     webscd[c]=new WebSocket(wsadress); 

     webscd[c].onopen=function(evt){ 
     var binary = new Uint8Array(2); 
     binary[0]=1; 
     binary[1]=2; 
     webscd[c].send(binary.buffer);     
     }; 
     webscd[c].onclose=function(evt){}; 
     webscd[c].onmessage=function(evt){}; 
     webscd[c].onerror=function(evt){}; 
    } 

} 
initweb(); 

Но этот сценарий бросков следующего ошибку

'Uncaught TypeError: Cannot read property 'send' of undefined'

. Что мне делать?

+0

Единственное, что я могу придумать, это проблема с вашей 'wsadress'. Правильно ли вы произносили «адрес», когда вы объявили переменную, а затем оставили «d», когда пытались использовать переменную? Или адрес просто недействителен? – Jason

+0

@ Джейсон, wsaddres в порядке. Проблема заключается в 'webscd [c] .onopen = function (evt) {.... webscd [c] .send (binary.buffer); }; 'onopen function can not resolve' webscd [c] .send (binary.buffer); 'правильно. – maciekm

+0

ОК, я знаю, в чем проблема, но я не знаю, как это исправить. Это действительно неприятно с закрытием функции. Может быть что-то полезное [здесь] (http://stackoverflow.com/questions/750486/javascript-closure-inside-loops-simple-practical-example), но я не могу понять, как это сделать правильно. Вы можете увидеть проблему, если вы запишете 'c' на консоль внутри своей функции' onopen'. Значение всегда равно '10', что является недопустимым индексом для этого массива. Их трюк заключается в том, чтобы ваша функция 'onopen' использовала правильное значение для' c'. Надеюсь, кто-то увидит это и покажет нам, как это сделать. – Jason

ответ

1

Я понял способ сделать это без закрытия.

function create_ws() { 
    var ws=new WebSocket("ws://127.0.0.1:1234"); 
    ws.onopen=function(evt){ 
    var binary = new Uint8Array(2); 
    binary[0]=1; 
    binary[1]=2; 
    ws.send(binary.buffer);     
    }; 
    ws.onclose=function(evt){}; 
    ws.onmessage=function(evt){}; 
    ws.onerror=function(evt){}; 
} 

var webscd = []; 

for(var i = 0; i < 10; i++) { 
    webscd.push(create_ws()); 
}