nodejs下websocket实现

使用socket.io(https://socket.io)实现

原理说明

%E5%8E%9F%E7%90%86%E5%9B%BE.png

客户端实现

<script src="https://cdn.socket.io/socket.io-1.2.0.js"></script>
<script src="https://code.jquery.com/jquery-1.11.1.js"></script>
<script>
    $(function () {
        let search = location.search;
        let id = search.split('=')[1]
        var socket = io.connect("http://localhost:724", {
            "transports": ['websocket', 'polling']
        });
        $('form').submit(function () {
            let m = $('#m').val();
            let json = {id, m};
            socket.emit('sendMessage', json);
            $('#m').val('');
            return false;
        });
        socket.on('receiveMessage', function (msg) {
            $('#messages').append($('<li>').text(msg));
            window.scrollTo(0, document.body.scrollHeight);
        });
        socket.on('get_id', function (msg) {
            socket.emit('send_id', id);
        });
    });
</script>

服务端实现

let SocketObj = {};
let SocketID = {};

let sendMessage = (id, str) => {
    SocketObj[id].emit('receiveMessage', str);
};

module.exports = (server) => {
    let io = require('socket.io')(server, {
        "transports": ['websocket', 'polling']
    });
    io.sockets.on('connection', function (socket) {
        console.log('User connected');
        socket.emit('get_id', "");
        socket.on('send_id', function (data) {
            SocketObj[data] = socket;
            SocketID[socket.id] = data;
            console.log(data);
        });
        socket.on('disconnected', function () {
            console.log('User disconnected');
            delete SocketObj[SocketID[socket.id]];
        });
        socket.on('sendMessage', function (data) {
            socket.emit('receiveMessage', `[${Date.now().toString()}]${JSON.stringify(data)}`)
            SocketObj[data.id].emit('receiveMessage', 'receiveMessage');
        });
    });
};

module.exports.sendMessage = sendMessage;

源码地址

转载于:https://www.cnblogs.com/youjun1991/p/8582939.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值