[英]Websocket through Servlet in tomcat
我正在尝试通过servlet实现Web套接字。 我的应用服务器是tomcat 7。
我可以找到使用WebSocketServlet
类的示例。 但是该类已在tomcat 8中弃用并删除。
我看到了另一个替代方法,该方法是使用以下注释该类
@ServerEndpoint(value = "/websocket/test")
我需要帮助来理解
- 如何在servlet中使用此注释? 在使用Web套接字的情况下,servlet是无关的吗?
- 如果我使用上述注释以及其他注释(例如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客户端。 请参考这里
看一下
它使用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.