1
教育目的のために、TCPを使用してnode.jsと少しチャットを作成しています。node.jsのバイトストリームの処理
Windowsコンソールを使用してノードサーバーに接続していますが、入力するときにすべての文字が1つずつストリームされます。彼らは文字列として動かない。ユーザーが完全な単語を書くことができないように、どうすればそれらのストリームを処理することができますか?
マイコード:コードから提示されたことを記録するためにvar net = require("net");
Array.prototype.remove = function(e) {
for (var i = 0; i < this.length; i++) {
if (e == this[i]) { return this.splice(i, 1); }
}
};
function Chatter(stream) {
this.name = null;
this.stream = stream;
}
var chatters = [];
var server = net.createServer(function(stream) {
var chatter = new Chatter(stream);
chatters.push(chatter);
stream.setTimeout(0);
stream.setEncoding("utf8");
stream.addListener("connect", function(){
stream.write("Hallo, wer bist du?:\n");
});
stream.addListener("data", function (data) {
if(chatter.name == null) {
chatter.name = data.match(/\S+/);
stream.write("....................\n");
chatters.forEach(function(c){
if (c != chatter) {
c.stream.write(chatter.name + " ist dem Chat beigetreten!\n");
}
});
return;
}
var command = data.match(/^\/(.*)/);
if (command) {
if (command[1] == 'users') {
chatters.forEach(function(c) {
stream.write("- " + c.name + "\n");
});
}
else if (command[1] == 'quit') {
stream.end();
}
}
chatters.forEach(function(c) {
if(c != chatter) {
c.stream.write(chatter.name + ": " + data);
}
});
});
stream.addListener("end", function(){
chatters.remove(chatter);
chatters.forEach(function(c) {
c.stream.write(chatter.name + " hat den Chat verlassen.\n");
});
stream.end();
});
});
server.listen(8000);
ADDITION:
setEncoding('utf8')
は、データのemitingを変更することになっているが、それはしていません私のために働く:-(
私はWindowsとLinux上でそれをテストし – Sven
私はそのソリューションでヌル取得していますし、それは私のために動作します。フルコードhttps://gist.github.com/1127401 – mak
私は間違ったことをしているに違いありません。ちょうどあなたの変更をコピーし、それは実際に動作します。そんなに努力してくれてありがとう。良い週末を。 – Sven