websocket通信

17 篇文章 0 订阅

h5新增了一个websocket,可以实现客户端和服务器之间的通信,下面来看一下。

首先要在node环境下下载websocket模块,即npm i websocket

var WebSocketServer = require('websocket').server;
var http = require('http');

var server = http.createServer(function(request, response) {
    console.log((new Date()) + ' Received request for ' + request.url);
    response.writeHead(404);
    response.end();
});
//监听3020端口
server.listen(3020, function() {
    console.log((new Date()) + ' Server is listening on port 3020');
});

wsServer = new WebSocketServer({
    httpServer: server,
    autoAcceptConnections: false
});

function originIsAllowed(origin) {
    // put logic here to detect whether the specified origin is allowed.
    return true;
}

wsServer.on('request', function(request) {
    if (!originIsAllowed(request.origin)) {//判断是否同源
        // Make sure we only accept requests from an allowed origin
        request.reject();
        console.log((new Date()) + ' Connection from origin ' + request.origin + ' rejected.');
        return;
    }

    var connection = request.accept(null, request.origin);
    //发送消息
    setTimeout(()=>{connection.send('hhhh',(data)=>{console.log('成功')})},1000)

    console.log((new Date()) + ' Connection accepted.');
    connection.on('message', function(message) {//接收消息
        if (message.type === 'utf8') {
            console.log('Received Message: ' + message.utf8Data);
            connection.sendUTF(message.utf8Data);
        }
        else if (message.type === 'binary') {
            console.log('Received Binary Message of ' + message.binaryData.length + ' bytes');
            connection.sendBytes(message.binaryData);
        }
    });
    //关闭通信
    connection.on('close', function(reasonCode, description) {
        console.log((new Date()) + ' Peer ' + connection.remoteAddress + ' disconnected.');
    });
});

上面的是服务端代码,接下来是客户端代码

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<ul id="content">

</ul>
<input type="text" id="msg">
<button onclick="send()">发送</button>
<button onclick="close()">关闭</button>
<script>
    var ws=new WebSocket('ws://localhost:3020');
    var inputNode=document.getElementById('msg');
    var list=document.getElementById('content');
    ws.onopen=function(res){
        console.log('连接成功');
        console.log(res);
    }
    ws.onmessage=function(res){
        console.log('有新消息');
        console.log(res);
        list.innerHTML+='<li>'+res.data+'</li>'
    }
    function send(){
        ws.send(inputNode.value);
    }
</script>
</body>
</html>

这样就实现了客户端和服务器通信。接下来看一下多端通信

var wsocket=require('websocket').server;
var http=require('http');
var client=[];
const server=http.createServer((req,res)=>{
    res.end('11');
});
server.listen(6001,()=>{console.log('监听端口')});

var ws=new wsocket({httpServer:server});

ws.on('request',(websockterequest)=>{
    var connection=websockterequest.accept(null,'accepted-origin');
    client.push(connection);
    setTimeout(()=>{connection.sendUTF('hhh',()=>{console.log('发送成功')})});
    connection.on('message',(data)=>{
        if(data.type=='utf8'){
            client.forEach(item=>{
                item.sendUTF(data.utf8Data,()=>{console.log('发送消息')})
            })
        }
    })
    connection.on('close',(reasonable,description)=> {
            console.log('断开了一个连接');

            var index = client.indexOf(connection);
            client.splice(index,1);
        }
    )
    }
)
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<input type="text">
<button id="btn">发送</button>
<ul></ul>
<script>
    var btn=document.getElementById('btn');
    var input=document.getElementsByTagName('input')[0];
    var list=document.getElementsByTagName('ul')[0];
    var ws=new WebSocket('ws://localhost:6001');
    ws.onmessage=function(msg){
        list.innerHTML+=`<li>${msg.data}</li>`
    }
btn.onclick=function(){
        ws.send(input.value)
}
</script>
</body>
</html>

这样,客户端打开多个网页都可以和服务器端通信

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值