socket.io.js最简版单页HTML测试工具
socket.io基于WebSocket协议封装,兼容不支持ws的浏览器采用ajax轮询,socket.io为开发者提供服务端和客户端两套库,无需了解全部ws底层原理,好入门,上手快。学会socket.io后可搭建类似QQ和微信这种即时通信工具的Web版,既可以一对一对话也可开房间组队创建聊天群组,我尝试过传输的媒体类型有文本、图像两种,数据都可由1和0表示,所以理论上可传输任何媒体形式。
废话不多说上代码
var socket; //socket对象
var errorCount = 0; //连接错误次数
var isConnected = false; //连接状态
var maxError = 5; //最大连接错误次数
// connect(null,null);
//socket连接方法
function connect(url,clientId) {
//连接地址
if(url==''||url== null||url==undefined){
url= 'http://localhost:9000';
}
//连接标识
if(clientId==''||clientId==null||clientId==undefined){
clientId=7729;
}
//传入参数
var opts = {
query: 'clientId='+clientId
};
//连接socket
socket = io.connect(url, opts);
//连接成功监听
socket.on('connect', function () {
isConnected =true;
console.log("连接成功");
serverOutput('<span class="connect-msg"><font color="blue">'+getNowTime()+' </font>连接成功</span>');
errorCount=0;
});
//消息监听
socket.on('message', function (data) {
output('<span class="username-msg"><font color="blue">'+getNowTime()+' </font>' + data + ' </span>');
console.log(data);
});
//断开连接监听
socket.on('disconnect', function () {
isConnected =false;
console.log("连接断开");
serverOutput('<span class="disconnect-msg"><font color="blue">'+getNowTime()+' </font>' + '已下线! </span>');
});
//连接错误监听
socket.on('connect_error', function(data){
serverOutput('<span class="disconnect-msg"><font color="blue">'+getNowTime()+' </font>;' + '连接错误-'+data+' </span>');
errorCount++;
if(errorCount>=maxError){
socket.disconnect();
}
});
//连接超时监听
socket.on('connect_timeout', function(data){
serverOutput('<span class="disconnect-msg"><font color="blue">'+getNowTime()+' </font>' + '连接超时-'+data+' </span>');
errorCount++;
if(errorCount>=maxError){
socket.disconnect();
}
});
//错误监听
socket.on('error', function(data){
serverOutput('<span class="disconnect-msg"><font color="blue">'+getNowTime()+' </font>' + '系统错误-'+data+' </span>');
errorCount++;
if(errorCount>=maxError){
socket.disconnect();
}
});
//手动确认监听
socket.on('ack', function(data){
var str = '消息发送失败';
if(data==1){
str = '消息发送成功';
}
serverOutput('<span class="connect-msg"><font color="blue">'+getNowTime()+' </font>' + str+' </span>');
});
}
function output(message) {
var element = $("<div>" + " " + message + "</div>");
$('#console').prepend(element);
}
function serverOutput(message) {
var element = $("<div>" + message + "</div>");
$('#console').prepend(element);
}
$("#connect").click(function(){
if(!isConnected){
var url = $("#url").val();
var clientId = $("#clientId").val();
connect(url,clientId);
}
})
$("#disconnect").click(function(){
if(isConnected){
socket.disconnect();
}
})
$("#send").click(function(){
var socketEvent = $("#socketEvent").val();
var content = $("#content").val();
serverOutput('<span class="connect-msg"><font color="blue">'+getNowTime()+' </font>' + '发送消息-'+content+' </span>');
socket.emit(socketEvent,content);
})
function getNowTime(){
var date=new Date();
var year=date.getFullYear(); //获取当前年份
var mon=date.getMonth()+1; //获取当前月份
var da=date.getDate(); //获取当前日
var h=date.getHours(); //获取小时
var m=date.getMinutes(); //获取分钟
var s=date.getSeconds(); //获取秒
var ms=date.getMilliseconds();
var d=document.getElementById('Date');
var date =year+'/'+mon+'/'+da+' '+h+':'+m+':'+s+':'+ms;
return date;
}
完整代码-copy到本地,只要有网络便可以运行
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
<title>SocketIOClient_V1.0</title>
<base>
<script src="https://cdn.bootcss.com/jquery/3.3.1/jquery.min.js"></script>
<script src="https://cdn.bootcss.com/socket.io/2.1.1/socket.io.js"></script>
<style>
body {
padding: 20px;
}
#console {
height: 450px;
overflow: auto;
}
.username-msg {
color: orange;
}
.connect-msg {
color: green;
}
.disconnect-msg {
color: red;
}
</style>
</head>
<body>
<h2>SocketClient_V1.0</h2>
<div style="border: 1px;">
<label>socketurl:</label><input type="text" id="url" value="http://localhost:9000">
<br>
<label>clientId:</label><input type="text" id="clientId" value="123456">
<br>
<button id="connect">connect</button>
<button id="disconnect">disconnect</button>
</div>
<br>
<div style="border: 1px;">
<label>socketEvent:</label><input type="text" id="socketEvent">
<br>
<label>content:</label><br><textarea id="content" maxlength="1000" cols="30" rows="5"></textarea>
<br>
<button id="send">send</button>
</div>
<br>
<div id="console" class="well"></div>
</body>
<script type="text/javascript">
var socket;
var errorCount = 0;
var isConnected = false;
var maxError = 5;
// connect(null,null);
function connect(url,clientId) {
if(url==''||url== null||url==undefined){
url= 'http://localhost:9000';
}
if(clientId==''||clientId==null||clientId==undefined){
clientId=7729;
}
var opts = {
query: 'clientId='+clientId
};
socket = io.connect(url, opts);
socket.on('connect', function () {
isConnected =true;
console.log("连接成功");
serverOutput('<span class="connect-msg"><font color="blue">'+getNowTime()+' </font>连接成功</span>');
errorCount=0;
});
socket.on('message', function (data) {
output('<span class="username-msg"><font color="blue">'+getNowTime()+' </font>' + data + ' </span>');
console.log(data);
});
socket.on('disconnect', function () {
isConnected =false;
console.log("连接断开");
serverOutput('<span class="disconnect-msg"><font color="blue">'+getNowTime()+' </font>' + '已下线! </span>');
});
socket.on('connect_error', function(data){
serverOutput('<span class="disconnect-msg"><font color="blue">'+getNowTime()+' </font>;' + '连接错误-'+data+' </span>');
errorCount++;
if(errorCount>=maxError){
socket.disconnect();
}
});
socket.on('connect_timeout', function(data){
serverOutput('<span class="disconnect-msg"><font color="blue">'+getNowTime()+' </font>' + '连接超时-'+data+' </span>');
errorCount++;
if(errorCount>=maxError){
socket.disconnect();
}
});
socket.on('error', function(data){
serverOutput('<span class="disconnect-msg"><font color="blue">'+getNowTime()+' </font>' + '系统错误-'+data+' </span>');
errorCount++;
if(errorCount>=maxError){
socket.disconnect();
}
});
socket.on('ack', function(data){
var str = '消息发送失败';
if(data==1){
str = '消息发送成功';
}
serverOutput('<span class="connect-msg"><font color="blue">'+getNowTime()+' </font>' + str+' </span>');
});
}
function output(message) {
var element = $("<div>" + " " + message + "</div>");
$('#console').prepend(element);
}
function serverOutput(message) {
var element = $("<div>" + message + "</div>");
$('#console').prepend(element);
}
$("#connect").click(function(){
if(!isConnected){
var url = $("#url").val();
var clientId = $("#clientId").val();
connect(url,clientId);
}
})
$("#disconnect").click(function(){
if(isConnected){
socket.disconnect();
}
})
$("#send").click(function(){
var socketEvent = $("#socketEvent").val();
var content = $("#content").val();
serverOutput('<span class="connect-msg"><font color="blue">'+getNowTime()+' </font>' + '发送消息-'+content+' </span>');
socket.emit(socketEvent,content);
})
function getNowTime(){
var date=new Date();
var year=date.getFullYear(); //获取当前年份
var mon=date.getMonth()+1; //获取当前月份
var da=date.getDate(); //获取当前日
var h=date.getHours(); //获取小时
var m=date.getMinutes(); //获取分钟
var s=date.getSeconds(); //获取秒
var ms=date.getMilliseconds();
var d=document.getElementById('Date');
var date =year+'/'+mon+'/'+da+' '+h+':'+m+':'+s+':'+ms;
return date;
}
</script>
</html>
运行效果图
连接成功后
简单实用,是我的菜,爱了