• websocket聊天室


    实现效果如下:

    websocket最大的遍历性是服务器可以向客户端推送消息。

    现在能实现websockt的库很多,我选择了socket.io,今天找空闲看来下socket.io的文档,动手实现了下(服务端用node实现);

    浏览器端代码:

            window.onload=function(){
                let sock=io.connect('ws://localhost:3000/');
                let oEl=document.querySelector('.prompt');
                
                // 连接
                sock.on('connect',()=>{
                    oEl.style.display='none';
                })
                // 断开连接
                sock.on('disconnect',()=>{
                    oEl.style.display='block';
                })
                
                // 发送消息
                let eUl=document.querySelector('.message_box');
                let eBtn=document.querySelector('.send_btn');
                let eText=document.querySelector('.text_box');
                eBtn.addEventListener('click',function(){
                    sock.emit('message',eText.value);
                    let eLi=document.createElement('li');
                    eLi.innerHTML=eText.value;
                    eLi.className='me';
                    eUl.appendChild(eLi);
                    eText.value='';     
                })
    
                // 接受消息
                sock.on('message',(data)=>{
                    let eLi=document.createElement('li');
                    eLi.innerHTML=data;
                    eUl.appendChild(eLi);
                })
            }

    服务端代码:

    const http=require('http');
    const io=require('socket.io');
    
    let httpServer=http.createServer((req,res)=>{});
    httpServer.listen(3000);
    
    let wsServer=io.listen(httpServer);
    let aSocket=[];
    wsServer.on('connection',socket=>{
        aSocket.push(socket);
        
        // 断开连接
        socket.on('disconnect',()=>{
            // 使用连接时的cocket
            let index=aSocket.indexOf(socket);
            if(index!=-1){
                aSocket.splice(index,1);
            }
        })
        // 接受
        socket.on('message',(data)=>{
            // 发送
            aSocket.forEach(item=>{
                if(item!=socket){
                    item.emit('message',data);
                }
            })
        })
    })

    开发中的总结:

    1.c端的链接是connect,而s端的链接用的是connection

    2.c端和s端都是用on监听,用emit发送消息

    3.为了实现一对多的分发,需要在服务端把链接的实例socket存在一个数据组中,同时把断开连接的实例移除

  • 相关阅读:
    JQuery Ajax 在asp.net中使用总结
    直接拿来用!最火的Android开源项目(一)
    专访邓凡平:Android开发路上的快速学习之道
    C/C++使用心得:enum与int的相互转换
    学习汇编的第一步
    《汇编程序》王爽实验9的解法(显示的问题)
    《汇编程序》王爽实验10.2的解法
    GDB调试精粹及使用实例
    aptget 使用详解
    《汇编程序》王爽实验10.3的解法
  • 原文地址:https://www.cnblogs.com/maoBable/p/11157232.html
Copyright © 2020-2023  润新知