2017最后一篇编程探险:WebSocket服务器主动推送

快跨年了,闲来无事,一直很想了解服务器是如何主动推动消息的,这3天假期难得,看看websocket吧
tomcat中内置了websocket的示例代码,2017最后一篇编程探险:WebSocket服务器主动推送_第1张图片
2017最后一篇编程探险:WebSocket服务器主动推送_第2张图片
2017最后一篇编程探险:WebSocket服务器主动推送_第3张图片
2017最后一篇编程探险:WebSocket服务器主动推送_第4张图片
2017最后一篇编程探险:WebSocket服务器主动推送_第5张图片
2017最后一篇编程探险:WebSocket服务器主动推送_第6张图片
2017最后一篇编程探险:WebSocket服务器主动推送_第7张图片
2017最后一篇编程探险:WebSocket服务器主动推送_第8张图片

EchoSocket

package WsEndpoint;

import java.io.IOException;

import javax.websocket.OnClose;
import javax.websocket.OnMessage;
import javax.websocket.OnOpen;
import javax.websocket.Session;
import javax.websocket.server.ServerEndpoint;

@ServerEndpoint("/echoSocket")
public class EchoSocket {
    //多例的 无多线程安全问题
    public EchoSocket() {
        System.out.println("EchoSocket.EchoSocket()");
    }
    @OnOpen 
    //  一个管道创建一个session
    public void open(Session session) {
        System.out.println("EchoSocket.open()" + session.getId());
    }
    @OnMessage
    public void onmessage(Session session,String message) throws IOException {
        System.out.println("client:" + message);
        session.getBasicRemote().sendText("server:" + message);
    }
    @OnClose
    public void close(Session session) {
        System.out.println("EchoSocket.close() + session.getId()");
    }
}

Config

package WsConfig;

import java.util.Set;

import javax.websocket.Endpoint;
import javax.websocket.server.ServerApplicationConfig;
import javax.websocket.server.ServerEndpointConfig;

public class Config implements ServerApplicationConfig {
    @Override
    public Set> getAnnotatedEndpointClasses(Set> scan) {
        System.out.println("Config.getAnnotatedEndpointClasses(): " + scan.size());
        return scan;
    }

    @Override
    public Set getEndpointConfigs(Set> arg0) {
        return null;
    }

}

Index

<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
<%
    String path = request.getContextPath();
    String basePath = request.getScheme() + "://" + request.getServerName() + ":" + request.getServerPort()
            + path + "/";
%>


<html>
<head>
<base href="<%=basePath%>">

<title>My JSP 'index.jsp' starting pagetitle>
<meta http-equiv="pragma" content="no-cache">
<meta http-equiv="cache-control" content="no-cache">
<meta http-equiv="expires" content="0">
<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
<meta http-equiv="description" content="This is my page">

<script type="text/javascript">
    var ws = null; //一个Ws就相当于一个管道,
    var target = 'ws://localhost:8080/WebSocket/echoSocket';
    function WsOpen() {
        if ('WebSocket' in window) {
            ws = new WebSocket(target);
        } else if ('MozWebSocket' in window) {
            ws = new MozWebSocket(target);
        } else {
            alert('WebSocket is not supported by this browser.');
            return;
        }
        ws.onmessage = function(event) {
            textarea = document.getElementsByClassName('textarea2')[0];
            textarea.value = event.data;
        }
    }
    function WsMessage() {
        textarea = document.getElementsByClassName('textarea1')[0];
        ws.send(textarea.value);
        textarea.value = '';
    }
script>
head>
<body>
    This is my JSP page.
    <br>
    <button onclick="WsOpen()">开启openbutton>
    <textarea rows="10" cols="10" class="textarea1">textarea>
    <button onclick="WsMessage()">发送消息button>
    <textarea rows="10" cols="10" class="textarea2">textarea>
body>
html>

好了, 基本操作就这些 接下来的这几天模仿QQ写个简易的聊天室(广播)

你可能感兴趣的:(java,websocket-推送)