Twitter流媒体可视化与.NET Core发布器

本文将介绍如何构建一个使用.NET Core的Twitter流媒体发布器,该发布器能够捕获Twitter的流媒体数据,处理后通过消息代理重新发布文本和头像,以供JavaScript客户端订阅和显示。

应用程序的架构简单但功能强大。有一个发布器应用程序,它从Twitter API消费推文并将其发布到消息代理。代理负责消息的多播和广播,用于将处理过的推文从发布器传输到HTML5消费者。

推文发布器(C#/.NET Core

以下是应用程序的大部分代码,该应用程序消费Twitter流,处理它并重新发布到Emitter。

public class Program { public static void Main(string[] args) { // 连接到发射器 var emitter = Connection.Establish(); // 设置凭据 (https://apps.twitter.com) Auth.SetUserCredentials( Environment.GetEnvironmentVariable("CONSUMER_KEY"), Environment.GetEnvironmentVariable("CONSUMER_SECRET"), Environment.GetEnvironmentVariable("ACCESS_TOKEN"), Environment.GetEnvironmentVariable("ACCESS_TOKEN_SECRET") ); // 设置速率限制器,每350毫秒重新发布一条推文 var limiter = new Throttle(1, TimeSpan.FromMilliseconds(350)); // 使用样本流 var stream = Stream.CreateSampleStream(); stream.AddTweetLanguageFilter(LanguageFilter.English); stream.FilterLevel = Tweetinvi.Streaming.Parameters.StreamFilterLevel.Low; stream.TweetReceived += (sender, t) => { // 跳过转推 if (t.Tweet.IsRetweet) return; // 限制器允许以稳定、视觉上令人愉悦的速率显示推文 var ct = new CancellationToken(); limiter.Enqueue(() => { // 将推文发布到代理 emitter.Publish( "IsQ7z18uGEFpjOJpt4K6ij49klT3PGzu", "tweet-stream", JsonConvert.SerializeObject(new { avatar = t.Tweet.CreatedBy.ProfileImageUrl400x400, text = t.Tweet.Text })); }, ct); }; // 开始 stream.StartStream(); } }

使用Docker部署推文发布器

将使用Docker部署.NET Core发布器。Docker容器将软件包装在一个完整的文件系统中,包含运行所需的一切:代码、运行时、系统工具、系统库 - 任何可以安装在服务器上的东西。这保证了软件将始终以相同的方式运行,无论其环境如何。

开始的最简单的方法之一是使用Dockerfile以及Docker Hub Build Server,它将构建可以在目标机器上部署的镜像。Docker Hub允许自动构建Docker镜像(这里可以将其视为虚拟机镜像),可以部署。该镜像可以设置为在git仓库的每次提交时自动重新构建。

Docker文件如下所示,它做了几件事情,本质上是一个用于创建Docker镜像的脚本:

FROM microsoft/dotnet:1.0.0-preview2-sdk MAINTAINER Roman Atachiants "roman@misakai.com" # 确保有S3和额外的库 RUN apt-get update -qq \ && apt-get install -y git \ && mkdir /tmp/emitter \ && cd /tmp/emitter \ && git clone "https://github.com/kelindar/twitter-stream.git" "/tmp/emitter" \ && cd /tmp/emitter \ && dotnet restore -v Minimal \ && cd /tmp/emitter/src/Server \ && dotnet publish -c Release --output /app \ && rm -rf /tmp/emitter # 应用程序将在app文件夹中 WORKDIR /app ADD deploy.sh / CMD ["/bin/bash", "/deploy.sh"]

一旦镜像构建完成,可以通过键入docker run -it kelindar/twitter-stream来启动它,假设已经安装了docker。它将自动从Docker Hub下载镜像并为交互式运行。

JavaScript客户端

与刚刚编写的C#应用程序类似,客户端非常简单直接。实际上,除了依赖项之外,所有的JavaScript代码如下所示。客户端做了几件事情:

// 连接到发射器代理 var emitter = emitter.connect({ secure: true }); var key = 'jtdQO-hb5jfujowvIKvSF41NeQOE8IoF'; var vue = new Vue({ el: '#app', data: { messages: [] } }); emitter.on('connect', function(){ // 一旦连接,就订阅'tweet-stream'频道 console.log('emitter: connected'); emitter.subscribe({ key: key, channel: "tweet-stream" }) }); // 对于每条消息,打印出来 emitter.on('message', function(msg){ // 如果已经有很多消息,删除最旧的一条(第一条) if (vue.$data.messages.length >= 8){ vue.$data.messages.shift(); } // 推送收到的消息 vue.$data.messages.push(msg.asObject()); });
沪ICP备2024098111号-1
上海秋旦网络科技中心:上海市奉贤区金大公路8218号1幢 联系电话:17898875485