在任何现代Internet服务中,只有两个主要功能:
- 首先是用户授权。
- 第二个是从服务器到客户端的即时事件发送。
我认为第一点不需要解释。
第二点是客户端-服务器技术,反之亦然。 客户端不会定期向服务器发出请求-是否有任何新消息。 当发生某个事件时,服务器立即将消息发送到客户端。
为了更好地理解,服务并不是在真空中进行的。 服务可以表示为:
- 云中包含文件的文件夹。 有关更改,添加和删除的信息会发送给其他用户或当前用户,但会发送给其他设备。
- 一种用于读取服务器日志的计算机程序,当出现“错误”记录时,会将记录的内容发送给手机上的用户。
- 在公寓门附近移动时,视频窥视孔(摄像机)正在拍照。
- 一种从android-auto应用程序接收遥测的服务。
- 与上一段相似的服务,它使您可以确定孩子是否上学或放学回家。
该列表可以无限扩展;例如,仅给出最著名的用例。
几乎所有服务示例都可以以“信使”的形式呈现。 完全以这种方式描述了部分示例;我看到了有关如何连接相机并将图片发送到一个著名的Messenger的文章。
不久前,有一篇文章说,局外人是在门口而不是在人工智能中观看摄像机服务。 我不会关注大型“好”公司的免费服务。 正如他们在著名的谚语“免费奶酪发生在捕鼠器中”中所说,并在另一个谚语“您的衬衫离您的身体更近”的指导下说的那样,您的“服务”更好。
服务器脚本代码是开放和免费的
我选择了node.js socket.io postgreSQL作为实现,两年多以前我实现了第一个版本,并且该服务与1c
https://infostart.ru/public/545047/紧密相连,他们尚未在任何地方宣布交互服务器。 但是很久以前,此刻,服务器部分没有与所提到的程序连接,客户端部分可以集成为外部处理或扩展。
选择的名称很重要-“ push0k”。 第一部分取自短语“ push message”,第二个英文缩写形式是英文的okay,但最重要的部分用零表示。
在这种情况下,这不是“捕鼠器中的免费奶酪”,因为它需要Windows,Linux,macOS(服务器)计算机才能通过Internet工作,因此需要一个外部IP地址(可能已转发)。 最好是与外部IP地址关联的域名。 同样,与域名相关联的自签名证书是理想的,但不是必需的。
这样就没有硬件要求,它可以在有docker的家庭nas上工作。 nas中的Docker表示x86-64架构,而没有docker则无法在此类nas中安装postgreSQL。 对这样的服务器可以支持多少个客户端的准确理解取决于任务-服务的逻辑以及客户端之间传输的流量。
服务器说明:
服务器使用其他模块:
- socket.io-该模块添加了带有大量ext的websocket协议。 机会。
- node-postgres-与postgreSQL数据库服务器通信的模块。
- pm2是一个模块,用于使用负载均衡器启动多个服务器进程。
服务器文件:
- starter.js-http(s)服务,可以说是服务器管理面板。 通过此服务,可以更改设置并启动主Websocket服务器的进程。
- push0k.js是主要的websocket服务器。
- starter_cfg.js-服务器管理脚本设置。 连接到postgreSQL和用于https连接的文件。 https连接的文件以及域名可能与主服务器不同,以提高安全性。 在第一次启动时手动进行更改。
- config.js-整个服务器的基本设置。
- package.js-工作所需的文件描述版本作者模块。
- push0kStructure.sql-用于初始初始化的postgreSQL数据库的文件描述,为空数据库。
安装方式:
1.最初,您需要安装node.js
nodejs.org/en/download2. PostgreSQL也必须安装在本地网络计算机上或相同的
postgrespro.ru/products/download在postgreSQL服务器上,有必要执行“ push0kStructure.sql”文件或该文件中的几乎所有查询,以创建具有必要表的数据库。
3.将前五个服务器文件(push0kStructure.sql除外)下载到任何计算机目录。
4.在任何文本编辑器中,编辑文件“ starter_cfg.js”。 重要的是指定用于连接到postgreSQL服务器的参数,并设置用于连接到push0k服务器的管理部分的端口。
5.启动终端(控制台),然后使用命令“ cd / path / your / directory /”转到服务器文件目录。 terminal命令中指定的路径应从第3点开始。
6.在“ npm install”终端中运行命令以安装其他模块。
在终端“ node starter.js”中运行命令以启动管理服务。
7.下载并安装push0k管理程序。 在“ push0k admin” Websocket中,配置了基本参数,服务器端口,进程数以及许多其他参数。 您可以控制服务器进程的启动和停止,创建和管理用户及其房间(组)。
Push0k管理员应用程序

