用于实时应用的 Socket.io

     2023-03-07     61

关键词:

【中文标题】用于实时应用的 Socket.io【英文标题】:Socket.io for real time application 【发布时间】:2011-09-23 01:24:50 【问题描述】:

所以我有几个月前建立的另一个项目。它目前使用 jquery 和 ajax 并每 30 秒调用一次 php 脚本。 php 脚本查询 mysql 并将结果传回显示。在此应用程序中,该人能够从数据库中添加/编辑/删除记录,并且当他们这样做时,数据库中的结果列表需要更新他们看到的列表。到目前为止,它似乎可以完成这项工作,但展望未来,数据库会变得更大,并且需要更多的实时性,这意味着不仅每 30 秒刷新一次,而且尽可能即时。

socket.io 会是这个问题的答案吗?我是否可以简单地将 socket.io 与 nodejs 一起使用来创建服务器并发出事件来查询我的数据库并返回结果以显示?然后在客户端只有一个函数像每秒一样调用服务器套接字脚本?那是使用 socket.io 的正确途径吗?如果是这样的话,如果我每秒运行一次关于服务器资源的进程,会不会有问题?

【问题讨论】:

【参考方案1】:

socket.io 会是这个问题的答案吗?

我的回答是,socket.io / node.js 在处理实时应用程序方面比当前形式的 PHP 要好得多。

然后在客户端只有一个 调用服务器套接字的函数 像每秒一样的脚本?

在 node.js 中,您不应该轮询询问信息,而是应该将信息推送给您(使用 redis pubsub 或 node.js 事件)给您。我建议您在 ***.com 上查看我的 a pubsub snippet 以稍微解释一下自己。要使代码正常工作,您需要安装 socket.io 0.6.x(0.6.18),因为最新的 socket.io 0.7.x 的 API 略有不同。

如果是这样,是否会担心 这个过程如果我每秒运行一次 关于服务器资源?

就像我之前所说的使用 pubsub 语义。例如,您可以使用:

redis pubsub events

【讨论】:

@Alfred 这就是我感到困惑的地方。所以你说我不需要在客户端或服务器端每隔一段时间运行一个脚本?我可以在服务器端设置它,它只在有更新时推送数据?假设在数据库中添加或删除了一行,可以设置脚本来检测这一点并推送到客户端而不使用 setinterval 之类的东西? @John 这正是我要说的:)。您应该从提供的 cli 中使用 Redis 的 pubsub 以查看它的运行情况。当数据库发生变异时,您将更改发布到感兴趣的所需频道... @Alfred 我正在阅读您的示例,我相信我理解它,有点。基本上我会为他们订阅一个频道,我的问题是什么是频道,我将如何创建频道来执行查询数据库并返回结果之类的操作?或者这不是一个频道? 在我上面发布的redis pubsub => redis.io/topics/pubsub 文章中,我想清楚地解释了(比我能做到的更好?)什么是 Pub/Sub。剩下的,我学习 redis 的方法是启动 redis-server 并运行几个 redis-cli 实例并使用它。在我看来,学习东西的最好方法是玩它,这就是为什么 redis + redis-cli 很棒。我还建议您阅读 Simon Willison 的教程 => simonwillison.net/static/2010/redis-tutorial @Alfred 是的,我阅读了该页面,这让我大吃一惊。我想我还不明白。【参考方案2】:

socket.io 会是这个问题的答案吗?我是否可以简单地将 socket.io 与 nodejs 一起使用来创建服务器并发出事件来查询我的数据库并返回结果以显示?然后在客户端只有一个函数像每秒一样调用服务器套接字脚本?那是使用 socket.io 的正确途径吗?如果是这样,如果我每秒运行一次关于服务器资源的进程,会不会有问题?

如果你想要实时的东西。结构可能不同。

首先你需要一个中间人来帮助你在浏览器和服务器之间进行通信。

解决方案 1:每 30 秒请求一次以获取实时(与您当前的方法相同)

解决方案 2:http 流。一旦向服务器发出请求。服务器可以继续向浏览器发送响应。由于许多安全浏览器问题,socket.io 应运而生。 Socket.io提供了很多方法流,htmlfile流,xhr请求,flash...

