socket.io例子

    <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));
});

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值