使用scoket.io来实现简单的及时通讯

本文介绍如何使用Socket.IO实现跨平台的实时通讯应用,涵盖安装配置、前后端交互及聊天功能实现,展示实时分析和即时通讯的优势。

scoket.io

它适用于所有平台,浏览器或设备,并同时关注可靠性和速度

具有以下优点:

1.实时分析
将数据推送到以实时计数器,及时监听页面所有的变化,并且接收和发送给客户端数据。

2.即时通讯和聊天
Socket.IO结合node以及express实现简单的即使通讯。

3.作为服务器
可以把socket.io当成一个服务器用来传输数据

4.自动重接支持
除非另有指示,否则断开的客户端将尝试重新连接,直到服务器重新可用

安装

yarn add scoket.io

搭建基本结构(前提有node)

创建app.js文件作为服务器

//创建http服务器
var app = require('express')();
var server = require('http').Server(app);
var io = require('socket.io')(server);
//监听端口
server.listen(3002, function(){
  console.log('服务器正在运行。。。。');
});
//结合node中exoress来处理在静态资源
//express  处理静态资源
//吧pubilc设置静态资源
app.use(require('express').static('public'))

app.get('/', function(req, res){
   res.redirect('./index.html')
});

//express  处理静态资源
//吧pubilc设置静态资源
app.use(require('express').static('public'))

app.get('/', function(req, res){
   res.redirect('./index.html')
});
//监听服务器运行时所发生的事件 相当于生命周期函数
io.on('connection', function(socket){
  // console.log('新的用户连接上来了');
}

在前端页面引入相关文件

  <!-- 引入socket.io -->
    <script src="/socket.io/socket.io.js"></script>
    <script src="./js/jquery-1.8.2.js"></script> //实现诸多方法需用到
    <script src="./js/index.js"></script> //用于处理接收方法和信息
    <script>
        var socket = io('http://localhost:3002');  //连接端口 启动服务
    </script>

监听聊天功能

socket.on('sendMessage',data=>{ 
     console.log(data)
     io.emit('receiveMsssage',data)
   })

前端应也接收和回应到页面

 $('.btn').on('click',()=>{
        var content = $('#content').val().trim()
        $('#content').val('')
        if(!content) return alert('请输入内容')
        socket.emit('sendMessage',{
          msg:content,
          username:username,
          avatar:avatar
        })
      })

      socket.on('receiveMsssage',data=>{
        // console.log(data)
        if(data.username===username){
        $('.box-bd').append(`
        <div class="masseage_box">
                <div class="my message">
                    <img class="avatar" src="${data.avatar}" alt="">
                   <div class="content">
                      <div class="bubble">
                         <div class="bubble_cont" ><em>${data.msg}</em></div>
                        <a>▶</a> 
                      </div>
                   </div>
                </div>
             </div>
        `)
        }else{
          $('.box-bd').append(`
          <div class="masseage_box">
          <div class="other message">
              <img class="avatar" src="${data.avatar}" alt="">
             <div class="content">
                 <div class="nickname">${data.username}</div>
                <div class="bubble">
                   <div class="bubble_cont"><em>${data.msg}</em></div>
                   <a>◀</a> 
                </div>
             </div>
          </div>
       </div>
          `)
        }

这里是一些socket.on和socket.emit的用法

前端

function onConnect(socket){

  // 发送给当前客户端
  socket.emit('hello', 'can you hear me?', 1, 2, 'abc');

  // 发送给所有客户端,除了发送者
  socket.broadcast.emit('broadcast', 'hello friends!');

  // 发送给同在 'game' 房间的所有客户端,除了发送者
  socket.to('game').emit('nice game', "let's play a game");

  // 发送给同在 'game1' 或 'game2' 房间的所有客户端,除了发送者
  socket.to('game1').to('game2').emit('nice game', "let's play a game (too)");

  // 发送给同在 'game' 房间的所有客户端,包括发送者
  io.in('game').emit('big-announcement', 'the game will start soon');

  // 发送给同在 'myNamespace' 命名空间下的所有客户端,包括发送者
  io.of('myNamespace').emit('bigger-announcement', 'the tournament will start soon');

  // 发送给指定 socketid 的客户端(私密消息)
  socket.to(<socketid>).emit('hey', 'I just met you');

  // 包含回执的消息
  socket.emit('question', 'do you think so?', function (answer) {});

  // 不压缩,直接发送
  socket.compress(false).emit('uncompressed', "that's rough");

  // 如果客户端还不能接收消息,那么消息可能丢失
  socket.volatile.emit('maybe', 'do you really need it?');

  // 发送给当前 node 实例下的所有客户端(在使用多个 node 实例的情况下)
  io.local.emit('hi', 'my lovely babies');

};

服务端

io.on(‘connection’,function(socket));//监听客户端连接,
//回调函数会传递本次连接的socket

io.sockets.emit(‘String’,data);//给所有客户端广播消息

io.sockets.socket(socketid).emit(‘String’, data);//给指定的客户端发送消息

socket.on(‘String’,function(data));//监听客户端发送的信息

socket.emit(‘String’, data);//给该socket的客户端发送消息

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值