当前位置: 首页 > article >正文

用jquery做一个websocket客户端

先看效果图:

功能很简单,就是作为客户端连接websocket,并实现接受和发送消息。具体代码如下:

<!DOCTYPE html>
<html lang="zh-cn">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>WebSocket测试</title>
 <script src="https://code.jquery.com/jquery-3.1.1.min.js"></script>
    <script>
        var showToast = function (msg,option) {
        outTime = 3000;
        if (option&&option.outTime) {
            outTime = option.outTime;
        }
        if (!$(".showtoastresult").html()) {
            html = "<div class='showtoastresult' style='min-width: 50px;width: auto;padding: 10px 20px;font-size: 14px;font-weight: bold;background: rgba(7, 17, 27, 0.66);border-radius: 6px;color: rgb(255, 255, 255);top: 50%;z-index: 1000001;transform: translate3d(-50%, -50%, 0px);position: fixed;top: 50%;left: 50%;-webkit-transform: translate(-50%, -50%);-moz-transform: translate(-50%, -50%);-ms-transform: translate(-50%, -50%);-o-transform: translate(-50%, -50%);transform: translate(-50%, -50%);'></div>";
            $(document.body).append(html);
        }
        $(".showtoastresult").html(msg);    
        $(".showtoastresult").fadeIn("slow").fadeOut(3000);
        return false;
    }
</script>

<style>
.newmessage{
	width:100%;
}
.bubble{
	background-color:lightgreen
	    position: relative;
    max-width: 240px;
    word-wrap: break-word;
    text-align: left;
    margin-left: 16px;
    margin-right: 16px;
     
    border-radius: 9px;
}

.bubble:after{
	position: absolute;
    border: 4.8px solid transparent;
    content: " ";
    top: 20px;
}

</style>
</head>
<body>
<div style='width:1300px'>
<input type='text' value='ws://127.0.0.1:9090' class="form-control" style='width:390px;display:inline'id='wsaddr'/>
<div class="btn-group" role="group" aria-label="...">
  <button type="button" class="btn btn-default" onclick='addsocket();'>连接</button>
  <button type="button" class="btn btn-default" onclick='closesocket();'>断开</button>
</div>
<div style='margin-top:10px;margin-button:10px'>
<pre>说明:本页面主要用于测试websocket功能是否完善,内外网皆可测。
</pre></div>
</div>
<div class="row" >
<div id="output" style="border:1px solid #ccc;height:365px;overflow: auto;margin-left:15px"></div>
  <div class="col-lg-6">
    
    <div class="input-group" style=''>
      <input type="text"id='message'  class="form-control" style='width:810px' placeholder='待发信息' onkeydown="en(event);">
      <span class="input-group-btn">
        <button class="btn btn-default" type="button" onclick="doSend();">发送</button>
      </span>
    </div>
  </div>
</div>
</div>


<script language="javascript"type="text/javascript">
function   formatDate(now)   {    
              var   year=now.getFullYear();     
              var   month=now.getMonth()+1;     
              var   date=now.getDate();     
              var   hour=now.getHours();     
              var   minute=now.getMinutes();     
              var   second=now.getSeconds();     
              return   year+"-"+(month=month<10?("0"+month):month)+"-"+(date=date<10?("0"+date):date)+" "+(hour=hour<10?("0"+hour):hour)+":"+(minute=minute<10?("0"+minute):minute)+":"+(second=second<10?("0"+second):second);     
   } 
var output;
var websocket;
function init() {
    output = document.getElementById("output");
    testWebSocket();
}

function addsocket() {
	var wsaddr = $("#wsaddr").val();
	if (wsaddr=='') {
		alert("请填写websocket的地址");
		return false;
	}
	StartWebSocket(wsaddr);
}

function closesocket() {
	websocket.close();
}

function StartWebSocket(wsUri) {
    websocket = new WebSocket(wsUri);
    websocket.onopen = function(evt) { onOpen(evt) };
    websocket.onclose = function(evt) { onClose(evt) };
    websocket.onmessage = function(evt) { onMessage(evt) };
    websocket.onerror = function(evt) { onError(evt) }; }
	
    function onOpen(evt) { 
	   writeToScreen("<span style='color:red'>连接成功,现在你可以发送信息啦!!!</span>");
	}
    function onClose(evt) {
        writeToScreen("<span style='color:red'>websocket连接已断开!!!</span>");
		websocket.close();
	}
    function onMessage(evt) {
	   writeToScreen('<span style="color:blue">服务端回应&nbsp;'+formatDate(new Date())+'</span><br/><span class="bubble">'+ evt.data+'</span>');	
	}
    function onError(evt) {
        writeToScreen('<span style="color: red;">发生错误:</span> '+ evt.data);	
}
    function doSend() {
	    var message=$("#message").val();
		if (message=='') {
			alert("请先填写发送信息");
			$("#message").focus();
			return false;
		}
		if (typeof websocket==="undefined"){
			alert("websocket还没有连接,或者连接失败,请检测");
			return false;
		}
		if (websocket.readyState==3) {
			alert("websocket已经关闭,请重新连接");
			return false;
		}
		console.log(websocket);
		$("#message").val('');
		writeToScreen('<span style="color:green">你发送的信息&nbsp;('+formatDate(new Date())+'</span><br/>'+ message);
        websocket.send(message);
		}

    function writeToScreen(message) {
      
       
        
		var div = "<div class='newmessage'>"+message+"</div>";
		var d = $("#output");
		var d=d[0];
        var doScroll = d.scrollTop == d.scrollHeight - d.clientHeight;
		$("#output").append(div);
        if (doScroll) {
            d.scrollTop = d.scrollHeight - d.clientHeight;
        }
		}

   
    function en(event){
		var evt=evt?evt:(window.event?window.event:null);
        if (evt.keyCode==13){
         doSend()
        }
	}
</script> 

</body>
</html>


http://www.kler.cn/a/402451.html

相关文章:

  • 加菲工具 - 好用免费的在线工具集合
  • ArcGIS应用指南:ArcGIS制作局部放大地图
  • 图像标签格式转换
  • skywalking es查询整理
  • librdns一个开源DNS解析库
  • 【FPGA开发】Vivado自定义封装IP核,绑定总线
  • 一.安装版本为19c的Oracle数据库管理系统(Oracle系列)
  • Huggingface load_dataset加载本地数据集
  • 01 P1048 [NOIP2005 普及组] 采药
  • 02 P1734 最大约数和
  • 梧桐数据库加密算法支持与实践应用
  • 印刷物料学习Ⅰ~
  • 【Vue3组件通信方法】
  • elment-ui的折叠tree表单实现纯前端搜索,展开收起功能
  • 【C++习题】5.验证一个字符串是否是回文
  • 详解模版类pair
  • go channel中的 close注意事项 range取数据
  • MySQL数据库4——数据库设计
  • 基于YOLOv8深度学习的医学影像阿尔兹海默症检测诊断系统研究与实现(PyQt5界面+数据集+训练代码)
  • 【设计模式】行为型模式(四):备忘录模式、中介者模式
  • javaweb学习——Day2
  • 原生鸿蒙中实现RN热加载的详细步骤
  • gin源码阅读(2)请求体中的JSON参数是如何解析的?
  • 科技赋能-JAVA发票查验接口、智能、高效的代名词
  • 【springboot】配置文件加载顺序
  • 「四」体验HarmonyOS端云一体化开发模板——工程目录结构与云侧工程一键部署AGC云端