其次,您需要服务器接受连接并进行长轮询服务。感谢上帝 ! socket.io 已经为你完成了这部分。

第三,最重要的人!那是数据。

解决方案 1:每个请求/触发器调用 db 或 nosql 数据库(SQLserver、mysql、Mongodb)。相信我 !你的数据库很快就会死掉。

解决方案 2:消息服务。 Redis pub/sub、rabbitQ 等服务。它只是在队列中使用订阅和发布消息。它使用特定的协议来发布消息,并且它们没有像 db 那样存储消息。所以它可以发送消息 >100 k 请求/秒!超级快。哇!是否使用此服务可以解决实时解决方案?不幸的是,这有点难。为什么 ?因为使用这种服务你不能存储数据,SQL查询来定制你的数据需要。

解决方案 3:内存中的进程。Redis,memcached。内存超级快!您可以将最终显示结果存储在内存中。内存可以达到 >100 k 请求/秒。

结论。构建一个真正的实时 Web 应用程序,如 facebook 或 tweeter。我们需要应用上述所有解决方案+一些作弊。例如,Facebook 好友通知。当您收到朋友消息更新时,它会使用消息服务向所有朋友(最多 5000 人)发布警报。因为大量发布会降低消息性能。之后缓存(Memcached)通知消息以减少调用db(mysql)。我们可以得到超过 100 万人的群消息怎么样?当然,我们不会向超过 100 万人发布。但我们要求 100 万人调用我们存储在内存中的最新群组消息。

提醒:扩展服务器对于实现实时目标很重要。祝你好运!

【讨论】:

我正在构建一个用于分析的报告实时应用程序。我的应用程序将与 mysql 数据库交互以分析数据,并在我的应用程序上显示一些功能,例如分析用户注册/登录/聊天/通话的数量,然后显示在 dashbroad 视图上。如何使用 socket.io 做到这一点?有什么建议吗?

socket.io(代码片段)

...ketsocket.io一个是基于Nodejs架构体系的,支持websocket的协议用于实时通信的一个软件包。socket.io给跨浏览器构建实时应用提供了完整的封装,socket.io完全由javascript实现依赖的外部包express、socket.io安装npminstall--save-devexpressnpminstall--s... 查看详情

实时应用:Socket.io vs Pusherapp

】实时应用:Socket.iovsPusherapp【英文标题】:Realtimeapps:Socket.iovsPusherapp【发布时间】:2011-04-2200:58:51【问题描述】:在Socket.io和Pusherapp之间进行选择时,您会考虑哪些因素?重要的考虑因素包括:与现有系统(如rails/django)的集... 查看详情

使用 Socket.IO 实时显示点击计数器的应用

】使用Socket.IO实时显示点击计数器的应用【英文标题】:AppwiththecounterofclicksdisplayedinrealtimeusingSocket.IO【发布时间】:2018-03-1202:54:57【问题描述】:想象一下,我有一个只显示按钮的应用程序,并且用户可以点击这个按钮。在按... 查看详情

使用node.js+socket.io搭建websocket实时应用

Web领域的实时推送技术,也被称作Realtime技术。这种技术要达到的目的是让用户不需要刷新浏览器就可以获得实时更新。它有着广泛的应用场景,比如在线聊天室、在线客服系统、评论系统、WebIM等。作者:潘良虎链接:https://www... 查看详情

带有 socket.io 和后端 php 的 Angular

...程序(聊天)并使用angular,我的后端是php(codeigniterrestapi)用于mongodb中的数据库我在某处听说socket.io是套接字的最佳库(实时使用),我看到socket.io主要与node.js 查看详情

设计实时 Web 应用程序(Node.js 和 socket.io)

