nodejs下websocket实现

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

原理说明

客户端实现

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

源码地址

posted @ 2018-03-16 16:04  月舞紫夜  阅读(355)  评论(0编辑  收藏  举报