Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/scala/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Websocket连接握手超时_Java_Scala_Websocket_Playframework 2.3 - Fatal编程技术网

Java Websocket连接握手超时

Java Websocket连接握手超时,java,scala,websocket,playframework-2.3,Java,Scala,Websocket,Playframework 2.3,有人能给我指出正确的方向吗?有一些版本不匹配的问题导致异常和JVM提前退出,我能够清除所有这些问题,但这一个并没有给出任何线索 Chrome控制台显示错误“握手超时” scala编译后的Edit::Javascript var WS = window['MozWebSocket'] ? MozWebSocket : WebSocket var chatSocket = new WS("@routes.Application.chat(chatname, username).webSocketUR

有人能给我指出正确的方向吗?有一些版本不匹配的问题导致异常和JVM提前退出,我能够清除所有这些问题,但这一个并没有给出任何线索

Chrome控制台显示错误“握手超时”

scala编译后的Edit::Javascript

var WS = window['MozWebSocket'] ? MozWebSocket : WebSocket
var chatSocket = new WS("@routes.Application.chat(chatname, username).webSocketURL(request)")
后端 控制器-Java 8

GET     /                                controllers.Application.index()
GET     /room                          controllers.Application.chatRoom(chatname: String ?= null, username: String ?= null)
GET     /room/chat                       controllers.Application.chat(chatname, username)
GET     /assets/javascripts/chatroom.js  controllers.Application.chatRoomJs(chatname, username)

# Map static resources from the /public folder to the /assets URL path
GET     /assets/*file                    controllers.Assets.at(path="/public", file)
来源


前端 jQuery

Javascript: 这就是我们在这里使用的模式:

import akka.actor.*;

public class MyWebSocketActor extends UntypedActor {

    public static Props props(ActorRef out) {
        return Props.create(MyWebSocketActor.class, out);
    }

    private final ActorRef out;

    public MyWebSocketActor(ActorRef out) {
        this.out = out;
    }

    public void onReceive(Object message) throws Exception {
        if (message instanceof String) {
            out.tell("I received your message: " + message, self());
        }
    }
}

网袋试验
var wsUri=“ws://YOUR\u URL”;//对于https连接,它应该是wss://
var输出;
函数init()
{
输出=document.getElementById(“输出”);
testWebSocket();
}
函数testWebSocket()
{
websocket=新的websocket(wsUri);
websocket.onopen=函数(evt){onopen(evt)};
websocket.onclose=函数(evt){onclose(evt)};
websocket.onmessage=函数(evt){onmessage(evt)};
websocket.onerror=函数(evt){onerror(evt)};
}
功能开启(evt)
{
写屏(“连接”);
doSend(“网岩”);
}
函数onClose(evt)
{
写屏(“断开”);
}
消息函数(evt)
{
writeToScreen('响应:'+evt.data+'');
websocket.close();
}
函数onError(evt)
{
writeToScreen('错误:'+evt.data);
}
函数doSend(消息)
{
writeToScreen(“已发送:+消息”);
发送(消息);
}
功能写入屏幕(消息)
{
var pre=document.createElement(“p”);
pre.style.wordWrap=“断开单词”;
pre.innerHTML=消息;
输出.appendChild(pre);
}
addEventListener(“加载”,init,false);
网袋试验

我需要更多信息,编译scala模板后,您的最终java脚本是什么?这里有一些说明:这里我们使用了
@routes.Application.chat(chatname,username).webSocketURL()
,没有请求参数,但它是用于播放2.2.6。另外,检查https/http和wss/ws的兼容性。您使用的是apache还是nginx?如果是,您需要将其配置为接受WS-protocol。希望有帮助……)尝试验证您的后端:@nipo-使用最终JavascriptI编辑了我的问题,我在WS中添加了[chat,superchat]协议,但没有帮助<代码>接受编码:gzip,deflate,sdch接受语言:en-US,en;q=0.8缓存控制:无缓存连接:升级主机:本地主机:9000来源:http://localhost:9000 Pragma:no-cache-Sec-WebSocket扩展:permessage-deflate;客户端\u最大\u窗口\u比特秒WebSocket密钥:Nf5L84QTL3GbFc452rIOCA==秒WebSocket协议:聊天,superchat秒WebSocket版本:13升级:WebSocket用户代理:Mozilla/5.0(Macintosh;英特尔Mac OS X 10\u 10\u 2)AppleWebKit/537.36(KHTML,如Gecko)Chrome/49.0.2623.87…您尝试过使用连接吗?这只是为了验证您的后端,之后您可以尝试遵循我现在发布的答案中的模式。
GET     /                                controllers.Application.index()
GET     /room                          controllers.Application.chatRoom(chatname: String ?= null, username: String ?= null)
GET     /room/chat                       controllers.Application.chat(chatname, username)
GET     /assets/javascripts/chatroom.js  controllers.Application.chatRoomJs(chatname, username)

# Map static resources from the /public folder to the /assets URL path
GET     /assets/*file                    controllers.Assets.at(path="/public", file)
import play.mvc.WebSocket;

public static WebSocket<String> socket() {
    return WebSocket.withActor(MyWebSocketActor::props);
}
public static WebSocket<String> socket() {
    return WebSocket.withActor(new Function<ActorRef, Props>() {
        public Props apply(ActorRef out) throws Throwable {
            return MyWebSocketActor.props(out);
        }
    });
}
import akka.actor.*;

public class MyWebSocketActor extends UntypedActor {

    public static Props props(ActorRef out) {
        return Props.create(MyWebSocketActor.class, out);
    }

    private final ActorRef out;

    public MyWebSocketActor(ActorRef out) {
        this.out = out;
    }

    public void onReceive(Object message) throws Exception {
        if (message instanceof String) {
            out.tell("I received your message: " + message, self());
        }
    }
}
<!DOCTYPE html>
  <meta charset="utf-8" />
  <title>WebSocket Test</title>
  <script language="javascript" type="text/javascript">

  var wsUri = "ws://YOUR_URL"; // it should be wss:// for https connections
  var output;

  function init()
  {
    output = document.getElementById("output");
    testWebSocket();
  }

  function testWebSocket()
  {
    websocket = new WebSocket(wsUri);
    websocket.onopen = function(evt) { onOpen(evt) };
    websocket.onclose = function(evt) { onClose(evt) };
    websocket.onmessage = function(evt) { onMessage(evt) };
    websocket.onerror = function(evt) { onError(evt) };
  }

  function onOpen(evt)
  {
    writeToScreen("CONNECTED");
    doSend("WebSocket rocks");
  }

  function onClose(evt)
  {
    writeToScreen("DISCONNECTED");
  }

  function onMessage(evt)
  {
    writeToScreen('<span style="color: blue;">RESPONSE: ' + evt.data+'</span>');
    websocket.close();
  }

  function onError(evt)
  {
    writeToScreen('<span style="color: red;">ERROR:</span> ' + evt.data);
  }

  function doSend(message)
  {
    writeToScreen("SENT: " + message);
    websocket.send(message);
  }

  function writeToScreen(message)
  {
    var pre = document.createElement("p");
    pre.style.wordWrap = "break-word";
    pre.innerHTML = message;
    output.appendChild(pre);
  }

  window.addEventListener("load", init, false);

  </script>

  <h2>WebSocket Test</h2>

  <div id="output"></div>