【问题标题】:java websockets onMessage return InputStream to frontend javascriptjava websockets onMessage将InputStream返回到前端javascript
【发布时间】:2014-07-28 14:57:46
【问题描述】:

我遇到了一些帖子,没有一个真正回答了我的问题,我也一直在提出问题,但只是为了研究更多死胡同而推迟......

所以问题来了,使用 j2ssh 库建立 ssh 连接:

@OnMessage
    public String handleOpen(Session usersession) { 
    System.out.println("Client is now connected.")

    properties = new SshConnectionProperties();
    properties.setHost(host)
    properties.setPort(sshPort)
    ssh.connect(properties, new IgnoreHostKeyVerification())
    int result=0

        PasswordAuthenticationClient pwd = new PasswordAuthenticationClient()
        pwd.setUsername(username)
        pwd.setPassword(password)
        result = ssh.authenticate(pwd)
        if(result == 4)  {
            isAuthenticated=true
        }

    // Evaluate the result
    if (isAuthenticated) {
        session = ssh.openSessionChannel()
        SessionOutputReader sor = new SessionOutputReader(session)
        if (session.requestPseudoTerminal("gogrid",80,24, 0 , 0, "")) {
            if (session.startShell()) {
                ChannelOutputStream out = session.getOutputStream()
                session.getOutputStream().write("${usercommand} \n".getBytes())
                println "--------------------------------authenticated user"
                handleMessage(session.getInputStream(),usersession)
             }
          }
    }

}

@OnMessage
public void handleMessage(InputStream stream, Session usersession) {
    try {

        usersession.getBasicRemote().sendText('SOMETHING')
        usersession.getBasicRemote().sendObject(stream)
        //return stream

    } catch (IOException e) {
    }
}

我想做的是让handleMessage返回整个inputStream

然后在客户端网页上的 javascript 中接收该输入流:

...
    webSocket.onmessage=function(message) {processMessage(message);};
var THRESHOLD = 10240;
...
    function processMessage(message) {
        //webSocket.send(textMessage.value);
        //textMessage.value="";
        messagesTextarea.value +=" woot woot woot\n";
        if(message.data instanceof ArrayBuffer) {

              var wordarray = new Uint16Array(message.data);
              for (var i = 0; i < wordarray.length; i++) 
                    {
                      console.log(wordarray[i]);
                      wordarray[i]=wordarray[i]+1;
                   }

              messagesTextarea.value +=""+wordarray.buffer+"\n"
            }else{
                messagesTextarea.value +=""+message.data+"\n"
            }

        /*
        setInterval( function() {
        //messagesTextarea.value +=" Receive from Server ===> "+ message.data +"\n";
            if (webSocket.bufferedAmount < THRESHOLD)  {
                if ((message.data != null)&&(message.data !="")) { 
                messagesTextarea.value +=" got from Server ===> ("+message.data+")";
                }
            }   }, 5000);
        */
    }

目标是启动 ssh 连接(实际上不需要输入 - 尽管输入将有利于进一步的客户端调用...

连接后运行

handleMessage(session.getInputStream(),usersession)

然后,这会将来自连接的流返回到 javascript 前端。

目前我可以看到与 handleMessage 的连接,但没有任何内容返回到 javascript 前端...

所以我猜它与如何通过 javascript 前端流式传输输入流有关.....

【问题讨论】:

    标签: java javascript websocket


    【解决方案1】:

    我实际上已经开始工作了——目前正在进行大量测试:

    Java 端点:

    @OnMessage
        public void handleMessage(String message, Session usersession) {
                InputStream input=session.getInputStream()
                byte[] buffer=new byte[255]
                int read;
                int i=0
                def pattern = ~/^\s+$/
                while((read = input.read(buffer)) > 0)  {
                    String out1 = new String(buffer, 0, read)
                    def m=pattern.matcher(out1).matches()
                    if (m==false) {
                         usersession.getBasicRemote().sendText(out1)
                    }
                }
        }
    

    前端 Java 脚本(请注意,如果调用,则调用未命中数组)

    function processMessage(message) {
            if(message.data instanceof ArrayBuffer) {
                var wordarray = new Uint16Array(message.data);
                for (var i = 0; i < wordarray.length; i++) {
                    console.log(wordarray[i]);
                    wordarray[i]=wordarray[i]+1;
                }
                messagesTextarea.value +=""+wordarray.buffer+"\n"
            }else{
                messagesTextarea.value +=""+message.data+"\n"
            }
        }
    

    【讨论】:

      猜你喜欢
      • 2013-03-08
      • 1970-01-01
      • 2017-05-19
      • 1970-01-01
      • 2012-05-28
      • 2020-06-18
      • 2023-03-22
      • 2020-10-22
      • 1970-01-01
      相关资源
      最近更新 更多