2016-09-13 70 views
0

我正在用websocket尝试应用程序。作为服务器我用Glassfish,工作正常,但我有一个websocket的问题。Glassfish websocket不能正常工作

当我运行HTML与JavaScript的控制台是错误404

的web.xml

<?xml version="1.0" encoding="UTF-8"?> 
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" 
    xsi:schemaLocation="http://java.sun.com/xml/ns/javaee 
    http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" 
    id="WebApp_ID" version="3.0"> 

    <display-name>Simple web application </display-name> 

</web-app> 

的build.gradle

repositories { 
    mavenCentral() 
    mavenLocal() 
    jcenter() 
} 
apply plugin: "java" 
apply plugin: 'application' 
apply plugin: 'war' 

mainClassName = "websockets.WebSocketServer" 
version = '1.0' 


dependencies { 
    compile 'javax.inject:javax.inject:1' 
    compile 'com.google.inject:guice:4.0' 
    compile 'javax.websocket:javax.websocket-api:1.0' 
    compile 'org.glassfish.tyrus:tyrus-server:1.1' 
    compile 'org.glassfish.tyrus:tyrus-client:1.0' 
    compile 'org.glassfish.tyrus:tyrus-container-grizzly:1.0' 
    compile 'javax:javaee-api:7.0' 

    testCompile 'info.cukes:cucumber-java:1.2.4' 
    testCompile 'info.cukes:cucumber-junit:1.2.4' 
    testCompile 'junit:junit:4.11' 
    testCompile "org.mockito:mockito-core:2.0.86-beta" 
} 

sourceSets { 
    main.java.srcDir "src/java" 
    test.java.srcDir "src/test" 
    main.resources.srcDir 'src/resources' 
    main.resources.include '**/*.xml' 
    main.resources.include 'META-INF/services/**' 
} 

processResources.doLast { 
    copy { 
     from 'build/resources/main/META-INF/beans.xml' 
     into 'build/classes/main/META-INF/' 
    } 
} 
task fatJar(type: Jar) { 
    manifest { 
     attributes 'Implementation-Title': 'Gradle Jar File Example', 
       'Implementation-Version': version, 
       'Main-Class': 'websockets.WebSocketServer' 
    } 
    baseName = project.name + '-all' 
    from { configurations.compile.collect { it.isDirectory() ? it : zipTree(it) } } { 
     exclude "META-INF/*.SF" 
     exclude "META-INF/*.DSA" 
    } 
     with jar 
} 

war { 
manifest { 
    attributes 'Main-Class': 'websockets.WebSocketServer' 
    } 
} 
在SRC

/主/ JAVA /的WebSockets有我WebSocketServer .java

package websockets; 


import java.io.BufferedReader; 
import java.io.InputStreamReader; 
import java.net.ServerSocket; 
import java.net.Socket; 
import java.io.IOException; 

import javax.websocket.OnClose; 
import javax.websocket.OnMessage; 
import javax.websocket.OnOpen; 
import javax.websocket.Session; 
import javax.websocket.OnOpen; 
import javax.websocket.OnError; 
import javax.websocket.server.ServerEndpoint; 

@ServerEndpoint("/websocket") 
public class WebSocketServer { 

    @OnMessage 
    public void onMessage(String message, Session session) 
    throws IOException, InterruptedException { 

     // Print the client message for testing purposes 
     System.out.println("Received: " + message); 

     // Send the first message to the client 
     session.getBasicRemote().sendText("This is the first server message"); 

     // Send 3 messages to the client every 5 seconds 
     int sentMessages = 0; 
     while(sentMessages < 3){ 
      Thread.sleep(5000); 
      session.getBasicRemote(). 
      sendText("This is an intermediate server message. Count: " 
        + sentMessages); 
      sentMessages++; 
     } 

     // Send a final message to the client 
     session.getBasicRemote().sendText("This is the last server message"); 
    } 

    @OnOpen 
    public void onOpen() { 
     System.out.println("Client connected"); 
    } 

    @OnClose 
    public void onClose() { 
     System.out.println("Connection closed"); 
    } 

    @OnError 
    public void onError(Session aclientSession, Throwable aThrowable) { 
     System.out.println("Error : " + aclientSession); System.out.println("Error :" + aThrowable); 
    } 
} 

Gradle制造无误。当我运行在http://192.168.37.10:8080/web/page.html(流浪的虚)应用

投掷错误:

WebSocket连接到 'WS://本地主机:8080 /网络/网页套接字' 失败:在网页套接字握手 错误:意外响应代码:404

在上下文根GlassFish中添加应用程序:网络

有什么不对?你可以帮我吗?请。谢谢你:)

回答

-1

将其添加下列选项后的工作:

atmosphere.addInitParameter(ApplicationConfig.PROPERTY_NATIVE_COMETSUPPORT, "true"); 
atmosphere.addInitParameter(ApplicationConfig.WEBSOCKET_SUPPRESS_JSR356, "true"); 

或者在web.xml:

<init-param> 
    <param-name>org.atmosphere.useNative</param-name> 
    <param-value>true</param-value> 
</init-param> 
+0

可有人请评论,什么是他的不适与此解决方案? – Tires