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;