如何在Jetty 9中将HTTPConnection升级到WebsocketConnection?

时间:2014-10-04 07:11:14

标签: java sockets websocket jetty jetty-9

我一直在阅读Jetty 9的文档,他们似乎已经摆脱了Jetty Socket Connector。所以现在我们有了一个通用的ServerConnector,我们正在升级"和HTTPConnection到WebSocket连接。我已经阅读了有关Socket vs WebSocket(Difference between socket and websocket?)的文档以及该答案中链接的所有内容。我的问题是:

1)如何从HTTPConnection升级到WebSocket连接?有人可以提供一些示例代码吗?

2)我正在构建一个连接到我正在编写的服务器的桌面应用程序。我需要模拟TCP连接,WebSocketConnection会为我工作吗?我问这个是因为我在浏览器的上下文中大多听说过WebSockets,我想确保它可以在我的客户端应用程序中使用。

谢谢!

2 个答案:

答案 0 :(得分:0)

回答Q1)

我认为对于你的第一个问题,这将有所帮助。有关详细信息,请参阅给定的链接。 Jetty提供了通过使用WebSocketServlet桥接servlet将WebSocket端点连接到Servlet路径规范的功能。 在内部,Jetty管理HTTP升级到WebSocket以及从HTTP连接迁移到WebSocket连接。

链接1:http://www.eclipse.org/jetty/documentation/current/jetty-websocket-server-api.html

回答Q2)

websocket服务器和客户端的全双工通信发生在初始TCP握手中。 对于您的websocket客户端应用程序,可以肯定使用以下工作示例...它是一个纯粹的JAVA WEBSOCKET客户端。我试过了,效果很好。

Link2:http://www.eclipse.org/jetty/documentation/current/jetty-websocket-client-api.html

答案 1 :(得分:0)

WebSocket不是一个裸的TCP连接,让我们先解决这个问题。

它是一个成帧协议,用于TEXT,BINARY和CONTROL帧(控制帧是像PING,PONG,CLOSE这样的小帧)

最好阅读官方协议规范,以便更好地理解这一点:RFC-6455

客户端不需要是浏览器,客户端可以是任何能够发出Web请求的应用程序。

如果符合您的需要,请继续阅读。

Jetty本身使用本机API提供WebSocket服务器和WebSocket客户端实现,并且还支持javax.websocket标准(也称为JSR-356)。

对于Jetty WebSocket服务器,它在org.eclipse.jetty.websocket.server.WebSocketFactory upgrade()私有方法内部执行升级。

如果您选择在Jetty上试验WebSocket,请阅读文档并选择本机API或javax.websocket API,其中任何一个都可以使用。

如果您想了解这些API的不同之处,那么实际上a different question/answer for that