Javascript 通过Socketio传递新的DOM元素
如何通过socketio在服务器端传递DOM元素以显示新的消息内容。Javascript 通过Socketio传递新的DOM元素,javascript,node.js,sockets,socket.io,Javascript,Node.js,Sockets,Socket.io,如何通过socketio在服务器端传递DOM元素以显示新的消息内容。 //客户端 //将DOM元素作为字符串传递 函数元素缩放(elem){ 返回元素outerHTML } window.addEventListener(“keyup”,sendMessage,false); 函数sendMessage(键){ 如果(key.keyCode===13){ 如果(chatbox.value!==“”){ const child=document.createElement(“div”); chil
//客户端
//将DOM元素作为字符串传递
函数元素缩放(elem){
返回元素outerHTML
}
window.addEventListener(“keyup”,sendMessage,false);
函数sendMessage(键){
如果(key.keyCode===13){
如果(chatbox.value!==“”){
const child=document.createElement(“div”);
child.textContent=`${chatbox.value}`
child.className=“消息”
chat.appendChild(child);
socket.emit('chatMsg',elemToString(子))
chatbox.value=“”;
chatbox.style.display=“无”;
设置超时(()=>{
child.remove()
},4000)
}
else chatbox.style.display=“无”;
}
}
//用户类
类用户{
构造函数(名称,x,y){
this.alive=false
this.name=name
this.cells=[]
this.room='none'
this.message=[]
}
更新(单元格){
this.cells=单元格
}
}
module.exports=用户
//服务器
socket.on('chatMsg',elem=>{
user.message.push(elem)
})
我想问的第一个问题是,您是否真的需要传递HTML或DOM对象?根据上面的代码片段,对于服务器和聊天客户端来说,以字符串形式发送消息(没有任何HTML标记,只有消息正文)似乎是迄今为止最简单的方法。至于向聊天室中的所有用户发送消息,该功能已经内置在socket.io(请参阅)中,除非您需要实现自定义日志记录或过滤,否则您可以直接使用它
构建此聊天服务器有几种方法:
简单/POC方法
如果您只想拥有一个快速原型,看看它是否达到了您想要的效果,并且您不太关心审计、日志记录、筛选等,那么:
- 当客户端连接时,它会“连接”socket.io“文件室”(文件室的名称可以与客户端上的文件室匹配,或者您可以选择格式化/散列文件室等)
- 所有聊天室客户端都将事件发送到同一个聊天室,并侦听该聊天室发出的事件。io后端负责重新广播事件,因此您无需执行任何操作
- 要向会议室发送消息,“发送者”客户端将广播一个众所周知的事件,类似于
。所有的客户端都会监听聊天室中的事件,一旦一个新事件到来,他们就会创建一个新的HTML元素(比如,{message:'}
),并将该消息作为内容附加到聊天窗口中
- 所有聊天客户端都订阅相同的“传入消息”聊天室,就像前面的场景一样
- 当聊天者需要发送消息时(比如,他们按Enter键),客户端套接字会向服务器发出一个事件,并告诉服务器该消息要发送到哪个房间(例如,
{incoming_message:'xyz',user:'username',room:'room_21'}
- 服务器接收消息并对其进行处理(例如,根据禁止用户列表检查用户名),然后在原始消息中指定的聊天室中广播处理后的消息。其他聊天参与者接收消息并呈现消息