该应用程序是使用vue.js在电子上完成的。 在内部,实现了一种窗口系统,可以像窗口一样拖放小模式对话框,窗口的窗口标题类似于Mac OS(与最新版本一样),类似于Windows 10,但是到目前为止还没有考虑到黑暗的主题。 稍后我将在Linux上对其进行编译,对话框标题有点复杂,我认为它会像在ubuntu中一样,如果不是ubuntu,则将赢得10种风格。 在Win 10和Mac OS中看不到超过150兆字节的内存消耗。
在以前的版本中,不可能添加动画,没有狂热就做了一点。 前面描述的对话框-窗口从应用程序窗口的中心出现,逐渐增加,关闭时,飞到中心,逐渐减少。 同样,按钮按下和必填字段均已设置动画。

在实现过程中,强烈希望制作一个深色主题,但是由于还没有浅色主题,我只需要满足于右侧的按钮面板。 在Mac OS上,只有黑色部分具有活力效果,也就是说,它是部分透明的,类似于标准界面的大多数窗口。 不幸的是,在Windows中,由于Windows中没有类似的电子功能,因此无法实现称为流畅设计的类似效果。
如前所述,该控件使用http和ws(websocket)协议。 可以使用安全的https和wss连接。 通过安全连接,您可以查看所使用证书的数据。 与浏览器类似,使用“锁定”图标-连接是安全的,使用“打开锁定”-连接是不安全的。 并且分别没有图标-不使用安全连接。

一般逻辑
我从未见过这样的应用程序。 在开发过程中,我受到这样一个事实的指导:我本人会对监视以及在统计数据中看到哪些参数感兴趣。
例如,在每个连接的连接表中,有数据“连接时间”,“授权时间”,“同步时间”。 第一个允许您了解连接“ ws://”或受保护的“ wss://”建立的速度。 第二个-连接之后,带有授权数据的消息将单独发送,在授权期间,将执行用户验证请求,并且每个连接的密码哈希检查都是唯一的。 第三是接收新消息和新的或更新的参考数据的时间。 同样,通常会保存node.js,socket.io和其他描述的数据的版本,这使得有可能了解node.js或模块的更新如何分别影响速度或某些服务器优化可能受到影响。

在上面的示例中,仅描述了此类数据的一小部分。 另外,在单独的表中,保存了MB / s的时间,大小和速度。 下载数据同步。 该表存储将附件文件下载到服务器以及从服务器下载该数据的数据。
根据情况,在客户端或服务器上计算出计算速度的时间。 由于无法完美同步,因此无法同时使用服务器和客户端的时间。 这在客户端和服务器之间施加了较小的ping大小延迟(传递确认)。 当上传或下载大文件时,所描述的延迟并不重要。
在连接表中,可以看到闭合连接的同步数据“已发送字节”,“已接收字节”和“大小”大于“已发送字节”。 同步数据时,socket.io使用自动压缩,而在下载或下载附件时,自动压缩被禁用,因为经常压缩已压缩的文件会对速度产生负面影响。
正如本文开头所写,创建一个通用服务并将尽可能多的用户连接到它从来不是一个目标。 但是,从理论上讲可以有多少用户以及服务器将承受什么样的负载总是很有趣的。
为此,我做了一个简单的测试:在线向某个房间(组)的客户端发送一条带有测试参数的消息(参数中只有一个主要参数-消息数量),每个客户端都会在线将该消息发送给其他客户端。 测试分发后,将计算postgresql表中所有消息,通知,条目的总时间,所有消息,通知和条目的数量,并据此计算速度,包括服务器上所有操作的总和。
屏幕截图中的示例:
有时最令人惊讶的是,只有10,000条消息和390,000个手势,
发送50,000条消息:服务器进程:4用户:3
收到的邮件总数10,000 * 3 = 30,000
转发到其他服务器进程30,000 *服务器进程:4-1 = 90,000
发送给收件人30,000 *用户:3-1 = 60,000
消息被写入PostgreSQL表30 000
收到90,000个交货通知
记录在postgreSQL的传递通知表中90,000
全部运营390,000push0k admin中的数据逻辑
对于每个连接,将获取所有参考数据:用户,房间,设备,数据库以及“新闻统计”的最后300个条目:连接,数据同步,附件转发,消息,日志。
消息实际上重复了postgresql表,并且没有过滤器,设置和可以完全看到消息的表单。 表的逻辑是调试,可以在开发过程中快速查看消息是否到达表。

表“用户”,“房间(组)”,“连接”和“日志”会自动更新。 对于其余数据,没有必要在线更新。
可以在此处下载push0k管理应用程序:
Windows:
push0kadmin安装程序19.1.11.exeMac OS:
push0kadmin-19.1.11.dmg它是免费的,但与服务器不同,我不打算打开源代码。
在下一篇文章中,我将描述push0k desctop客户端的客户端部分,以及一个小示例,代码以及如何连接,登录和从服务器接收数据。
对于先前提到的早期版本,还有一个android客户端,它永久存在于android的第7和第8版中。 但是现在,我想我已经很长时间没有落后了。 后来,我认为第三篇文章将介绍一个android客户端,您可以看到并且与iOS并不遥远。