Websocket 聊天实现

     2023-02-16     224

关键词:

【中文标题】Websocket 聊天实现【英文标题】:Websocket chat implementation 【发布时间】:2014-07-22 15:43:18 【问题描述】:

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

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

【问题讨论】:

【参考方案1】:

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

它们是任何跨语言/跨平台实时流/消息传递相关任务的特别适合的解决方案,因为当任何新数据到达时,客户端/消费者会立即得到通知,而无需轮询* *.

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

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

如果您想要基本的即时消息,它就像常规聊天一样简单:您只需将聊天室中每个人的收件人列表更改为该对话中的特定客户。

如果您想构建一个生产级即时通讯应用程序,您应该意识到您不必重新发明***:您可以在任何 XMPP 库之上构建您的通讯程序应用程序,或者编写您自己的协议。无论哪种方式,它都减轻了很大一部分设计负担,让您专注于 GUI 或您认为合适的任何扩展。

如果您对后者感兴趣。查看atmosphere(特别是他们的plugins and extensions)和这篇文章(有点旧,但它是很好的介绍性内容):

http://jfarcand.wordpress.com/2010/11/08/using-jquery-xmpp-and-atmosphere-to-cluster-your-websocketcomet-application/

(** 如果您想使用 RMI,例如,您需要在服务器端和客户端都使用 JVM,或者需要 RMI-IIOP 实现来支持 CORBA,这对于简单的任务来说非常麻烦。还有一些基于Comet 的流行替代方案,这比 W3C 标准更像是一组技术:它比 websockets 更难使用并且有一些限制,但具有使用遗留技术和实时实现的好处通过使用 HTTP 1.1 持久连接,无需轮询即可进行通信)

【讨论】:

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

实现 ios 聊天(如whatsapp):websocket?

】实现ios聊天(如whatsapp):websocket?【英文标题】:implementingaioschat(likewhatsapp):websocket?【发布时间】:2014-10-0110:57:15【问题描述】:我正在尝试在ios中实现聊天服务。我的问题是:服务(如WhatsApp)如何工作?我找到了一个关... 查看详情

swoole+redis+websocket实现点对点即时聊天(代码片段)

Swoole+Redis+webSocket实现点对点即时聊天场景webSocket服务端代码前端代码场景Swoole+Redis+webSocket实现点对点即时聊天。webSocket服务端代码我们需要通过LaravelCommand来实现,因为Swoole只能运行在PHPCLI模式下。1.生成Command类phpart... 查看详情

swoole+redis+websocket实现点对点即时聊天(代码片段)

Swoole+Redis+webSocket实现点对点即时聊天场景webSocket服务端代码前端代码场景Swoole+Redis+webSocket实现点对点即时聊天。webSocket服务端代码我们需要通过LaravelCommand来实现,因为Swoole只能运行在PHPCLI模式下。1.生成Command类phpart... 查看详情

使用websocket实现聊天室(代码片段)

WebSocketnewWebSocket("服务器地址")//创建WebSocket//open:当webSocket服务连接成功时触发socket.addEventListener('open',funtion())Websocket事件open连接建立时触发message客户端接收服务端数据时触发error通讯发生错误时触发close连接关闭时... 查看详情

使用 php 在 android 中使用 websocket 实现聊天

】使用php在android中使用websocket实现聊天【英文标题】:Implementchatusingwebsocketinandroidwithphp【发布时间】:2014-08-1705:55:04【问题描述】:我想通过php在android中使用websocket实现聊天功能。我需要同样的php代码。场景是这样的。android... 查看详情

java是如何实现客服在线聊天功能的?

...候,需要考虑客户端和服务端之间的通信协议。可以使用WebSocket协议,这是一种全双工通信协议,支持客户端和服务端之间的实时通信。Java提供了多个WebSocket实现,比如Tyrus、Jetty和Netty。实现服务端:在服务端实现在线聊天功... 查看详情

ssh项目中使用websocket实现网页聊天功能

参考文章 :java使用websocket,并且获取HttpSession,源码分析  http://www.cnblogs.com/zhuxiaojie/p/6238826.html 1.在项目中引入依赖websocket遵循了javaee规范,所以需要引入javaee的包1<dependency>2<groupId>javax.w 查看详情

基于serverless与websocket的聊天工具实现(代码片段)

传统业务实现Websocket并不难,然而函数计算基本上都是事件驱动,不支持长链接操作。如果将函数计算与API网关结合,是否可以有Websocket的实现方案呢?API网关触发器实现WebsocketWebSocket协议是基于TCP的一种新的网络协议。它实现... 查看详情

websocket聊天室怎么实现轮询java

参考技术A循环一直看有没有消息while(true)     // 如果有消息处理 查看详情

spring-websocket实现简易在线聊天(代码片段)

引入spring-websocket包<dependencies> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-websocket</artifactId> <version>$websocket.ver 查看详情

vue使用websocket模拟实现聊天功能-简易版(代码片段)

vue使用WebSocket模拟实现聊天功能-简易版效果展示两个浏览器相互模拟1.创建模拟node服务在vue根目录下创建server.js文件模拟后端服务器**在server终端目录下载**npminstall--sws2.编写server.js文件代码如下varuserNum=0;//统计在线人数varchat... 查看详情

springboot+websocket实现简易聊天室

①:什么是WebSocket??WebSocket是一种在单个TCP连接上进行全双工通信的协议?根据这个定义有两个注意的地方:1.什么是协议??协议就是相互通信的计算机双方必须共同遵守的一组约定。2.WebSocket协议和HTTP协议的区别??1)HTTP协议... 查看详情

基于websocket实现网页版聊天室(代码片段)

  WebSocket,HTML5开始提供的一种在单个TCP连接上进行全双工通讯的协议,其使用简单,应用场景也广泛,不同开发语言都用种类繁多的实现,仅Java体系中,Tomcat,Jetty,Spring等都提供了对WS的API支持。本篇不做理论探究,仅自娱... 查看详情

uniapp+websocket实现在线聊天

...uni.onSocketOpenuni.onSocketMessageuni.onSocketErroruni.onSocketClose由于websocket在与服务器进行链接的时候有可能会断开,所以在最开始就加上了心跳,在断开的时候进行重链接。这个方法定义在App.vue上,直接在原型链上定义该方法,通过调... 查看详情

基于redis发布订阅和websocket实现聊天室功能

参考技术A同时在做消息的持久化的时候,可以利用Redis的Zset的特性来对历史消息进行存储。 查看详情

springboot2系列教程(十七)|整合websocket实现聊天室

...题,请后台留言,反正我也不会听。前言昨天那篇介绍了WebSocket实现广播,也即服务器端有消息时,将消息发送给所有连接了当前endpoint的浏览器。但这无法解决消息由谁发送,又由谁接收的问题。所以,今天写一篇实现一对一... 查看详情

springboot整合websocket实现即时聊天功能

参考技术A近期,公司需要新增即时聊天的业务,于是用websocket整合到Springboot完成业务的实现。一、我们来简单的介绍下websocket的交互原理:1.客户端先服务端发起websocket请求;2.服务端接收到请求之后,把请求响应返回给客户端... 查看详情

vue+websocket<简单实现聊天功能>(代码片段)

效果图:聊天室此篇文章是针对Websocket的简单了解和应用,利用Nodejs简单搭建一个服务器加以实现。首先创建一个vue项目然后再创建一个server文件夹,在终端上打开该文件夹,输入vueinit(一直敲"回车"键... 查看详情