运行glassfish5的javawebsockets只能在使用localhost时工作,而不能使用内部ip

zrfyljdw  于 2021-07-06  发布在  Java
关注(0)|答案(0)|浏览(224)

我试图让websockets在glassfish5服务器上运行的java上工作。
我有一个用intellij和maven运行java8ee的项目。该项目运行在同时具有ssl端口和非ssl端口的glassfish服务器上。这个项目既有rest端点(比如get),也有websocket端点。我的问题是,我可以使用一个在线工具,如https://www.websocket.org/echo.html 或者其他一些工具来访问我的websocket端点,当我使用localhost而不是我的内部ip时。这意味着我无法从网络上需要的其他设备访问websocket端点。
正如我之前所说的,我也有一个常规的rest端点,但是这在localhost和通过我的内部ip都非常有效。从其他设备访问此rest终结点没有问题。有没有什么想法可以导致websockets只在本地工作?可能是webapplication服务器问题吗?
这是我在本地工作的websocket代码。

@ServerEndpoint("/engage_wss")
public class Websocket {

    @OnOpen
    public void onOpen(Session session) throws InterruptedException, IOException, SQLException, IllegalObjectTypeException, ObjectDoesNotExistException, ErrorCompletingRequestException, AS400SecurityException {

 System.out.println("Hello::" +  session.getId());

     //do stuff

    }
    @OnClose
    public void onClose(Session session) {
        System.out.println("onClose::" +  session.getId());
    }

    @OnMessage
    public void onMessage(String message, Session session) {
        System.out.println("onMessage::From=" + session.getId() + " Message=" + message);

        try {
            session.getBasicRemote().sendText("Hello Client " + session.getId() + "!");
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    @OnError
    public void onError(Throwable t) {
        System.out.println("onError::" + t.getMessage());
    }
}

websocket和rest enpoint都在同一个文件夹中,并且都由同一个servlet提供服务

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"
         version="3.1">
    <servlet>
        <servlet-name>JerseyRESTService</servlet-name>
        <servlet-class>org.glassfish.jersey.servlet.ServletContainer</servlet-class>
        <init-param>
            <param-name>jersey.config.server.provider.packages</param-name>
            <param-value>main.java.Badgepass.Engage_RealTime_API.Resources</param-value>

        </init-param>
        <load-on-startup>1</load-on-startup>
        <async-supported>true</async-supported>
    </servlet>
    <servlet-mapping>
        <servlet-name>JerseyRESTService</servlet-name>
        <url-pattern>/*</url-pattern>
    </servlet-mapping>

</web-app>

感谢您的关注,希望您能推荐任何想法或解决方案。

暂无答案!

目前还没有任何答案,快来回答吧!

相关问题