WebSocket与java通讯

1、编写目的 

       传统的HTTP协议是无状态的,每次请求(request)都要由客户端(如 浏览器)主动发起,服务端进行处理后返回response结果,而服务端很难主动向客户端发送数据;这种客户端是主动方,服务端是被动方的传统Web模式 对于信息变化不频繁的Web应用来说造成的麻烦较小,而对于涉及实时信息的Web应用却带来了很大的不便。HTML5中支持WebSocket,其底层通讯协议是TCP,服务端与客户端可以很方便进行通讯。

2、实现步骤

  ①编写java后端,创建javaWeb项目,需要引入相关依赖

<dependency>
    <groupId>javax</groupId>
    <artifactId>javaee-api</artifactId>
    <version>7.0</version>
    <scope>provided</scope>
</dependency>

 ②编写WebSocketTest类

package com.amarsoft;

import javax.websocket.OnClose;
import javax.websocket.OnMessage;
import javax.websocket.OnOpen;
import javax.websocket.Session;
import javax.websocket.server.ServerEndpoint;
import java.io.IOException;

@ServerEndpoint("/websocket")
public class WebSocketTest {
    @OnOpen
    public void onOpen(Session session){
        System.out.println("建立连接");
    }

    @OnClose
    public void onClose(){
        System.out.println("关闭连接");
    }

    @OnMessage
    public void onMessage(String message, Session session){
        System.out.println("receive:"+message);
        try {
            session.getBasicRemote().sendText("你好呀!!!");
        } catch (IOException e) {
            e.printStackTrace();
        }

    }
}

③编写前端代码

<!DOCTYPE HTML>
<html>
<head>
    <meta charset="utf-8">
    <title>菜鸟教程(runoob.com)</title>
</head>
<body>

<div id="sse">
    <input id="content" type="text" placeholder="请输入您需要发送的消息">
    <button onclick="send()">发送</button>
    <div id="logs"></div>
</div>
<script type="text/javascript">
    var ws = null;
    if ("WebSocket" in window)
    {
        ws = new WebSocket("ws://localhost:8080/websocket");
    }else{
        alert("浏览器暂时不支持websocket");
    }
    ws.onopen = function()
    {
    };

    ws.onmessage = function (evt)
    {
        var received_msg = evt.data;
        //将数据添加到日志div中去
        var logsDiv = document.getElementById("logs");
        var newDiv = document.createElement('div');
        newDiv.style.textAlign="right"
        newDiv.innerText="服务器:"+received_msg;
        logsDiv.append(newDiv);
    };

    ws.onclose = function()
    {
    };
    function send(){
        //1、获取输入框中的内容
        var logsDiv = document.getElementById("logs");
        var content = document.getElementById("content").value;
        //2、发送数据
        ws.send(content);
        //3、将数据添加到日志div中去
        var newDiv = document.createElement('div');
        newDiv.style.textAlign="left"
        newDiv.innerText="我:"+content;
        logsDiv.append(newDiv);
        //4、清空输入框
        document.getElementById("content").value="";
    }
    window.onload=function(){
        document.getElementById("content").onkeydown=function(evet){
            if(evet.keyCode == 13){
                send();
            }
        }
    }
</script>
</body>
</html>

④运行效果

3、总结

通过websocket可以改变传统的通讯方式,在效率和流量上都得到了很好的提升。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值