繁体   English   中英

通过tomcat中的Servlet的Websocket

[英]Websocket through Servlet in tomcat

我正在尝试通过servlet实现Web套接字。 我的应用服务器是tomcat 7。

我可以找到使用WebSocketServlet类的示例。 但是该类已在tomcat 8中弃用并删除。

我看到了另一个替代方法,该方法是使用以下注释该类

@ServerEndpoint(value = "/websocket/test")

我需要帮助来理解

  1. 如何在servlet中使用此注释? 在使用Web套接字的情况下,servlet是无关的吗?
  2. 如果我使用上述注释以及其他注释(例如onOpen,onClose等)创建普通类,是否需要将该类的条目放入web.xml中? 还是web.xmls也无关紧要?

任何hello world链接也将非常有帮助。

谢谢。 ===============================我尝试了此链接http://svn.apache中的聊天示例.org / viewvc / tomcat / trunk / webapps / examples / WEB-INF / classes / websocket /

但是当我尝试通过javascript调用套接字时,这些事件根本没有到达我的服务器。

终于我明白了。 所以我在这里回答供其他人参考。

1)如何在Servlet中使用此注释? 在使用Web套接字的情况下,servlet是无关的吗?

显然是的,我们不需要Web套接字的servlet。

2)如果我使用上述注释以及其他注释(例如onOpen,onClose等)创建普通类,是否需要将该类的条目放在web.xml中? 还是web.xmls也无关紧要?

在web.xml中也不需要条目。

以下是示例服务器端代码。

@ServerEndpoint(value = "/echo")
public class Echo {

    @OnOpen
    public void start(Session session) {
        //TODO
    }

    @OnClose
    public void end() {
        //TODO
    }

    @OnMessage
    public void incoming(String message) {
        //TODO
    }

    @OnError
    public void onError(Throwable t) throws Throwable {
        //TODO
    }

}

对于客户端,如果您具有兼容HTML5的浏览器,则可以使用Javascript。 否则,您将使用tyrus库编写Java客户端。 请参考这里

看一下

https://github.com/Atmosphere/atmosphere/wiki/Getting-Started-with-The-Atmosphere-Framework-and-WebSocket

它使用WebSocket进行主要传输,并使用长轮询进行后备传输。

客户端使用他们的atmosphere.js jQuery插件实现

使用HTML5浏览器,我也获得了一些成功

 $(document).ready(function(){

    var TS = {};

    TS.socket = null;

    TS.connect = (function(host) {
        if ('WebSocket' in window) {
            TS.socket = new WebSocket(host);
        } else if ('MozWebSocket' in window) {
            TS.socket = new MozWebSocket(host);
        } else {
           alert('Error: WebSocket is not supported by this browser.');
            return;
        }

        TS.socket.onmessage = function (message) {
            //Console.log(message.data);
            $("#myd").text (message.data);
        };
    });

    TS.initialize = function() {
        if (window.location.protocol == 'http:') {
            TS.connect('ws://' + window.location.host + '/gwebsocket/gwebsocket/servertime');
        } else {
            TS.connect('wss://' + window.location.host + '/gwebsocket/gwebsocket/servertime');
        }
    };

    TS.initialize();

});

@ServerEndpoint("/gwebsocket/servertime")

....

@OnOpen
public void openConnection(Session session) {

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM