<script type="text/javascript" src="/socket.io/socket.io.js" >
</script>
引入socket.io.js
<h1>聊天室</h1>
<div class="chat">
<div class="list">
</div>
<input type="text" name="" value="" οnchange="say(event)">
</div>
以上为聊天区
可以理解成 on为监听服务器的消息,word是收到的消息。emit是发送消息至服务器
listdom.scrollTop = listdom.scrollHeight;是将滚动条更新到最下面
const socket = io.connect();
const listdom = document.querySelector(".list");
socket.emit("req","abc",function(res){
console.log("响应");
});
socket.on("newsay",word=>{
const pdom = document.createElement("p");
const spandom = document.createElement("span");
spandom.innerText = word;
const namedom = document.createElement("span");
namedom.innerText = "<%=user.name||"游客"%>: "
pdom.appendChild(namedom);
pdom.appendChild(spandom);
listdom.appendChild(pdom);
listdom.scrollTop = listdom.scrollHeight;
})
function say(event){
<%if(user&&user.name){%>
socket.emit("say",event.target.value);
event.target.value = "";
<%}else {%>
alert("请先登录");
<%}%>
}
app.js
var expsession = require("express-session")({
secret:'keyboard cat',
cookie:{maxAge:800000}
});
//把 express下的session放到io下 iosession用的
var iosession = require("express-socket.io-session")(expsession);
var app = express();
//app连上了server
var server = require("http").Server(app);
//server 与 socket关联
var io = require("socket.io")(server);
server.listen(3000);
//加上端口号 同时去掉最后的exports
io.use(iosession);//加上 iosession
聊天
io.on("connection",function(socket){
socket.on("req",function(data,cb){
console.log("接受到请求");
cb();//表示响应的回调函数
})
//接收消息
socket.on("say",data=>{
console.log(socket.handshake.session.num);
const num = ++socket.handshake.session.num;
socket.handshake.session.save();//socket环境下更改数据后对express下的也生效,持久化保存
// io.emit("newsay",data +"num :"+num);
// socket.emit("newsay",data+"(创建时间: "+ new Date()+ ")");
//接收的data发送给浏览器
io.emit("newsay",data+" ( "+
(new Date().getMonth()+1)+"月"+new Date().getDate()+"日"+new Date().getHours()+":"+new Date().getMinutes()
+ ")");
// io.emit("newsay",data+" ( "+
// new Date().getMonth()+1
// + ")");
})
// if(firstSocket){
// console.log("firstSocket ===socket : ",firstSocket === socket);
// }else{
// firstSocket = socket;
// }
// socket.on("say",data=>console.log(data));
//
// socket.emit("welcome","欢迎你");
// socket.emit("welcome2","hello word");
// socket.on("question",data=>console.log(data));
});