Java Websocket聊天实现

Java Websocket聊天实现,java,javascript,html,jakarta-ee,websocket,Java,Javascript,Html,Jakarta Ee,Websocket,我看到的Websockets的大部分演示都是聊天室应用程序。我想知道是否有可能创建更多的即时消息实现。不同之处在于,在聊天室应用程序中,许多用户连接并与每个人共享消息,而在即时消息应用程序中,用户可以连接到他们选择的其他用户 我希望它在没有任何插件的情况下工作。我在客户端使用JavaScript,在服务器端使用javaee。我研究了如何更改端点URL,但似乎必须在编译时知道它。我还研究了在onMessage方法中使用Session对象,但是我如何知道需要将消息发送到的用户的Session对象呢?

我看到的
Websockets
的大部分演示都是聊天室应用程序。我想知道是否有可能创建更多的即时消息实现。不同之处在于,在聊天室应用程序中,许多用户连接并与每个人共享消息,而在即时消息应用程序中,用户可以连接到他们选择的其他用户


我希望它在没有任何插件的情况下工作。我在客户端使用
JavaScript
,在服务器端使用
javaee
。我研究了如何更改端点
URL
,但似乎必须在编译时知道它。我还研究了在
onMessage
方法中使用
Session
对象,但是我如何知道需要将消息发送到的用户的Session对象呢?我觉得在所有会话对象中循环寻找正确的会话对象是一种缓慢的方法。那么,如何使用
WebSockets
创建一个类似即时消息的应用程序呢?

WebSockets用于服务器和客户端之间使用HTTP协议进行通信

它们特别适合于任何跨语言/跨平台实时流媒体/消息传递相关任务,因为当任何新数据到达时,客户机/消费者会立即收到通知,而无需轮询**

浏览器实现规范的客户端部分

大多数服务器端语言都有实现服务器部件的库

如果你想要基本的即时信息,它和普通聊天一样简单:你只需将聊天室中每个人的收件人列表更改为该对话中的特定客户

如果你想构建一个生产级的即时通讯应用程序,你应该意识到你不需要重新发明轮子:你可以在任何库上构建你的即时通讯应用程序,或者编写你自己的协议实现。无论哪种方式,它都会占用设计负担的很好的一部分,让你专注于GUI或任何你认为合适的扩展。 如果你对后者感兴趣的话。请查看(特别是他们的)这篇文章(虽然有点旧,但这是一篇很好的介绍性文章):


(**例如,如果您想改用RMI,您需要在服务器和客户端都使用JVM,或者RMI-IIOP实现来支持CORBA,这对于简单的任务来说是相当麻烦的。还有一些基于的流行替代方案,这是一组比W3C标准更多的技术:它比Web更难使用ockets和具有一些局限性,但其优点是使用传统技术并通过使用HTTP 1.1持久连接实现实时通信,而无需轮询)

如何将收件人列表更改为特定的客户端?这其实很简单:您的服务器应用程序通常会跟踪已连接的客户端(比如哈希表、链接列表或包含当前web套接字连接集的某种结构),以便将消息广播给该表中的所有人,但不包括消息源。现在,您只需将会话id与消息一起发送,并(在服务器上)保留一个额外的会话表,其中包含指向参与会话的连接的指针,以便将每条消息广播给正确的用户。(如果您使用的是标准协议,如XMPP,则实现将为您提供一个处理该问题的接口)