Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/378.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
Javascript 在google计算引擎实例上Websocket连接失败_Javascript_Java_Websocket_Google Compute Engine - Fatal编程技术网

Javascript 在google计算引擎实例上Websocket连接失败

Javascript 在google计算引擎实例上Websocket连接失败,javascript,java,websocket,google-compute-engine,Javascript,Java,Websocket,Google Compute Engine,我正在测试一个使用javascript websocket连接的聊天服务应用程序(javascript和java)。在我自己的机器上一切正常。我在我的谷歌计算引擎(GCE)实例上部署了该应用程序。当我尝试使用聊天室服务时,连接失败(错误代码:1006)。我将在下面发布相关代码 websocket连接的javascript代码为 var server; try { server = new WebSocket('ws:

我正在测试一个使用javascript websocket连接的聊天服务应用程序(javascript和java)。在我自己的机器上一切正常。我在我的谷歌计算引擎(GCE)实例上部署了该应用程序。当我尝试使用聊天室服务时,连接失败(错误代码:1006)。我将在下面发布相关代码

websocket连接的javascript代码为

            var server;
            try {
                server = new WebSocket('ws://' + window.location.host +
                        '<c:url value="/chat/${chatSessionId}" />');
                server.binaryType = 'arraybuffer';
            } catch(error) {
                modalErrorBody.text(error);
                modalError.modal('show'); 
                return;
            }

            server.onerror = function(event) {
                modalErrorBody.text(event.data);
                modalError.modal('show');
            };
var服务器;
试一试{
服务器=新WebSocket('ws://'+window.location.host+
'');
server.binaryType='arraybuffer';
}捕获(错误){
文本(错误);
modalError.modal('show');
返回;
}
server.onerror=函数(事件){
text(event.data);
modalError.modal('show');
};
我尝试了以下几种选择

  • 将window.location.host替换为实例的实际外部IP地址(***如下)
  • server=newwebsocket('ws://***.*.*'+''

  • 在外部IP地址后添加端口号
  • server=newwebsocket('ws://****.*:80'+''

    这些都不管用。相同的错误消息(错误代码:1006)

    以下是代码的java部分:

    @ServerEndpoint(value = "/chat/{sessionId}",
            encoders = ChatMessageCodec.class,
            decoders = ChatMessageCodec.class,
            configurator = ChatEndpoint.EndpointConfigurator.class)
    @WebListener
    public class ChatEndpoint implements HttpSessionListener
    {
        private static final String HTTP_SESSION_PROPERTY = "com.wrox.ws.HTTP_SESSION";
        private static final String WS_SESSION_PROPERTY = "com.wrox.http.WS_SESSION";
        private static long sessionIdSequence = 1L;
        private static final Object sessionIdSequenceLock = new Object();
        private static final Map<Long, ChatSession> chatSessions = new Hashtable<>();
        private static final Map<Session, ChatSession> sessions = new Hashtable<>();
        private static final Map<Session, HttpSession> httpSessions =
                new Hashtable<>();
        public static final List<ChatSession> pendingSessions = new ArrayList<>();
    
        @OnOpen
        public void onOpen(Session session, @PathParam("sessionId") long sessionId)
        {
            ...
        }
        @OnMessage
        ...
        @OnClose
        ...
    }
    
    @ServerEndpoint(value=“/chat/{sessionId}”,
    编码器=ChatMessageCodec.class,
    解码器=ChatMessageCodec.class,
    configurator=ChatEndpoint.EndpointConfigurator.class)
    @网络监听器
    公共类ChatEndpoint实现HttpSessionListener
    {
    私有静态最终字符串HTTP\u SESSION\u PROPERTY=“com.wrox.ws.HTTP\u SESSION”;
    私有静态最终字符串WS\u SESSION\u PROPERTY=“com.wrox.http.WS\u SESSION”;
    私有静态长会话序列=1L;
    私有静态最终对象sessiondSequenceLock=新对象();
    私有静态最终映射chatSessions=newhashtable();
    私有静态最终映射会话=新哈希表();
    私有静态最终映射httpSessions=
    新哈希表();
    public static final List pendingSessions=new ArrayList();
    @奥诺彭
    public void onOpen(Session Session,@PathParam(“sessionId”)long sessionId)
    {
    ...
    }
    @OnMessage
    ...
    @一次
    ...
    }
    
    我发现在tomcat的server.xml中,以下部分被注释掉了,这导致了问题

    <Connector port="8080" protocol="HTTP/1.1"
               connectionTimeout="20000"
               redirectPort="8443" />