我正在尝试编写一个使用org.apache.catalina.websocket.WebSocketServlet
的servlet。我发现了一个websocket聊天的例子,但我不知道如何指定一个websocket服务器的监听端口(在这个servlet中实现)?例如,我需要听取端口11337
上的客户端连接。但我怎么能表达这一点?tomcat websocket servlet侦听端口
OK,这里是(简化)代码:
public class TestServlet extends WebSocketServlet {
private static final Logger logger = LoggerFactory.getLogger(TestServlet.class);
public TestServlet() {
logger.error("Initializing TestServlet");
}
@Override
protected StreamInbound createWebSocketInbound(String subProtocol, HttpServletRequest request) {
logger.error("New WS connection, subProtocol=" + subProtocol + ", request=" + request.getRequestURL());
return new TestConnection();
}
private class TestConnection extends MessageInbound {
@Override
protected void onBinaryMessage(ByteBuffer byteBuffer) throws IOException {
logger.error("onBinaryMessage");
}
@Override
protected void onTextMessage(CharBuffer charBuffer) throws IOException {
logger.error("onBinaryMessage: " + charBuffer);
sendMessage("Test message");
}
public void sendMessage(String message) {
WsOutbound outbound = this.getWsOutbound();
CharBuffer cb = CharBuffer.wrap(message);
try {
outbound.writeTextMessage(cb);
} catch (IOException e) {
logger.error("failed to write outbound");
}
}
}
}
我找不到在哪里以及如何设置监听端口。官方websocket文件也没有多大帮助。
所以我想它可以在servlet设置的某个地方设置,但无法找到位置。
有没有人有任何想法?
根据RFC6455,您需要从客户端发出HTTP请求以“打开”套接字。没有使用端口号。 – jalynn2
@ jalynn2,实际上我需要从每个客户端到服务器的两个连接(安全和非安全)。这些连接必须由一个servlet提供。所以我想我需要单独的端口(例如8443和8444)。客户端使用'libwebsockets'库以C++实现,该库允许指定服务器的端口连接。我认为答案在'server.xml'和'Connector'元素的某个地方,但我在网上找不到任何有用的东西。 – maverik
你确实在Tomcat下运行,还是使用Tomcat的类编写自己的服务器? –