unigui显示websocket服务端向客户端发送信息【15】
用WebSocket从服务端直接发送消息给all客户端。
1、在ServerModule 放TUniThreadTimer

2、timer event:
procedure TUniServerModule.UniThreadTimer1Timer(Sender: TObject);
begin
BroadcastMessage('update',
[
'value', Random(1000)
],
[boClientOnly]);
end;
一个名为update的消息被发送给所有现有的客户端,它带有一个名为value的参数,这个参数是一个介于0 ..999。定时器被调整为每秒发送一次消息。boClientOnly选项确保消息只在客户端处理,不会为此事件触发Ajax请求。
注意:参数调整:
BroadcastMessage('update', [ 'value', Random(1000) ]);
这将会通过每次更新都会为每个活动客户端生成一个Ajax事件(去掉第三步:client event):
procedure TMainForm.UniFormBroadcastMessage(const Sender: TComponent;
const Msg: string; const Params: TUniStrings);
begin
if Msg = 'update' then
UniLabel1.Caption := Params['value'].AsString;
end;
3、在mainform的client event的ext:

4、run:
你的unilabel不断更新数字。
5、用途:当你想用日期和时间等值重复更新客户端时,这很有用。这将消除持续发送Ajax请求并使服务器忙于处理它们的TUniTimer的使用。变通一下params.value是一数据结构字符串,将会有更多用途
6、默认情况下,WebSocket请求将使用与主HTTP服务器相同的IP地址和端口。例如,如果你的应用程序在8077端口上运行,那么将使用相同的端口来处理WebSocket请求。如果你的应用程序URL看起来像http://myserver.com:8077,那么WebSocket连接URL将是ws://myserver.com:8077。将使用同一个HTTP服务器处理HTTP和WebSocket请求。此场景适用于独立服务器和服务应用程序。在这些应用中,不需要绑定到不同的端口或IP地址,因为主HTTP服务器能够同时处理HTTP和WebSocket请求。
但是,如果您的应用程序部署为ISAPI或Apache模块,则模块中将没有内部HTTP服务器。外部web服务器(IIS、Apache等)运行自己的内部HTTP服务器。每个web服务器都使用自己专门的方法与websocket进行接口。有些应用程序(如IIS)使用专门的API,而其他应用程序则使用重写规则和代理技术来实现相同的目标。我们已经在这里详细讨论了IIS和Apache部署。
一般来说,当你的部署方法不是独立的服务器或服务(Windows或Linux)时,你应该选择不同的端口和/或IP地址来处理WebSocket请求。当您选择不同的端口或IP时,uniGUI将运行一个单独的HTTP服务器监听这个新端口。
如果您选择一个IP地址,这个服务器将绑定自己到该IP地址。所有WebSocket请求都会定向到这个专用的HTTP服务器。
配置不同的端口为了给websocket配置不同的端口,需要在应用中做一些设置。如果您的应用程序在超级服务器集群中运行,则此配置应在超级服务器配置文件中完成。
在application的ServerModule中找到WebSocketServer类属性。在这个类下有一个名为AuxPort的属性。AuxPort的默认值是0,这意味着websocket不会使用额外的端口。
非零值将强制uniGUI创建一个新的HTTP服务器,该服务器将在AuxPort上侦听传入的WebSocket请求。
例子:
如果您的web应用程序在端口8077上运行,并且AuxPort设置为8088,那么所有常规HTTP请求都将在端口8077上服务。您的应用程序URL将如预期的那样是http://myserver.com:8077。 在这个例子中,WebSocket请求将在端口8088上提供服务,这个URL将用于请求WebSocket连接:ws://myserver.com:8088。 在同一个示例中,如果您的应用程序是ISAPI(或Apache)模块,那么您的应用程序将使用其常规URL访问web应用程序,
如http://myserver.com/myapp.dll,但同样ws://myserver.com:8088将用于请求WebSocket连接。这意味着IIS或Apache将处理常规的HTTP调用,而内部HTTP服务器(侦听8088端口)将用于服务WebSocket请求。 辅助端口和防火墙注意事项:
当你配置一个不同的端口时,你需要确保这个辅助端口可以通过你的服务器防火墙或作为网络基础设施一部分的任何其他防火墙访问。
同样重要的是,任何试图访问您的web应用程序的客户端也应该能够访问这个额外的端口。例如,这个端口不应该被客户端网络上的防火墙阻止。
这个问题可以通过使用一个内部代理来解决,它将WebSocket调用(ws://globalurl)重定向到本地辅助端口(ws://localurl:aux_port)。
实现这一目标的方法对于每个web服务器都是不同的。主要是必须配置一个URL重写规则,将外部ws://请求重定向到运行在不同端口的内部WebSockets服务器。在这种情况下,全局端口将与应用程序主端口相同,但内部WebSockets服务器端口将不同。要实现这一点,你需要显式设置GlobalPort参数或为GlobalBinding属性设置一个值,包括正确的全局端口号。 配置不同的IP地址:
我们在上面提到过,当你为websocket子系统配置一个不同的端口时,你还应该确保这个端口在服务器端和客户端都没有被阻塞。
如果您的公司或客户端有限制网络规则,避免打开除80 (http)或443 (https)以外的任何端口,这可能会很困难。
在这种情况下,你可能需要在服务器上为WebSocket请求指定一个备用IP,而不是使用其他端口。在这种情况下,不需要更改端口号,因为这个备用IP将在主HTTP服务器的同一个端口上监听。
配置不同的IP需要服务器上有一个备用的全局IP。您需要调整一些参数来启用此功能。
第一个需要调整的参数是WebSocketServer类的Binding属性。这应该包含WebSockets HTTP服务器绑定的备用IP地址。
如果这个IP是一个全局IP地址,那么单独设置这个属性就足够了,否则,如果本地绑定IP与全局IP不同,那么您还必须为GlobalBinding属性设置一个值。例如,在某些网络中,使用路由器将全局IP地址重定向到内部服务器。在这种情况下,全局IP或URL可以与内部绑定IP地址不同。
unigui显示websocket服务端向客户端发送信息【15】的更多相关文章
- Java TCP服务端向客户端发送图片
/** * 1.创建TCP服务端,TCP客户端 * 2.服务端等待客户端连接,客户端连接后,服务端向客户端写入图片 * 3.客户端收到后进行文件保存 * @author Administrator * ...
- WebSocket服务端和客户端使用
using System;using System.Collections.Generic;using System.IO;using System.Linq;using System.Net;usi ...
- HttpServletRequest获取浏览器、服务端和客户端信息
如何通过HttpServletRequest来获取到上面的属性呢? 1.引入开源工具 <!-- https://mvnrepository.com/artifact/eu.bitwalker/U ...
- C# WebSocket 服务端示例代码 + HTML5客户端示例代码
WebSocket服务端 C#示例代码 using System; using System.Collections.Generic; using System.Linq; using System. ...
- 使用WebSocket实现服务端和客户端的通信
开发中经常会有这样的使用场景.如某个用户在一个数据上做了xx操作, 与该数据相关的用户在线上的话,需要实时接收到一条信息. 这种可以使用WebSocket来实现. 另外,对于消息,可以定义一个类进行固 ...
- WebSocket——SuperWebSocket实现服务端和客户端
WebSocket——SuperWebSocket实现服务端和客户端具体实现如下: 注:本作者是基于vs2019 enterprise版本,所有项目均为.Net Framwork4.7版本(因为Web ...
- 进程间通信WebSocket 服务端未启动时,客户端重连报错
当WebSocket服务端未启动时,我们在客户端申请连接,会报 System.Net.Sockets.SocketException 异常. 当然,我们调试时异常设置默认是不勾选这个的.所以不影响正常 ...
- vue +signalR 实现服务端到客户端消息发送
承接上一篇 上一篇博客实现是了消息的实时通信,这一篇博客主要讲如何从中心服务内部向客户端发送消息. 先看下最终效果: 在core应用程序里加一个控制器TestController 注入控制器中的IHu ...
- 使用flask_socketio实现服务端向客户端定时推送
websocket连接是客户端与服务器之间永久的双向通信通道,直到某方断开连接. 双向通道意味着在连接时,服务端随时可以发送消息给客户端,反之亦然,这在一些需要即时通讯的场景比如多人聊天室非常重要. ...
- 【.NET+MQTT】.NET6 环境下实现MQTT通信,以及服务端、客户端的双边消息订阅与发布的代码演示
前言: MQTT广泛应用于工业物联网.智能家居.各类智能制造或各类自动化场景等.MQTT是一个基于客户端-服务器的消息发布/订阅传输协议,在很多受限的环境下,比如说机器与机器通信.机器与物联网通信等. ...
随机推荐
- 深度学习基础理论————DeepSpeed
DeepSpeed原理 DeepSpeed 是由微软开发的一种深度学习优化库,专为高性能训练和推理而设计,尤其适用于大规模深度学习模型(如 GPT 系列.BERT 等).它通过一系列技术和优化策略,帮 ...
- 批量查找替换工具(C#)
自己写了了个批量查找替换工具(C#),目前已知问题有查找速度不够快,假死现象等. using System; using System.Collections.Generic; using Syste ...
- WPF test animation robot(simulate blink,mouse talk)
WPF 动画,模拟机器人眨眼,说话. using System; using System.Collections.Generic; using System.Linq; using System.T ...
- Jordak pg walkthrough Intermediate
NMAP ┌──(root㉿kali)-[/home/ftpuserr] └─# nmap -p- -A 192.168.226.109 Starting Nmap 7.94SVN ( https:/ ...
- 在离线环境使用nuget包
原来程序集的引用 一个项目所有功能我们不可能都自己写对吧.这个时代 引用一大片的第三方包 项目源文件几百兆 ,有可能第三方包占了总体积99%.有可能我们自己写的代码不过几十行.想想我们原来的 老时代 ...
- overflow秒解外边距合并以及浮动导致的元素塌陷问题
外边距导致的合并问题: 1 处于一上一下位置的两个块级元素 在同时各自设置了上下边距时,二者间的外边距通常以 数值较大的一个作为两者间的外边距 而不是简单的数值相加 .box2{ width: 100 ...
- Linux 服务器防火墙开放端口命令(iptables、firewalld和ufw)
本文主要介绍Linux中,Centos.Ubuntu和Debian开放防火墙端口的命令(iptables.firewalld和ufw)方法. 1.Centos中开放端口 1.systemctl sta ...
- 本地部署 Browser-Use WebUI + 本地部署 DeepSeek 实现浏览器AI自动化
前一版采用的是 Deepseek 官方API,由于最近比较火,可能遇到服务器繁忙导致运行不成功,这一版选择通过 Ollama 本地部署的模型 一.安装部署(已安装 python3.11 或以上版本.p ...
- 自己如何在本地电脑从零搭建DeepSeek!手把手教学,快来看看! (建议收藏)
在人工智能飞速发展的今天,大语言模型的应用越来越广泛.DeepSeek 作为近期爆火的一款大语言模型,受到了众多开发者的青睐. 今天这篇内容,就来聊聊,如何在本地自己的电脑上部署DeepSeek. 1 ...
- Markdown语法基础教学
Markdown语法基础教学 简介 Markdown是一种轻量级的标记语言,它允许人们使用易读易写的纯文本格式编写文档,然后转换成结构化的HTML.它的目标是实现"易读易写",并且 ...