【问题标题】:Websocket with Tyrus in Openshift在 Openshift 中使用 Tyrus 的 Websocket
【发布时间】:2015-01-03 04:17:12
【问题描述】:

我使用 Tyrus 部署了一个 Wildfly 8.1 java 应用程序来管理一个 websocket 服务器,没有什么太复杂的,它只是接收消息并反向响应消息,嗯,它应该可以工作,一切都按照 OpenShift 教程进行,但是在部署时,我在 rhc 尾部收到这条消息:

2015-01-02 21:16:19,314 ERROR [io.undertow.websockets.jsr] (MSC service thread 1
-2) UT026002: Unable to instantiate server configuration class org.glassfish.tyr
us.server.TyrusServerConfiguration: java.lang.InstantiationException: org.glassf
ish.tyrus.server.TyrusServerConfiguration
        at java.lang.Class.newInstance(Class.java:418) [rt.jar:1.8.0_05]
        at org.wildfly.extension.undertow.deployment.UndertowJSRWebSocketDeploym
entProcessor.doDeployment(UndertowJSRWebSocketDeploymentProcessor.java:213)
        at org.wildfly.extension.undertow.deployment.UndertowJSRWebSocketDeploym
entProcessor.deploy(UndertowJSRWebSocketDeploymentProcessor.java:165)
        at org.jboss.as.server.deployment.DeploymentUnitPhaseService.start(Deplo
ymentUnitPhaseService.java:159)
        at org.jboss.msc.service.ServiceControllerImpl$StartTask.startService(Se
rviceControllerImpl.java:1948)
        at org.jboss.msc.service.ServiceControllerImpl$StartTask.run(ServiceCont
rollerImpl.java:1881)
        at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.
java:1142) [rt.jar:1.8.0_05]
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor
.java:617) [rt.jar:1.8.0_05]
        at java.lang.Thread.run(Thread.java:745) [rt.jar:1.8.0_05]
Caused by: java.lang.NoSuchMethodException: org.glassfish.tyrus.server.TyrusServ
erConfiguration.<init>()
        at java.lang.Class.getConstructor0(Class.java:2971) [rt.jar:1.8.0_05]
        at java.lang.Class.newInstance(Class.java:403) [rt.jar:1.8.0_05]
        ... 8 more

当我尝试连接到套接字时,我可以连接,但它可以作为以前的版本工作(没有反转)。

这里是Websocket服务器源:

@ServerEndpoint(value = "/socket")
public class WebSocket {

    private Logger logger = Logger.getLogger(this.getClass().getName());
    private Reconhecedor reconhecedor = new Reconhecedor();

    @OnOpen
    public void onOpen(Session session) {
        logger.info("Connected Recognizer ... " + session.getId());
    }

    @OnMessage
    public String onMessage(String message, Session session) {
        logger.info("String message arrived");

        return new StringBuilder(message).reverse().toString();
    }

    @OnMessage
    public String onMessage(ByteBuffer message, Session session) {
        logger.info("byte message arrived");
        String result = "";
        ByteArrayInputStream baiut = new ByteArrayInputStream(message.array());
        AudioInputStream ais;
        try {
            ais = AudioSystem.getAudioInputStream(baiut);
            result = reconhecedor.Recognize(ais);
            logger.info("returning: " + result);
            //session.close(new CloseReason(CloseCodes.NORMAL_CLOSURE, "Game ended"));
        } catch (Exception e) {
            e.printStackTrace();
        }

        return result;
    }

    @OnClose
    public void onClose(Session session, CloseReason closeReason) {
        logger.info(String.format("Session %s closed because of %s", session.getId(), closeReason));
    }
}

还有,我的服务器源:

public class Programa {

    public static void main(String[] args) {
        runServer();
    }

    public static void runServer() {

        String ip = System.getenv("OPENSHIFT_WILDFLY_IP");
        int port = 8000; 

        Server server = new Server(ip, port, "", WebSocket.class);

        try {
            server.start();
            System.out.print("Please press a key to stop the server.");
            System.in.read();
        } catch (Exception e) {
            throw new RuntimeException(e);
        } finally {
            server.stop();
        }
    }
}

我有点迷路了,不知道还能做什么,似乎 javascript websocket 非常简单并且运行良好,但我需要它 java,因为我将使用该套接字用于 Sphinx CMU。

任何帮助表示赞赏,在此先感谢!

【问题讨论】:

  • 只是猜测。您的端口变量设置正确吗?试试8080?端口是否有 openshift env var?
  • 不幸的是没有,我认为他们自己实例化了 websocket,总是监听端口 8000,我也尝试了一些人推荐的 8080,但是没有任何变化
  • 您最终找到解决方案了吗?我有同样的问题
  • 看起来 tyrus 和所有依赖项都使用了太多资源。不得不把它剪掉并使用原始套接字通信,它起作用了。
  • @H_DANILO 考虑将您的评论变成答案,然后接受它。它使最终实际发生的其他事情变得更加清晰。

标签: java websocket openshift wildfly-8 tyrus


【解决方案1】:

Openshift 有资源限制,我的堆栈是资源密集型的,因为我使用了占用太多资源的语音识别,所以,我没有使用 Tyrus 和 Wildfly,而是使用原始 Java + 纯套接字通信,这解决了问题!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-05-30
    • 1970-01-01
    • 2016-08-23
    • 2014-11-05
    • 1970-01-01
    相关资源
    最近更新 更多