在tomcat中通过Servlet的Websocket

时间:2014-05-02 04:25:15

标签: java tomcat servlets websocket

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

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

我看到另一个替代方案,即使用以下

注释该类
@ServerEndpoint(value = "/websocket/test")

我需要帮助才能理解,

  
      
  1. 我如何在servlet中使用此注释?对于Web套接字,servlet是否无关紧要?
  2.   
  3. 如果我创建一个带有上述注释的普通类,以及其他注释,如onOpen,onClose等,我是否需要输入   web.xml中的那个类?或者web.xmls也无关紧要?
  4.   

任何hello world链接也会非常有用。

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

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

2 个答案:

答案 0 :(得分:3)

最后我想出来了。所以我在这里回答别人的推荐。

1)我如何在servlet中使用这个注释?对于Web套接字,servlet是否无关紧要?

  

显然是的,我们不需要用于网络套接字的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
    }

}

对于客户端,您可以使用Javascript,因为您有一个HTML5兼容的浏览器。 否则,您使用tyrus库编写Java客户端。请参阅here

答案 1 :(得分:1)

看看

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) {
相关问题