首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >嵌入式Jetty9 + Websockets。onWebSocketText说我没有联网

嵌入式Jetty9 + Websockets。onWebSocketText说我没有联网
EN

Stack Overflow用户
提问于 2013-04-26 20:04:40
回答 3查看 1.3K关注 0票数 0

我在我的应用中使用Jetty 9.0.2.v20130417 (在Java 1.7下)

Servlet:

代码语言:javascript
复制
import org.eclipse.jetty.websocket.api.UpgradeRequest;
import org.eclipse.jetty.websocket.api.UpgradeResponse;
import org.eclipse.jetty.websocket.servlet.WebSocketCreator;
import org.eclipse.jetty.websocket.servlet.WebSocketServlet;
import org.eclipse.jetty.websocket.servlet.WebSocketServletFactory;

public class WSServletHandler extends WebSocketServlet
{

    private static final long serialVersionUID = 6600543852415589642L;

    public static class WSCustomCreator implements WebSocketCreator
    {
        @Override
        public Object createWebSocket(UpgradeRequest req, UpgradeResponse resp)
        {
            return new WSSocketHandler();
        }
    }

    @Override
    public void configure(WebSocketServletFactory factory)
    {
        factory.setCreator(new WSCustomCreator());
    }
}

Websocket处理程序:

代码语言:javascript
复制
import org.eclipse.jetty.websocket.api.Session;
import org.eclipse.jetty.websocket.api.WebSocketAdapter;
import org.eclipse.jetty.websocket.api.WebSocketException;


public class WSSocketHandler extends WebSocketAdapter
{
    public WSSocketHandler()
    {
        System.out.println("+++ Websocket class constructor");
    }

    public void onWebSocketConnect(Session sess)
    {
        System.out.println("+++ Websocket Connect from " + sess.getRemoteAddress().getAddress());   
    }

    @Override
    public void onWebSocketError(Throwable e)
    {
        System.out.println("+++ Websocket Error " + e.getMessage());
        e.printStackTrace();        
    }

    @Override
    public void onWebSocketClose(int statusCode, String reason)
    {
        System.out.println("+++ Websocket close " + statusCode + " , " + reason);
    }

    public void onWebSocketException(WebSocketException e)
    {
        System.out.println("+++ Websocket Exception " + e.getMessage());
        e.printStackTrace();
    }

    @Override
    public void onWebSocketBinary(byte[] payload, int offset, int len)
    {
        System.out.println("+++ ignoring binary message");
    }

    @Override
    public void onWebSocketText(String message)
    {
        System.out.println("+++ MESSAGE: " + message);

        if (isNotConnected())
        {
            System.out.println("+++ not connected");
            return;
        }

        try {
            getRemote().sendString("lallo");
        } catch (Exception e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }

}

我可以从javascript连接到jetty Server,并且可以从js向Jetty发送消息。我在onWebSocketText函数中看到了这条消息。问题是: isNotConnected()总是真的,所以不会返回给浏览器。我没有在浏览器的Jetty或Javascript中得到任何错误。

码头日志:http://pastebin.com/Qq2EynFJ

我快没主意了.我很确定我错过了一些重要的东西,但是:我在java下有一个类似的测试,使用的是jetty和java的完全相同的版本。唯一的区别是上面的代码是一个更大的应用程序的一部分,而简短的测试是一个独立的程序。

提前感谢

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2013-04-27 01:12:04

不确定您在哪里定义了isNotConnected方法,但您可以根据您的示例执行类似的操作。

代码语言:javascript
复制
public void onWebSocketConnect(Session sess){
        System.out.println("+++ Websocket Connect from " + sess.getRemoteAddress().getAddress());  
        this.session=sess;
}

 public void onWebSocketText(String message){
    if(this.session.isOpen()){
    }
}
票数 0
EN

Stack Overflow用户

发布于 2013-04-27 22:58:54

杜瓦是对的。

如果我摆脱了onWebSocketConnect,一切都能正常工作。

使用onWebSocketConnect时,您必须将会话保存在某个位置(如Joakim在第一个答案中所示)。在此之后,您必须使用this.sess。例如this.sess.getRemote()、.sendString或this.sess.isOpen()

感谢您的帮助:)

票数 0
EN

Stack Overflow用户

发布于 2014-03-24 12:11:17

尝试在方法内调用父级的onWebSocketConnect实现

代码语言:javascript
复制
public void onWebSocketConnect(Session session){
     // your code here
     super.onWebSocketConnect(session);   
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16235998

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档