Я пытаюсь создать чат-систему. Вот он: Браузеры не обновляются, когда сокеты получаются emmited
В верхнем поле указано имя пользователя, а нижнее текстовое поле принимает сообщение. Когда пользователь нажат, введите среднюю текстовую область (которая отключена) обновляет себя новой записью. Это делается с помощью nodejs сокетов. Моя проблема в том, что если я открою еще один экземпляр google chrome, и я напечатаю что-то другое, то хард textorea Google Chrome не обновится. Я озадачен этим, так как мой код должен охватывать этот случай:
Вот код server.js, который обрабатывает вставку. После того, как он вставляет его, он выдает сокет с последней вставкой, чтобы index.html мог обновить себя.
io.sockets.on("connection",function(socket){
socket.on("send",function(data){
mongodb.connect("mongodb://127.0.0.1:27017/myDatabase",function(err,db){
if(err) throw err;
var to_be_inserted = {name: data.name,content: data.content};
db.collection("chat").insert(to_be_inserted,function(err,objects){
if(err) throw err;
var cursor = db.collection("chat").find().sort({_id: -1}).limit(1);
cursor.toArray(function(err,docs){
console.log("abc");
socket.emit("data_to_be_printed",docs);
});
});
})
})
})
Как можно видеть, как только данные вставляются сокет испускается, содержащий последнюю строку БД. Index.html должен обрабатывать этот сокет, обновляя его. Вот код, который обрабатывает его:
<script>
var socket = io.connect("127.0.0.1:1337");
socket.on("data_to_be_printed",function(cursor){
var completed = document.getElementById("chatArea").value;
for(var i=0; i < cursor.length; i++)
{
console.log(cursor[i].name + " wrote: " + cursor[i].content);
var name = cursor[i].name;
var content = cursor[i].content;
var name_to_go = name.replace("/\r?\n|\r/g","");
var content_to_go = content.replace("/\r?\n|\r/g","");
completed+="\n" + name_to_go + ": " + content_to_go;
}
document.getElementById("chatArea").value = completed;
});
function keyfunction(e)
{
if((e.keyCode == 13 || e.which == 13) && !e.shiftKey)
{
socketEmitDb();
}
}
function socketEmitDb()
{
var name = document.getElementById("name").value;
var content = document.getElementById("writtenThing").value;
console.log("Name: " + name + " |||| content: " + content);
document.getElementById("name").value="";
document.getElementById("writtenThing").value="";
if(name.length > 0 && content.length > 0)
{
socket.emit("send",{"name": name,"content": content});
}else
{
alert("Make sure that the name and the message is not empty");
}
}
</script>
Должен ли розетка быть выпущена во все открытые розетки?
так что сокет, который исходит из аргумента обратного вызова, - это просто сокет, который только что подключен? – Bula
это правильно. – vinayr