2013-05-10 2 views
0

Привет, я запускаю базовый код для чат-сервера на node.js. Это почти снято с книги - «Узел: вверх и бег». Проблема заключается в том, когда клиент набирает сообщение, его сообщение передается при каждом нажатии клавиши, после завершения всей строки и нажатия клавиши ввода, в результате чего получается такой вывод: client1: (Отправляет) Hello Клиент2: (получает) 127.0. 0,1: 50672> ч 127.0.0.1:50672>e 127.0.0.1:50672>l 127.0.0.1:50672>l 127.0.0.1:50672>ochatserver in node.js Основная ошибка

Но это, как он должен прийти Client2: (Recieves) 127.0.0.1:50672>hello

Что происходит здесь, сообщения передаются при каждом нажатии клавиши, чем после нажатия клавиши enter. Я поднял еще один пример кода от git кем-то, и то же самое произошло! Вот мой код:

var net = require ('net'); 
var chatServer = net.createServer(), 
    clientlist =[]; 
chatServer.on('connection',function(client){ 
client.name = client.remoteAddress+':'+client.remotePort; 
client.write('Welcome '+ client.name + '!\n'); 
clientlist.push(client); 
client.on('data',function(data){ 
broadcast(data,client); 
}); 
}); 
function broadcast(message, client){ 
for(var i=0;i<clientlist.length;i+=1){ 
    if(client !== clientlist[i]){ 
     clientlist[i].write(client.name + ":"+ message); 
    } 
    } 
    } 
console.log("Chatserver Started") 
chatServer.listen(9000); 

Вот пример GitHub, которые дали одинаковые результаты: GITHUB Как исправить это поведение?

+0

Включите ваш клиентский javascript. Я подозреваю, что ваша проблема заключается в том, что вы передаете обратно на ваш Node-сервер после каждого нажатия клавиши, когда вы, вероятно, хотите, чтобы после того, как пользователь нажал enter (e.keyCode == 13) –

+0

, клиент просто обычная старая команда Windows , сначала я подключаюсь с помощью telnet localhost 9000. Тогда я просто набираю! Я делаю это из еще одной командной строки, чтобы добавить еще одного клиента. –

ответ

0

Событие сервера data увольняется каждый раз, когда принимается блок данных. Вероятно, он срабатывает для каждого персонажа от клиента.

Решение должно заключаться в создании в обратном вызове сервера connection буферной строки/массива. Обратный вызов data добавляет полученные данные в этот буфер. Когда данные содержат символ новой строки, буфер передается и очищается.

+0

СЧИТАЕТ спасибо, что это решило проблему. задайтесь вопросом, как этот пример книги работает без этого. –

+0

Возможно, книга работает с оболочкой unix, а не с приглашением к окну. Не могли бы вы принять (и проголосовать?) Ответ? – Roemer

Смежные вопросы