我正在尝试通过servlet实现Web套接字。我的app服务器是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调用套接字时,事件根本没有到达我的服务器....
答案 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)
看看
它使用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) {