Websocket:是不是可以从程序中知道调用 onClose 的原因是啥
Posted
技术标签:
【中文标题】Websocket:是不是可以从程序中知道调用 onClose 的原因是啥【英文标题】:Websocket : Is it possible to know from the program what is the reason for onClose being calledWebsocket:是否可以从程序中知道调用 onClose 的原因是什么 【发布时间】:2013-04-15 03:34:21 【问题描述】:我有一个示例 WebSocket 程序,它可以正常工作
当用户关闭浏览器或有任何异常或任何断开连接时,onClose 方法是 被叫
我的问题是,是否有可能从程序中知道调用 onClose 的原因是什么? 请分享您的观点,感谢阅读。
public class html5Servlet extends WebSocketServlet
private AtomicInteger index = new AtomicInteger();
private static final List<String> tickers = new ArrayList<String>();
static
tickers.add("ajeesh");
tickers.add("peeyu");
tickers.add("kidillan");
tickers.add("entammo");
/**
*
*/
private static final long serialVersionUID = 1L;
public WebSocket doWebSocketConnect(HttpServletRequest req, String resp)
//System.out.println("doWebSocketConnect");
return new StockTickerSocket();
protected String getMyJsonTicker() throws Exception
return "";
public class StockTickerSocket implements WebSocket.OnTextMessage
private Connection connection;
private Timer timer;
@Override
public void onClose(int arg0, String arg1)
System.out.println("onClose called!"+arg0);
@Override
public void onOpen(Connection connection)
//System.out.println("onOpen");
this.connection=connection;
this.timer=new Timer();
@Override
public void onMessage(String data)
//System.out.println("onMessage");
if(data.indexOf("disconnect")>=0)
connection.close();
timer.cancel();
else
sendMessage();
public void disconnect()
System.out.println("disconnect called");
public void onDisconnect()
System.out.println("onDisconnect called");
private void sendMessage()
if(connection==null||!connection.isOpen())
//System.out.println("Connection is closed!!");
return;
timer.schedule(new TimerTask()
@Override
public void run()
try
//System.out.println("Running task");
connection.sendMessage(getMyJsonTicker());
catch (IOException e)
e.printStackTrace();
catch (Exception e)
// TODO Auto-generated catch block
e.printStackTrace();
, new Date(),5000);
【问题讨论】:
【参考方案1】:onClose
的签名如下...
@Override
public void onClose(int closeCode, String closeReason)
System.out.println("onClose called - statusCode = " + closeCode);
System.out.println(" reason = " + closeReason);
其中int closeCode
是registered Close Status Codes 中的任何一个。
而String closeReason
是可选的 (per protocol spec) 关闭原因消息。
【讨论】:
以上是关于Websocket:是不是可以从程序中知道调用 onClose 的原因是啥的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 websocket 检查消息是不是真的在 Netty 中传递?
Android - WebSocket - 从最近使用的应用程序清除应用程序时,连接从服务中删除
NodeJS中的Websockets。从服务器端WebSocket客户端调用WebSocketServer