我一直在阅读Jetty 9的文档,他们似乎已经摆脱了Jetty Socket Connector。所以现在我们有了一个通用的ServerConnector,我们正在升级"和HTTPConnection到WebSocket连接。我已经阅读了有关Socket vs WebSocket(Difference between socket and websocket?)的文档以及该答案中链接的所有内容。我的问题是:
1)如何从HTTPConnection升级到WebSocket连接?有人可以提供一些示例代码吗?
2)我正在构建一个连接到我正在编写的服务器的桌面应用程序。我需要模拟TCP连接,WebSocketConnection会为我工作吗?我问这个是因为我在浏览器的上下文中大多听说过WebSockets,我想确保它可以在我的客户端应用程序中使用。
谢谢!
答案 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。