我一直在阅读Jetty 9的文档,他们似乎已经去掉了Jetty套接字连接器。所以现在我们有了一个通用的ServerConnector,我们将HTTPConnection"升级"为WebSocket连接。我已经阅读了关于Socket与WebSocket的文档(Socket和WebSocket之间的区别?)以及该答案中链接的所有内容。我的问题是:
1) 如何从HTTPConnection升级到WebSocket连接?有人能提供一些示例代码吗?
2) 我正在构建一个桌面应用程序,它也连接到我正在编写的服务器。我需要模拟TCP连接,WebSocketConnection对我有用吗?我之所以这么问,是因为我大多在浏览器的上下文中听说WebSockets,我想确保它是我可以在客户端应用程序中使用的东西。
谢谢!
WebSocket不是一个裸TCP连接,让我们先解决这个问题。
它是一种成帧协议,用于TEXT、BINARY和CONTROL帧(CONTROL帧是用于PING、PONG、CLOSE等事物的微小帧)
最好阅读官方协议规范以更好地理解这一点:RFC-6455
客户端不需要是浏览器,客户端可以是任何能够发出web请求的应用程序。
如果这符合您的需要,请继续阅读。
Jetty本身使用本机API提供了WebSocket服务器和WebSocket客户端实现,并且还支持javax.websocket
标准(也就是JSR-356)。
至于JettyWebSocketServer,它在内部执行org.eclipse.jetty.websocket.server.WebSocketFactory
upgrade()
私有方法中的升级。
如果您选择在Jetty上试用WebSocket,请阅读文档并从本机API或javax.websocket
API中进行选择,其中任何一种都可以工作。
如果你想了解这些API之间的差异,实际上有一个不同的问题/答案。
回答Q1)
我认为对于你的第一个问题,这将有所帮助。有关更多详细信息,请参阅给定的链接。Jetty提供了通过使用WebSocketServlet桥接Servlet将WebSocket端点连接到Servlet路径规范的能力。在内部,Jetty管理到WebSocket的HTTP升级以及从HTTP连接到WebSocketConnection的迁移
链接1:http://www.eclipse.org/jetty/documentation/current/jetty-websocket-server-api.html
回答Q2)
websocket服务器和客户端的全双工通信是在初始TCP握手时进行的对于您的websocket客户端应用程序,以下工作示例肯定可以使用。。。它是一个纯粹的JAVA WEBSOCKET客户端。我试过了,效果很好
链接2:http://www.eclipse.org/jetty/documentation/current/jetty-websocket-client-api.html