Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/315.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Twitter是如何向其发送WebSocket的;s客户_Javascript_Python_Twitter_Websocket_Socket.io - Fatal编程技术网

Javascript Twitter是如何向其发送WebSocket的;s客户

Javascript Twitter是如何向其发送WebSocket的;s客户,javascript,python,twitter,websocket,socket.io,Javascript,Python,Twitter,Websocket,Socket.io,推特上有数百万条推特和数百万活跃用户。当一条tweet获得like或retweet时,他们如何向客户端发送每条tweet的实时更新(websockets) 我认为他们不会向每个活跃用户发送每条推文的实时更新(WebSocket),这会导致(活跃推文的数量)X(活跃用户的数量)=(百万)X(百万)>10^12条每分钟的实时更新,每个用户会在每分钟获得数百万条(所有推文的)更新 我认为特定推文的实时更新只会被观看该推文的用户接收。如果这一假设是正确的,那么请告诉我,他们如何过滤观看特定推文的客户端,

推特上有数百万条推特和数百万活跃用户。当一条tweet获得like或retweet时,他们如何向客户端发送每条tweet的实时更新(websockets)

我认为他们不会向每个活跃用户发送每条推文的实时更新(WebSocket),这会导致(活跃推文的数量)X(活跃用户的数量)=(百万)X(百万)>10^12条每分钟的实时更新,每个用户会在每分钟获得数百万条(所有推文的)更新

我认为特定推文的实时更新只会被观看该推文的用户接收。如果这一假设是正确的,那么请告诉我,他们如何过滤观看特定推文的客户端,并仅向过滤后的客户端发送该推文的实时更新?


我刚刚在Twitter上看了一条推文,我很惊讶地看到了该推文的喜欢和转发中的实时更新。我还没有看到任何社交媒体(如Instagram)为每一条推文提供实时更新。我想在我的社交媒体网站上实现这种方法。我得出的结论可能是正确的,也可能是错误的,但我想请你解释一下,Twitter如何只向正在观看的特定用户发送每一条推特的实时更新。

要清楚,一台设备有一个套接字连接,连接到推特的云

一个套接字连接,接收来自Twitter云的所有信息

  • 新推特
  • 新爱好
  • 新转发
  • 其他一切
所有信息都在一个插座上

云“计算”出要发送给谁的内容

这是你问的吗?希望它能把事情弄清楚

令人惊奇的是,twitter的云可以连接到大约100?同时拥有100万台设备。(这是一项惊人的重大工程成就,需要大量的硬件、资金和工程师。)


顺便说一句,如果你正试图为一个实验或客户端实现类似的东西。现在,你想从零开始编写服务器端来实现这一点是不可想象的。存在的服务正是这样做的——例如pusher.com、pubnub.com等等

(事实上,这些实时基础设施服务是我们这个时代的基本技术——一切都在它们上面运行。)



以下是推特云所涉及的令人难以置信的工作:

实时通信或你所说的“实时更新”都是各种低级网络协议的产物。下面是一些协议的一般背景知识,以便您了解您正在使用的协议:

常规RESTAPI使用HTTP作为通信的底层协议,它遵循请求和响应范例,这意味着通信涉及到客户端从服务器请求一些数据或资源,而服务器向该客户端做出响应。这是你通常在一个普通的网站上看到的,它不是真正的实时网站,而是在用户点击按钮或类似的触发之后显示或做一些事情

然而,HTTP是一种无状态协议,因此每个请求-响应周期都必须重复头和元数据信息。在请求-响应周期频繁重复的情况下,这会导致额外的延迟


尽管通信仍以初始HTTP握手开始,但需要进一步升级以遵循WebSockets协议(即,如果服务器和客户端都符合协议,因为并非所有实体都支持WebSockets协议)

现在有了WebSocket,就可以在客户端和服务器之间建立全双工持久连接。这意味着,与请求和响应不同,只要应用程序运行(即持久性),连接就保持开放状态,并且由于它是全双工,因此双向同步通信是可能的。现在,当新数据(客户机感兴趣的数据)可用时,服务器能够启动通信并将一些数据“推送”到客户机

WebSockets协议是有状态的,允许您实现发布-订阅(或发布/订阅)消息传递模式,这是实时技术中使用的主要概念,在实时技术中,您可以以服务器推送的形式获得新的更新,而无需客户端重复请求(刷新页面)。除Twitter之外的此类应用程序的例子包括Uber,如车辆位置跟踪、推送通知、股票市场价格实时更新、聊天、多人游戏、在线实时协作工具等

您可以查看一篇深入的文章,其中解释了该协议的历史、它是如何产生的、它的用途以及您自己如何实现它


另一个有趣的是SSE或,它是WebSockets的一个仅订阅版本,仅限于web平台。您可以使用SSE从服务器接收实时推送更新,但这是单向的,因为您只能通过SSE接收更新,而不能真正发布任何内容。下面是一段视频,我将对此进行更详细的解释:


您可以根据需要从头开始实施这些不同的协议,或者使用分布式消息传递服务,例如,它不仅提供这些协议的消息传递基础设施,而且还提供其他附加组件,如可扩展性、可靠性、消息顺序、协议互操作性等,这对于生产级应用程序至关重要


完整免责声明:我是Ably的开发倡导者,但我希望我的答案中的信息对您有用。

不,我不是在创业,我只是在创建一个社交媒体网站来学习web开发,我正在考虑尽可能为用户提供最好的服务。看了推特后,我想为什么我不能从中学习呢it@ram,太好了!请欣赏。你不需要