点击查看源代码》》》代码仓库
今天用nodejs和socket.io实现在线聊天功能。总结一下socket.io的基本用法
首先安装socket包
npm install socket.io
在服务器端引用
const socketio = require("socket.io");
安装完包,引用这个socket的js文件 。他的路径node_modules/socket.io-client/dist/socket.io.js
在客户端,即index.html文件中引用
socket.io的基本用法是
iosocket.emit('loginIn',username);
emit用来触发事件,上例则是触发loginIn事件,向服务器端发送username数据
此时服务器端如何接收到这个username呢?就要监听loginIn事件
iosocket.on('loginIn', function(msg) {
//msg就是客户端发送过来的数据
});
同理,客户端也可以接收服务器端的数据。
服务器端要向客户端发送数据,则用
socket.broadcast.emit('loginInServer', msg);
此为广播。除本对象所有客户端均可以接收到此数据msg
客户端要接收,则需要监听loginServer
socket.on('loginInServer', function(msg) {
// msg 就是服务器端发送过来的数据
});
服务端
var server = app.listen(port, (error) => {
if (error) {
console.error(error);
} else {
console.info('==> Listening on port %s. Open up http://localhost:%s/ in your browser.', port, port);
}
});
socketio.listen(server).on('connection', function (socket) {
socket.on('messageClient', function (msg) {
socket.broadcast.emit('messageServer', msg);
console.log(msg);
});
socket.on('loginIn', function (msg) {
socket.broadcast.emit('loginInServer', msg);
console.log(msg+"加入聊天室");
});
socket.on('loginOut', function (msg) {
socket.broadcast.emit('loginOutServer', msg);
console.log(msg+"离开聊天室");
});
});
客户端
$(document).ready(function(){
var iosocket = io.connect();
var username = sessionStorage.username;
iosocket.emit('loginIn',username);
$(".username").text(sessionStorage.username);
if(sessionStorage.username==undefined){
location.href = "/login";
}
$(".loginOut").click(function(){
iosocket.emit('loginOut',username);
location.href = "/login";
});
$(".btn-blue").click(function(){
var text = $(".mesbox").val();
if (text!="") {
var data = {
name:sessionStorage.username,
content:text
}
iosocket.emit('messageClient',data);
$('.mesbox').val('');
sendHtml(username,text);
}
});
iosocket.on('connect', function () {
//加入聊天室
iosocket.on('loginInServer', function(msg) {
loginInHtml(msg);
});
//离开聊天室
iosocket.on('loginOutServer', function(msg) {
loginOutHtml(msg);
});
//获取消息
iosocket.on('messageServer', function(msg) {
reciveHtml(msg.name,msg.content);
});
});
});
function sendHtml(name,content){
var html = "";
html += ''+
''+name+''+
''+
''+
content+
''+
''+
'';
$(".room").append(html);
$('.room').scrollTop( $('.room')[0].scrollHeight );
}
function reciveHtml(name,content){
var html = "";
html += ''+
''+name+''+
''+
''+
content+
''+
''+
'';
$(".room").append(html);
$('.room').scrollTop( $('.room')[0].scrollHeight );
}
function loginInHtml(name){
var html = "";
html = ''+name+'加入聊天室';
$(".room").append(html);
$('.room').scrollTop( $('.room')[0].scrollHeight );
}
function loginOutHtml(name){
var html = "";
html = ''+name+'离开聊天室';
$(".room").append(html);
$('.room').scrollTop( $('.room')[0].scrollHeight );
}
document.onkeydown = function(e){
var ev = document.all ? window.event : e;
if(ev.keyCode==13) {
$(".btn-blue").click();
}
}