我正在使用本教程。我需要向新连接的用户发送旧消息。我怎样才能做到这一点?我的意思是新用户应该能够看到旧消息。
对于我的应用程序,我不需要将数据存储在数据库中。一旦服务器关闭,则应删除数据。但是服务器在每个会话上运行多长时间客户端应该收到以前的消息
我试过了
const history = []
//Telling Express+Socket.io App To Listen To Port
io.sockets.on("connection",function(socket){
socket.emit("Start_Chat");
//On Event Registar_Name
socket.on("Register_Name",function(data){
console.log(data)
io.sockets.emit("r_name","<strong>"+data+"</strong> Has Joined The Chat");
//Now Listening To A Chat Message
socket.on("Send_msg",function(data){
history.push(data)
console.log(history)
io.sockets.emit("msg",data);
//Now Listening To A Chat Message
})
})
})
Run Code Online (Sandbox Code Playgroud)
但是我怎么能说新客户何时输入发送历史数据?
更新:我尝试了以下但它总是发送历史
const history = []
const client = []
//Telling Express+Socket.io App To Listen To Port
io.sockets.on("connection",function(socket){
client.push({id : socket.client.id})
console.log(client)
socket.emit("Start_Chat");
//On Event Registar_Name
socket.on("Register_Name",function(data){
console.log(data)
io.sockets.emit("r_name","<strong>"+data+"</strong> Has Joined The Chat");
//Now Listening To A Chat Message
socket.on("Send_msg",function(data){
history.push(data)
console.log(history)
if(client.find(e => e.id !== socket.client.id)) {
io.sockets.emit("msg",history);
} else {
io.sockets.emit("msg",data);
}
//Now Listening To A Chat Message
})
})
Run Code Online (Sandbox Code Playgroud)
小智 8
根据您想让聊天应用程序的复杂程度,有多种方法。
简单的解决方案:您创建某种类型的数据结构(可能是一个数组)来保存最后 n 条消息。每当添加新消息时,您都会删除添加的第一条消息。当 onConnect 事件被触发时,您将整个数据结构发送到客户端。这更多是为了您可以稍后更改的概念验证解决方案。
优点:易于实施
缺点:服务器上的所有数据本质上都是易失性的,如果您重新启动应用程序,所有数据都会丢失。此外,它不会跨多个服务器实例扩展。
稍微复杂一点的解决方案:将所有消息存储在数据库中,并在用户连接时查询数据库以检索最后 n 条消息。
优点:所有数据都是持久的,如果服务器崩溃/停止,您仍然可以检索数据。
缺点:您需要维护数据库,因为消息会随着时间的推移占用更多空间。为了解决这个问题,您可以随时自动删除所有超过 x 天的消息。
终于想通了
const history = []
const client = []
//Telling Express+Socket.io App To Listen To Port
io.sockets.on("connection",function(socket){
client.push({id : socket.client.id})
console.log(client)
var getClientID = client.find(e => (e.id === socket.client.id))
console.log("the Client", getClientID)
if(getClientID){
//io.sockets.emit("msg",history);
socket.emit("msg",history);
}
socket.emit("Start_Chat");
//On Event Registar_Name
socket.on("Register_Name",function(data){
console.log(data)
io.sockets.emit("r_name","<strong>"+data+"</strong> Has Joined The Chat");
//Now Listening To A Chat Message
socket.on("Send_msg",function(data){
history.push(data)
console.log(history)
io.sockets.emit("msg",data);
})
})
})
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
8083 次 |
| 最近记录: |