】设计实时Web应用程序(Node.js和socket.io)【英文标题】:Designingreal-timewebapplication(Node.jsandsocket.io)【发布时间】:2012-05-3008:35:40【问题描述】:我想问一些好的做法。我有一个Node.js(Express)Web服务器和socket.io推送服务器(以防技... 查看详情

使用androidnodejs和socket.io创建一个实时聊天应用程序(代码片段)

...常漂亮的工具,它允许我们在现代Web应用程序中建立实时通信。事实上,这个机制非常强大,它被用来构建不同类型的应用程序,如实时聊天或通知系统等。在本文中,我们将向您展示如何使用androidnodeJs和Sock... 查看详情

socket.io 广播不适用于 React

】socket.io广播不适用于React【英文标题】:socket.iobroadcastingnotworkingwithReact【发布时间】:2021-12-0717:17:47【问题描述】:我目前正在尝试在后端的Node.js应用程序和前端的React应用程序之间建立连接。从前端到后端的连接似乎没有任... 查看详情

socket.io中文文档

...,它的目标是构建可以在不同浏览器和移动设备上使用的实时应用。它会自动根据浏览器从WebSocket、AJAX长轮询、Iframe流等等各种方式中选择最佳的方式来实现网络实时应用,非常方便和人性化,而且支持的浏览器最低达IE5.5socket... 查看详情

聊天功能插件socket.io(代码片段)

一、Socket.io是什么  是基于时间的实时双向通讯库  基于websocket协议的  前后端通过时间进行双向通讯  配合express快速开发实时应用二、Socket.io和ajax区别  基于不同的网络协议  ajax基于http协议,单向,实时获取... 查看详情

Angularjs 中的 Socket.io

...目的是在服务器上保留一个“实时”数组,这些数组不可用于编写文档(因为其他人正在编辑它们)。但是我从socket.io聊天示例开始,我很快就陷入了困境。我确定我在这里遗漏了一 查看详情

python Socket.IO 客户端,用于向 TornadIO2 服务器发送广播消息

】pythonSocket.IO客户端,用于向TornadIO2服务器发送广播消息【英文标题】:pythonSocket.IOclientforsendingbroadcastmessagestoTornadIO2server【发布时间】:2012-06-1214:27:49【问题描述】:我正在构建一个实时Web应用程序。我希望能够从我的python应... 查看详情

用于web端的即时通讯的框架socket.io(代码片段)

...一个完全由JavaScript实现、基于Node.js、支持WebSocket的协议用于实时通信、跨平台的开源框架,它包括了客户端的JavaScript和服务器端的Node.js。Socket.IO除了支持WebSocket通讯协议外,还支持许多种 查看详情

通过 socket.io 流式传输实时音频

】通过socket.io流式传输实时音频【英文标题】:Streamrealtimeaudiooversocket.io【发布时间】:2021-11-1503:24:57【问题描述】:如何使用socket.io将实时音频从一个客户端流式传输到可能的多个客户端?我已经到了可以在同一个标​​签中... 查看详情

egg.js整合socket.io

参考技术A#####什么是Socket.io一个基于Node.js的实时应用程序框架,在即时通讯、通知与消息推送,实时分析等场景中有较为广泛的应用#####什么是egg-socket.io-对socket.io的二次封装,增加了一些开发规范-增加namespace(命名空间),可以通... 查看详情

一个关于vue+mysql+express的全栈项目------实时聊天部分socket.io(代码片段)

一、基于web端的实时通讯,我们都知道有websocket,为了快速开发,本项目我们采用socket.io(客户端使用socket.io-client)Socket.io是一个WebSocket库,包括了客户端的js和服务器端的nodejs,它的目标是构建可以在不同浏览器和移动设备上... 查看详情

socket.io在线聊天室

...avid发表在天码营 socket.io是一个JavaScript库,用来建立实时的WebApp。socket.io可以通过npm安装到Node.js的应用中,同时浏览器和服务器拥有同样的API接口。你还在思考socket.io是如何做到实时推送的么?它会利用HTML5的新特... 查看详情

socket.io 不适用于传输:['xhr-polling']

】socket.io不适用于传输:[\\\'xhr-polling\\\']【英文标题】:socket.iodoens\'tworkwithtransports:[\'xhr-polling\']socket.io不适用于传输:[\'xhr-polling\']【发布时间】:2015-05-0410:39:14【问题描述】:我正在尝试在socket.io中测试回退到轮询,以验证... 查看详情